Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
authorDavid S. Miller <davem@davemloft.net>
Thu, 7 May 2020 05:10:13 +0000 (22:10 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 7 May 2020 05:10:13 +0000 (22:10 -0700)
Conflicts were all overlapping changes.

Signed-off-by: David S. Miller <davem@davemloft.net>
44 files changed:
1  2 
Documentation/admin-guide/kernel-parameters.txt
MAINTAINERS
drivers/infiniband/hw/mlx5/qp.c
drivers/net/dsa/ocelot/felix.c
drivers/net/dsa/ocelot/felix.h
drivers/net/dsa/ocelot/felix_vsc9959.c
drivers/net/ethernet/amazon/ena/ena_netdev.h
drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c
drivers/net/ethernet/broadcom/bnxt/bnxt.c
drivers/net/ethernet/broadcom/bnxt/bnxt.h
drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
drivers/net/ethernet/mellanox/mlx5/core/steering/dr_send.c
drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c
drivers/net/ethernet/moxa/moxart_ether.c
drivers/net/ethernet/mscc/ocelot.c
drivers/net/ethernet/mscc/ocelot_regs.c
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
drivers/net/ethernet/ti/Kconfig
drivers/net/ethernet/ti/am65-cpsw-nuss.c
drivers/net/hyperv/netvsc_drv.c
drivers/net/ipa/gsi.c
drivers/net/ipa/ipa_endpoint.c
drivers/net/macsec.c
drivers/net/phy/marvell10g.c
drivers/s390/net/qeth_core_main.c
include/linux/fs.h
include/linux/tcp.h
include/net/flow_offload.h
include/net/mptcp.h
include/net/sch_generic.h
include/soc/mscc/ocelot.h
include/uapi/linux/bpf.h
net/batman-adv/bat_v_ogm.c
net/bridge/br_netlink.c
net/core/devlink.c
net/core/neighbour.c
net/dsa/slave.c
net/ipv4/tcp_input.c
net/ipv6/route.c
net/mptcp/subflow.c
net/sched/cls_api.c
net/sched/sch_choke.c

diff --cc MAINTAINERS
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -693,6 -689,18 +693,12 @@@ static int dr_prepare_qp_to_rts(struct 
        return 0;
  }
  
 -static void dr_cq_event(struct mlx5_core_cq *mcq,
 -                      enum mlx5_event event)
 -{
 -      pr_info("CQ event %u on CQ #%u\n", event, mcq->cqn);
 -}
 -
+ static void dr_cq_complete(struct mlx5_core_cq *mcq,
+                          struct mlx5_eqe *eqe)
+ {
+       pr_err("CQ completion CQ: #%u\n", mcq->cqn);
+ }
  static struct mlx5dr_cq *dr_create_cq(struct mlx5_core_dev *mdev,
                                      struct mlx5_uars_page *uar,
                                      size_t ncqe)
        pas = (__be64 *)MLX5_ADDR_OF(create_cq_in, in, pas);
        mlx5_fill_page_frag_array(&cq->wq_ctrl.buf, pas);
  
 -      cq->mcq.event = dr_cq_event;
+       cq->mcq.comp  = dr_cq_complete;
        err = mlx5_core_create_cq(mdev, &cq->mcq, in, inlen, out, sizeof(out));
        kvfree(in);
  
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -1269,11 -1246,83 +1269,72 @@@ static void ipa_endpoint_reset(struct i
                        ret, endpoint->channel_id, endpoint->endpoint_id);
  }
  
+ static int ipa_endpoint_stop_rx_dma(struct ipa *ipa)
+ {
+       u16 size = IPA_ENDPOINT_STOP_RX_SIZE;
+       struct gsi_trans *trans;
+       dma_addr_t addr;
+       int ret;
+       trans = ipa_cmd_trans_alloc(ipa, 1);
+       if (!trans) {
+               dev_err(&ipa->pdev->dev,
+                       "no transaction for RX endpoint STOP workaround\n");
+               return -EBUSY;
+       }
+       /* Read into the highest part of the zero memory area */
+       addr = ipa->zero_addr + ipa->zero_size - size;
+       ipa_cmd_dma_task_32b_addr_add(trans, size, addr, false);
+       ret = gsi_trans_commit_wait_timeout(trans, ENDPOINT_STOP_DMA_TIMEOUT);
+       if (ret)
+               gsi_trans_free(trans);
+       return ret;
+ }
+ /**
+  * ipa_endpoint_stop() - Stops a GSI channel in IPA
+  * @client:   Client whose endpoint should be stopped
+  *
+  * This function implements the sequence to stop a GSI channel
+  * in IPA. This function returns when the channel is is STOP state.
+  *
+  * Return value: 0 on success, negative otherwise
+  */
+ int ipa_endpoint_stop(struct ipa_endpoint *endpoint)
+ {
+       u32 retries = IPA_ENDPOINT_STOP_RX_RETRIES;
+       int ret;
+       do {
+               struct ipa *ipa = endpoint->ipa;
+               struct gsi *gsi = &ipa->gsi;
+               ret = gsi_channel_stop(gsi, endpoint->channel_id);
+               if (ret != -EAGAIN || endpoint->toward_ipa)
+                       break;
+               /* For IPA v3.5.1, send a DMA read task and check again */
+               if (ipa->version == IPA_VERSION_3_5_1) {
+                       ret = ipa_endpoint_stop_rx_dma(ipa);
+                       if (ret)
+                               break;
+               }
+               msleep(1);
+       } while (retries--);
+       return retries ? ret : -EIO;
+ }
  static void ipa_endpoint_program(struct ipa_endpoint *endpoint)
  {
 -      struct device *dev = &endpoint->ipa->pdev->dev;
 -      int ret;
 -
        if (endpoint->toward_ipa) {
 -              bool delay_mode = endpoint->data->tx.delay;
 -
 -              ret = ipa_endpoint_init_ctrl(endpoint, delay_mode);
 -              /* Endpoint is expected to not be in delay mode */
 -              if (!ret != delay_mode) {
 -                      dev_warn(dev,
 -                              "TX endpoint %u was %sin delay mode\n",
 -                              endpoint->endpoint_id,
 -                              delay_mode ? "already " : "");
 -              }
 +              if (endpoint->ipa->version != IPA_VERSION_4_2)
 +                      ipa_endpoint_program_delay(endpoint, false);
                ipa_endpoint_init_hdr_ext(endpoint);
                ipa_endpoint_init_aggr(endpoint);
                ipa_endpoint_init_deaggr(endpoint);
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -68,13 -68,8 +68,9 @@@ static inline bool rsk_is_mptcp(const s
        return tcp_rsk(req)->is_mptcp;
  }
  
- void mptcp_parse_option(const struct sk_buff *skb, const unsigned char *ptr,
-                       int opsize, struct tcp_options_received *opt_rx);
 +void mptcp_space(const struct sock *ssk, int *space, int *full_space);
  bool mptcp_syn_options(struct sock *sk, const struct sk_buff *skb,
                       unsigned int *size, struct mptcp_out_options *opts);
- void mptcp_rcv_synsent(struct sock *sk);
  bool mptcp_synack_options(const struct request_sock *req, unsigned int *size,
                          struct mptcp_out_options *opts);
  bool mptcp_established_options(struct sock *sk, struct sk_buff *skb,
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc net/dsa/slave.c
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -3527,27 -3523,16 +3527,37 @@@ static void tcf_sample_get_group(struc
  #endif
  }
  
 +static void tcf_gate_entry_destructor(void *priv)
 +{
 +      struct action_gate_entry *oe = priv;
 +
 +      kfree(oe);
 +}
 +
 +static int tcf_gate_get_entries(struct flow_action_entry *entry,
 +                              const struct tc_action *act)
 +{
 +      entry->gate.entries = tcf_gate_get_list(act);
 +
 +      if (!entry->gate.entries)
 +              return -EINVAL;
 +
 +      entry->destructor = tcf_gate_entry_destructor;
 +      entry->destructor_priv = entry->gate.entries;
 +
 +      return 0;
 +}
 +
+ static enum flow_action_hw_stats tc_act_hw_stats(u8 hw_stats)
+ {
+       if (WARN_ON_ONCE(hw_stats > TCA_ACT_HW_STATS_ANY))
+               return FLOW_ACTION_HW_STATS_DONT_CARE;
+       else if (!hw_stats)
+               return FLOW_ACTION_HW_STATS_DISABLED;
+       return hw_stats;
+ }
  int tc_setup_flow_action(struct flow_action *flow_action,
                         const struct tcf_exts *exts)
  {
Simple merge