Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
authorJakub Kicinski <kuba@kernel.org>
Fri, 15 Dec 2023 01:13:35 +0000 (17:13 -0800)
committerJakub Kicinski <kuba@kernel.org>
Fri, 15 Dec 2023 01:14:41 +0000 (17:14 -0800)
Cross-merge networking fixes after downstream PR.

Conflicts:

drivers/net/ethernet/intel/iavf/iavf_ethtool.c
  3a0b5a2929fd ("iavf: Introduce new state machines for flow director")
  95260816b489 ("iavf: use iavf_schedule_aq_request() helper")
https://lore.kernel.org/all/84e12519-04dc-bd80-bc34-8cf50d7898ce@intel.com/

drivers/net/ethernet/broadcom/bnxt/bnxt.c
  c13e268c0768 ("bnxt_en: Fix HWTSTAMP_FILTER_ALL packet timestamp logic")
  c2f8063309da ("bnxt_en: Refactor RX VLAN acceleration logic.")
  a7445d69809f ("bnxt_en: Add support for new RX and TPA_START completion types for P7")
  1c7fd6ee2fe4 ("bnxt_en: Rename some macros for the P5 chips")
https://lore.kernel.org/all/20231211110022.27926ad9@canb.auug.org.au/

drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c
  bd6781c18cb5 ("bnxt_en: Fix wrong return value check in bnxt_close_nic()")
  84793a499578 ("bnxt_en: Skip nic close/open when configuring tstamp filters")
https://lore.kernel.org/all/20231214113041.3a0c003c@canb.auug.org.au/

drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c
  3d7a3f2612d7 ("net/mlx5: Nack sync reset request when HotPlug is enabled")
  cecf44ea1a1f ("net/mlx5: Allow sync reset flow when BF MGT interface device is present")
https://lore.kernel.org/all/20231211110328.76c925af@canb.auug.org.au/

No adjacent changes.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
21 files changed:
1  2 
MAINTAINERS
drivers/dpll/dpll_netlink.c
drivers/net/ethernet/amazon/ena/ena_netdev.c
drivers/net/ethernet/broadcom/bnxt/bnxt.c
drivers/net/ethernet/broadcom/bnxt/bnxt.h
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
drivers/net/ethernet/freescale/fec_main.c
drivers/net/ethernet/intel/iavf/iavf.h
drivers/net/ethernet/intel/iavf/iavf_ethtool.c
drivers/net/ethernet/intel/iavf/iavf_main.c
drivers/net/ethernet/intel/iavf/iavf_virtchnl.c
drivers/net/ethernet/marvell/octeon_ep/octep_main.c
drivers/net/ethernet/marvell/octeontx2/af/rvu_npc.c
drivers/net/ethernet/mellanox/mlx5/core/en.h
drivers/net/ethernet/mellanox/mlx5/core/en_main.c
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c
include/linux/mlx5/mlx5_ifc.h
net/ipv4/tcp_input.c

diff --cc MAINTAINERS
Simple merge
Simple merge
@@@ -1835,65 -1759,21 +1837,79 @@@ static void bnxt_deliver_skb(struct bnx
        napi_gro_receive(&bnapi->napi, skb);
  }
  
+ static bool bnxt_rx_ts_valid(struct bnxt *bp, u32 flags,
+                            struct rx_cmp_ext *rxcmp1, u32 *cmpl_ts)
+ {
+       u32 ts = le32_to_cpu(rxcmp1->rx_cmp_timestamp);
+       if (BNXT_PTP_RX_TS_VALID(flags))
+               goto ts_valid;
+       if (!bp->ptp_all_rx_tstamp || !ts || !BNXT_ALL_RX_TS_VALID(flags))
+               return false;
+ ts_valid:
+       *cmpl_ts = ts;
+       return true;
+ }
 +static struct sk_buff *bnxt_rx_vlan(struct sk_buff *skb, u8 cmp_type,
 +                                  struct rx_cmp *rxcmp,
 +                                  struct rx_cmp_ext *rxcmp1)
 +{
 +      __be16 vlan_proto;
 +      u16 vtag;
 +
 +      if (cmp_type == CMP_TYPE_RX_L2_CMP) {
 +              __le32 flags2 = rxcmp1->rx_cmp_flags2;
 +              u32 meta_data;
 +
 +              if (!(flags2 & cpu_to_le32(RX_CMP_FLAGS2_META_FORMAT_VLAN)))
 +                      return skb;
 +
 +              meta_data = le32_to_cpu(rxcmp1->rx_cmp_meta_data);
 +              vtag = meta_data & RX_CMP_FLAGS2_METADATA_TCI_MASK;
 +              vlan_proto = htons(meta_data >> RX_CMP_FLAGS2_METADATA_TPID_SFT);
 +              if (eth_type_vlan(vlan_proto))
 +                      __vlan_hwaccel_put_tag(skb, vlan_proto, vtag);
 +              else
 +                      goto vlan_err;
 +      } else if (cmp_type == CMP_TYPE_RX_L2_V3_CMP) {
 +              if (RX_CMP_VLAN_VALID(rxcmp)) {
 +                      u32 tpid_sel = RX_CMP_VLAN_TPID_SEL(rxcmp);
 +
 +                      if (tpid_sel == RX_CMP_METADATA1_TPID_8021Q)
 +                              vlan_proto = htons(ETH_P_8021Q);
 +                      else if (tpid_sel == RX_CMP_METADATA1_TPID_8021AD)
 +                              vlan_proto = htons(ETH_P_8021AD);
 +                      else
 +                              goto vlan_err;
 +                      vtag = RX_CMP_METADATA0_TCI(rxcmp1);
 +                      __vlan_hwaccel_put_tag(skb, vlan_proto, vtag);
 +              }
 +      }
 +      return skb;
 +vlan_err:
 +      dev_kfree_skb(skb);
 +      return NULL;
 +}
 +
 +static enum pkt_hash_types bnxt_rss_ext_op(struct bnxt *bp,
 +                                         struct rx_cmp *rxcmp)
 +{
 +      u8 ext_op;
 +
 +      ext_op = RX_CMP_V3_HASH_TYPE(bp, rxcmp);
 +      switch (ext_op) {
 +      case EXT_OP_INNER_4:
 +      case EXT_OP_OUTER_4:
 +      case EXT_OP_INNFL_3:
 +      case EXT_OP_OUTFL_3:
 +              return PKT_HASH_TYPE_L4;
 +      default:
 +              return PKT_HASH_TYPE_L3;
 +      }
 +}
 +
  /* returns the following:
   * 1       - 1 packet successfully received
   * 0       - successful TPA_START, packet not completed yet
@@@ -2143,10 -2022,8 +2160,8 @@@ static int bnxt_rx_pkt(struct bnxt *bp
                }
        }
  
-       if (unlikely((flags & RX_CMP_FLAGS_ITYPES_MASK) ==
-                    RX_CMP_FLAGS_ITYPE_PTP_W_TS) || bp->ptp_all_rx_tstamp) {
+       if (bnxt_rx_ts_valid(bp, flags, rxcmp1, &cmpl_ts)) {
 -              if (bp->flags & BNXT_FLAG_CHIP_P5) {
 +              if (bp->flags & BNXT_FLAG_CHIP_P5_PLUS) {
-                       u32 cmpl_ts = le32_to_cpu(rxcmp1->rx_cmp_timestamp);
                        u64 ns, ts;
  
                        if (!bnxt_get_rx_ts_p5(bp, &ts, cmpl_ts)) {
@@@ -1435,11 -1436,16 +1435,15 @@@ static int iavf_add_fdir_ethtool(struc
        spin_lock_bh(&adapter->fdir_fltr_lock);
        iavf_fdir_list_add_fltr(adapter, fltr);
        adapter->fdir_active_fltr++;
-       fltr->state = IAVF_FDIR_FLTR_ADD_REQUEST;
-       spin_unlock_bh(&adapter->fdir_fltr_lock);
 -      if (adapter->link_up) {
 +
-       iavf_schedule_aq_request(adapter, IAVF_FLAG_AQ_ADD_FDIR_FILTER);
++      if (adapter->link_up)
+               fltr->state = IAVF_FDIR_FLTR_ADD_REQUEST;
 -              adapter->aq_required |= IAVF_FLAG_AQ_ADD_FDIR_FILTER;
 -      } else {
++      else
+               fltr->state = IAVF_FDIR_FLTR_INACTIVE;
 -      }
+       spin_unlock_bh(&adapter->fdir_fltr_lock);
  
 -              mod_delayed_work(adapter->wq, &adapter->watchdog_task, 0);
+       if (adapter->link_up)
++              iavf_schedule_aq_request(adapter, IAVF_FLAG_AQ_ADD_FDIR_FILTER);
  ret:
        if (err && fltr)
                kfree(fltr);
@@@ -1469,6 -1475,12 +1473,11 @@@ static int iavf_del_fdir_ethtool(struc
        if (fltr) {
                if (fltr->state == IAVF_FDIR_FLTR_ACTIVE) {
                        fltr->state = IAVF_FDIR_FLTR_DEL_REQUEST;
 -                      adapter->aq_required |= IAVF_FLAG_AQ_DEL_FDIR_FILTER;
+               } else if (fltr->state == IAVF_FDIR_FLTR_INACTIVE) {
+                       list_del(&fltr->list);
+                       kfree(fltr);
+                       adapter->fdir_active_fltr--;
+                       fltr = NULL;
                } else {
                        err = -EBUSY;
                }
@@@ -325,25 -325,29 +325,48 @@@ static void mlx5_fw_live_patch_event(st
                mlx5_core_err(dev, "Failed to reload FW tracer\n");
  }
  
+ #if IS_ENABLED(CONFIG_HOTPLUG_PCI_PCIE)
+ static int mlx5_check_hotplug_interrupt(struct mlx5_core_dev *dev)
+ {
+       struct pci_dev *bridge = dev->pdev->bus->self;
+       u16 reg16;
+       int err;
+       if (!bridge)
+               return -EOPNOTSUPP;
+       err = pcie_capability_read_word(bridge, PCI_EXP_SLTCTL, &reg16);
+       if (err)
+               return err;
+       if ((reg16 & PCI_EXP_SLTCTL_HPIE) && (reg16 & PCI_EXP_SLTCTL_DLLSCE)) {
+               mlx5_core_warn(dev, "FW reset is not supported as HotPlug is enabled\n");
+               return -EOPNOTSUPP;
+       }
+       return 0;
+ }
+ #endif
 +static const struct pci_device_id mgt_ifc_device_ids[] = {
 +      { PCI_VDEVICE(MELLANOX, 0xc2d2) }, /* BlueField1 MGT interface device ID */
 +      { PCI_VDEVICE(MELLANOX, 0xc2d3) }, /* BlueField2 MGT interface device ID */
 +      { PCI_VDEVICE(MELLANOX, 0xc2d4) }, /* BlueField3-Lx MGT interface device ID */
 +      { PCI_VDEVICE(MELLANOX, 0xc2d5) }, /* BlueField3 MGT interface device ID */
 +      { PCI_VDEVICE(MELLANOX, 0xc2d6) }, /* BlueField4 MGT interface device ID */
 +};
 +
 +static bool mlx5_is_mgt_ifc_pci_device(struct mlx5_core_dev *dev, u16 dev_id)
 +{
 +      int i;
 +
 +      for (i = 0; i < ARRAY_SIZE(mgt_ifc_device_ids); ++i)
 +              if (mgt_ifc_device_ids[i].device == dev_id)
 +                      return true;
 +
 +      return false;
 +}
 +
  static int mlx5_check_dev_ids(struct mlx5_core_dev *dev, u16 dev_id)
  {
        struct pci_bus *bridge_bus = dev->pdev->bus;
Simple merge
Simple merge