* [PATCH v2 0/7] Intel Wired LAN Driver Updates 2024-06-03
@ 2024-06-05 20:40 Jacob Keller
2024-06-05 20:40 ` [PATCH v2 1/7] net: intel: Use *-y instead of *-objs in Makefile Jacob Keller
` (6 more replies)
0 siblings, 7 replies; 14+ messages in thread
From: Jacob Keller @ 2024-06-05 20:40 UTC (permalink / raw)
To: netdev, David Miller, Jakub Kicinski
Cc: Jacob Keller, Andy Shevchenko, Aleksandr Loktionov,
Alexander Lobakin, Pucha Himasekhar Reddy, Michal Swiatkowski,
Wojciech Drewek, Sujai Buvaneswaran, Michal Schmidt,
Sunil Goutham, Jiri Pirko
This series includes miscellaneous improvements for the ice as well as a
cleanup to the Makefiles for all Intel net drivers.
Andy fixes all of the Intel net driver Makefiles to use the documented
'*-y' syntax for specifying object files to link into kernel driver
modules, rather than the '*-objs' syntax which works but is documented as
reserved for user-space host programs.
Michal Swiatkowski has four patches to prepare the ice driver for
supporting subfunctions. This includes some cleanups to the locking around
devlink port creation as well as improvements to the driver's handling of
port representor VSIs.
Jacob has a cleanup to refactor rounding logic in the ice driver into a
common roundup_u64 helper function.
Michal Schmidt replaces irq_set_affinity_hint() to use
irq_update_affinity_hint() which behaves better with user-applied affinity
settings.
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
---
Changes in v2:
- Drop patches 8 and 9 based on review feedback, so that they can be
reworked.
- Link to v1: https://lore.kernel.org/r/20240603-next-2024-06-03-intel-next-batch-v1-0-e0523b28f325@intel.com
---
Andy Shevchenko (1):
net: intel: Use *-y instead of *-objs in Makefile
Jacob Keller (1):
ice: add and use roundup_u64 instead of open coding equivalent
Michal Schmidt (1):
ice: use irq_update_affinity_hint()
Michal Swiatkowski (4):
ice: store representor ID in bridge port
ice: move devlink locking outside the port creation
ice: move VSI configuration outside repr setup
ice: update representor when VSI is ready
drivers/net/ethernet/intel/e1000/Makefile | 2 +-
drivers/net/ethernet/intel/e1000e/Makefile | 7 +-
drivers/net/ethernet/intel/i40e/Makefile | 2 +-
drivers/net/ethernet/intel/iavf/Makefile | 5 +-
drivers/net/ethernet/intel/ice/devlink/devlink.c | 2 -
.../net/ethernet/intel/ice/devlink/devlink_port.c | 4 +-
drivers/net/ethernet/intel/ice/ice_eswitch.c | 85 ++++++++++++++++------
drivers/net/ethernet/intel/ice/ice_eswitch.h | 14 +++-
drivers/net/ethernet/intel/ice/ice_eswitch_br.c | 4 +-
drivers/net/ethernet/intel/ice/ice_eswitch_br.h | 1 +
drivers/net/ethernet/intel/ice/ice_lib.c | 4 +-
drivers/net/ethernet/intel/ice/ice_main.c | 4 +-
drivers/net/ethernet/intel/ice/ice_ptp.c | 3 +-
drivers/net/ethernet/intel/ice/ice_repr.c | 16 ++--
drivers/net/ethernet/intel/ice/ice_repr.h | 1 +
drivers/net/ethernet/intel/ice/ice_vf_lib.c | 2 +-
drivers/net/ethernet/intel/igb/Makefile | 6 +-
drivers/net/ethernet/intel/igbvf/Makefile | 6 +-
drivers/net/ethernet/intel/igc/Makefile | 6 +-
drivers/net/ethernet/intel/ixgbe/Makefile | 8 +-
drivers/net/ethernet/intel/ixgbevf/Makefile | 6 +-
drivers/net/ethernet/intel/libeth/Makefile | 2 +-
drivers/net/ethernet/intel/libie/Makefile | 2 +-
include/linux/math64.h | 28 +++++++
24 files changed, 144 insertions(+), 76 deletions(-)
---
base-commit: 83042ce9b7c39b0e64094d86a70d62392ac21a06
change-id: 20240603-next-2024-06-03-intel-next-batch-4537be19dc21
Best regards,
--
Jacob Keller <jacob.e.keller@intel.com>
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v2 1/7] net: intel: Use *-y instead of *-objs in Makefile
2024-06-05 20:40 [PATCH v2 0/7] Intel Wired LAN Driver Updates 2024-06-03 Jacob Keller
@ 2024-06-05 20:40 ` Jacob Keller
2024-06-05 20:40 ` [PATCH v2 2/7] ice: store representor ID in bridge port Jacob Keller
` (5 subsequent siblings)
6 siblings, 0 replies; 14+ messages in thread
From: Jacob Keller @ 2024-06-05 20:40 UTC (permalink / raw)
To: netdev, David Miller, Jakub Kicinski
Cc: Jacob Keller, Andy Shevchenko, Aleksandr Loktionov,
Alexander Lobakin, Pucha Himasekhar Reddy
From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
*-objs suffix is reserved rather for (user-space) host programs while
usually *-y suffix is used for kernel drivers (although *-objs works
for that purpose for now).
Let's correct the old usages of *-objs in Makefiles.
Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
Reviewed-by: Alexander Lobakin <aleksander.lobakin@intel.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com>
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
---
drivers/net/ethernet/intel/e1000/Makefile | 2 +-
drivers/net/ethernet/intel/e1000e/Makefile | 7 +++----
drivers/net/ethernet/intel/i40e/Makefile | 2 +-
drivers/net/ethernet/intel/iavf/Makefile | 5 ++---
drivers/net/ethernet/intel/igb/Makefile | 6 +++---
drivers/net/ethernet/intel/igbvf/Makefile | 6 +-----
drivers/net/ethernet/intel/igc/Makefile | 6 +++---
drivers/net/ethernet/intel/ixgbe/Makefile | 8 ++++----
drivers/net/ethernet/intel/ixgbevf/Makefile | 6 +-----
drivers/net/ethernet/intel/libeth/Makefile | 2 +-
drivers/net/ethernet/intel/libie/Makefile | 2 +-
11 files changed, 21 insertions(+), 31 deletions(-)
diff --git a/drivers/net/ethernet/intel/e1000/Makefile b/drivers/net/ethernet/intel/e1000/Makefile
index 314c52d44b7c..79491dec47e1 100644
--- a/drivers/net/ethernet/intel/e1000/Makefile
+++ b/drivers/net/ethernet/intel/e1000/Makefile
@@ -7,4 +7,4 @@
obj-$(CONFIG_E1000) += e1000.o
-e1000-objs := e1000_main.o e1000_hw.o e1000_ethtool.o e1000_param.o
+e1000-y := e1000_main.o e1000_hw.o e1000_ethtool.o e1000_param.o
diff --git a/drivers/net/ethernet/intel/e1000e/Makefile b/drivers/net/ethernet/intel/e1000e/Makefile
index 0baa15503c38..18f22b6374d5 100644
--- a/drivers/net/ethernet/intel/e1000e/Makefile
+++ b/drivers/net/ethernet/intel/e1000e/Makefile
@@ -10,7 +10,6 @@ subdir-ccflags-y += -I$(src)
obj-$(CONFIG_E1000E) += e1000e.o
-e1000e-objs := 82571.o ich8lan.o 80003es2lan.o \
- mac.o manage.o nvm.o phy.o \
- param.o ethtool.o netdev.o ptp.o
-
+e1000e-y := 82571.o ich8lan.o 80003es2lan.o \
+ mac.o manage.o nvm.o phy.o \
+ param.o ethtool.o netdev.o ptp.o
diff --git a/drivers/net/ethernet/intel/i40e/Makefile b/drivers/net/ethernet/intel/i40e/Makefile
index cad93f323bd5..9faa4339a76c 100644
--- a/drivers/net/ethernet/intel/i40e/Makefile
+++ b/drivers/net/ethernet/intel/i40e/Makefile
@@ -10,7 +10,7 @@ subdir-ccflags-y += -I$(src)
obj-$(CONFIG_I40E) += i40e.o
-i40e-objs := i40e_main.o \
+i40e-y := i40e_main.o \
i40e_ethtool.o \
i40e_adminq.o \
i40e_common.o \
diff --git a/drivers/net/ethernet/intel/iavf/Makefile b/drivers/net/ethernet/intel/iavf/Makefile
index 2d154a4e2fd7..356ac9faa5bf 100644
--- a/drivers/net/ethernet/intel/iavf/Makefile
+++ b/drivers/net/ethernet/intel/iavf/Makefile
@@ -11,6 +11,5 @@ subdir-ccflags-y += -I$(src)
obj-$(CONFIG_IAVF) += iavf.o
-iavf-objs := iavf_main.o iavf_ethtool.o iavf_virtchnl.o iavf_fdir.o \
- iavf_adv_rss.o \
- iavf_txrx.o iavf_common.o iavf_adminq.o
+iavf-y := iavf_main.o iavf_ethtool.o iavf_virtchnl.o iavf_fdir.o \
+ iavf_adv_rss.o iavf_txrx.o iavf_common.o iavf_adminq.o
diff --git a/drivers/net/ethernet/intel/igb/Makefile b/drivers/net/ethernet/intel/igb/Makefile
index 394c1e0656b9..463c0d26b9d4 100644
--- a/drivers/net/ethernet/intel/igb/Makefile
+++ b/drivers/net/ethernet/intel/igb/Makefile
@@ -6,6 +6,6 @@
obj-$(CONFIG_IGB) += igb.o
-igb-objs := igb_main.o igb_ethtool.o e1000_82575.o \
- e1000_mac.o e1000_nvm.o e1000_phy.o e1000_mbx.o \
- e1000_i210.o igb_ptp.o igb_hwmon.o
+igb-y := igb_main.o igb_ethtool.o e1000_82575.o \
+ e1000_mac.o e1000_nvm.o e1000_phy.o e1000_mbx.o \
+ e1000_i210.o igb_ptp.o igb_hwmon.o
diff --git a/drivers/net/ethernet/intel/igbvf/Makefile b/drivers/net/ethernet/intel/igbvf/Makefile
index afd3e36eae75..902711d5e691 100644
--- a/drivers/net/ethernet/intel/igbvf/Makefile
+++ b/drivers/net/ethernet/intel/igbvf/Makefile
@@ -6,8 +6,4 @@
obj-$(CONFIG_IGBVF) += igbvf.o
-igbvf-objs := vf.o \
- mbx.o \
- ethtool.o \
- netdev.o
-
+igbvf-y := vf.o mbx.o ethtool.o netdev.o
diff --git a/drivers/net/ethernet/intel/igc/Makefile b/drivers/net/ethernet/intel/igc/Makefile
index ebffd3054285..efc5e7983dad 100644
--- a/drivers/net/ethernet/intel/igc/Makefile
+++ b/drivers/net/ethernet/intel/igc/Makefile
@@ -6,7 +6,7 @@
#
obj-$(CONFIG_IGC) += igc.o
-igc-$(CONFIG_IGC_LEDS) += igc_leds.o
-igc-objs := igc_main.o igc_mac.o igc_i225.o igc_base.o igc_nvm.o igc_phy.o \
-igc_diag.o igc_ethtool.o igc_ptp.o igc_dump.o igc_tsn.o igc_xdp.o
+igc-y := igc_main.o igc_mac.o igc_i225.o igc_base.o igc_nvm.o igc_phy.o \
+ igc_diag.o igc_ethtool.o igc_ptp.o igc_dump.o igc_tsn.o igc_xdp.o
+igc-$(CONFIG_IGC_LEDS) += igc_leds.o
diff --git a/drivers/net/ethernet/intel/ixgbe/Makefile b/drivers/net/ethernet/intel/ixgbe/Makefile
index 4fb0d9e3f2da..965e5ce1b326 100644
--- a/drivers/net/ethernet/intel/ixgbe/Makefile
+++ b/drivers/net/ethernet/intel/ixgbe/Makefile
@@ -6,10 +6,10 @@
obj-$(CONFIG_IXGBE) += ixgbe.o
-ixgbe-objs := ixgbe_main.o ixgbe_common.o ixgbe_ethtool.o \
- ixgbe_82599.o ixgbe_82598.o ixgbe_phy.o ixgbe_sriov.o \
- ixgbe_mbx.o ixgbe_x540.o ixgbe_x550.o ixgbe_lib.o ixgbe_ptp.o \
- ixgbe_xsk.o
+ixgbe-y := ixgbe_main.o ixgbe_common.o ixgbe_ethtool.o \
+ ixgbe_82599.o ixgbe_82598.o ixgbe_phy.o ixgbe_sriov.o \
+ ixgbe_mbx.o ixgbe_x540.o ixgbe_x550.o ixgbe_lib.o ixgbe_ptp.o \
+ ixgbe_xsk.o
ixgbe-$(CONFIG_IXGBE_DCB) += ixgbe_dcb.o ixgbe_dcb_82598.o \
ixgbe_dcb_82599.o ixgbe_dcb_nl.o
diff --git a/drivers/net/ethernet/intel/ixgbevf/Makefile b/drivers/net/ethernet/intel/ixgbevf/Makefile
index 186a4bb24fde..01d3e892f3fa 100644
--- a/drivers/net/ethernet/intel/ixgbevf/Makefile
+++ b/drivers/net/ethernet/intel/ixgbevf/Makefile
@@ -6,9 +6,5 @@
obj-$(CONFIG_IXGBEVF) += ixgbevf.o
-ixgbevf-objs := vf.o \
- mbx.o \
- ethtool.o \
- ixgbevf_main.o
+ixgbevf-y := vf.o mbx.o ethtool.o ixgbevf_main.o
ixgbevf-$(CONFIG_IXGBEVF_IPSEC) += ipsec.o
-
diff --git a/drivers/net/ethernet/intel/libeth/Makefile b/drivers/net/ethernet/intel/libeth/Makefile
index cb99203d1dd2..52492b081132 100644
--- a/drivers/net/ethernet/intel/libeth/Makefile
+++ b/drivers/net/ethernet/intel/libeth/Makefile
@@ -3,4 +3,4 @@
obj-$(CONFIG_LIBETH) += libeth.o
-libeth-objs += rx.o
+libeth-y := rx.o
diff --git a/drivers/net/ethernet/intel/libie/Makefile b/drivers/net/ethernet/intel/libie/Makefile
index bf42c5aeeedd..ffd27fab916a 100644
--- a/drivers/net/ethernet/intel/libie/Makefile
+++ b/drivers/net/ethernet/intel/libie/Makefile
@@ -3,4 +3,4 @@
obj-$(CONFIG_LIBIE) += libie.o
-libie-objs += rx.o
+libie-y := rx.o
--
2.44.0.53.g0f9d4d28b7e6
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v2 2/7] ice: store representor ID in bridge port
2024-06-05 20:40 [PATCH v2 0/7] Intel Wired LAN Driver Updates 2024-06-03 Jacob Keller
2024-06-05 20:40 ` [PATCH v2 1/7] net: intel: Use *-y instead of *-objs in Makefile Jacob Keller
@ 2024-06-05 20:40 ` Jacob Keller
2024-06-07 0:50 ` Jakub Kicinski
2024-06-05 20:40 ` [PATCH v2 3/7] ice: move devlink locking outside the port creation Jacob Keller
` (4 subsequent siblings)
6 siblings, 1 reply; 14+ messages in thread
From: Jacob Keller @ 2024-06-05 20:40 UTC (permalink / raw)
To: netdev, David Miller, Jakub Kicinski
Cc: Jacob Keller, Michal Swiatkowski, Wojciech Drewek,
Sujai Buvaneswaran, Jiri Pirko
From: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
It is used to get representor structure during cleaning.
Reviewed-by: Wojciech Drewek <wojciech.drewek@intel.com>
Signed-off-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
Tested-by: Sujai Buvaneswaran <sujai.buvaneswaran@intel.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
---
drivers/net/ethernet/intel/ice/ice_eswitch_br.c | 4 +++-
drivers/net/ethernet/intel/ice/ice_eswitch_br.h | 1 +
drivers/net/ethernet/intel/ice/ice_repr.c | 7 ++-----
drivers/net/ethernet/intel/ice/ice_repr.h | 1 +
4 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/drivers/net/ethernet/intel/ice/ice_eswitch_br.c b/drivers/net/ethernet/intel/ice/ice_eswitch_br.c
index ac5beecd028b..f5aceb32bf4d 100644
--- a/drivers/net/ethernet/intel/ice/ice_eswitch_br.c
+++ b/drivers/net/ethernet/intel/ice/ice_eswitch_br.c
@@ -896,7 +896,8 @@ ice_eswitch_br_port_deinit(struct ice_esw_br *bridge,
if (br_port->type == ICE_ESWITCH_BR_UPLINK_PORT && vsi->back) {
vsi->back->br_port = NULL;
} else {
- struct ice_repr *repr = ice_repr_get_by_vsi(vsi);
+ struct ice_repr *repr =
+ ice_repr_get(vsi->back, br_port->repr_id);
if (repr)
repr->br_port = NULL;
@@ -937,6 +938,7 @@ ice_eswitch_br_vf_repr_port_init(struct ice_esw_br *bridge,
br_port->vsi = repr->src_vsi;
br_port->vsi_idx = br_port->vsi->idx;
br_port->type = ICE_ESWITCH_BR_VF_REPR_PORT;
+ br_port->repr_id = repr->id;
repr->br_port = br_port;
err = xa_insert(&bridge->ports, br_port->vsi_idx, br_port, GFP_KERNEL);
diff --git a/drivers/net/ethernet/intel/ice/ice_eswitch_br.h b/drivers/net/ethernet/intel/ice/ice_eswitch_br.h
index 85a8fadb2928..c15c7344d7f8 100644
--- a/drivers/net/ethernet/intel/ice/ice_eswitch_br.h
+++ b/drivers/net/ethernet/intel/ice/ice_eswitch_br.h
@@ -46,6 +46,7 @@ struct ice_esw_br_port {
enum ice_esw_br_port_type type;
u16 vsi_idx;
u16 pvid;
+ u32 repr_id;
struct xarray vlans;
};
diff --git a/drivers/net/ethernet/intel/ice/ice_repr.c b/drivers/net/ethernet/intel/ice/ice_repr.c
index d367f4c66dcd..fe83f305cc7d 100644
--- a/drivers/net/ethernet/intel/ice/ice_repr.c
+++ b/drivers/net/ethernet/intel/ice/ice_repr.c
@@ -415,12 +415,9 @@ struct ice_repr *ice_repr_add_vf(struct ice_vf *vf)
return ERR_PTR(err);
}
-struct ice_repr *ice_repr_get_by_vsi(struct ice_vsi *vsi)
+struct ice_repr *ice_repr_get(struct ice_pf *pf, u32 id)
{
- if (!vsi->vf)
- return NULL;
-
- return xa_load(&vsi->back->eswitch.reprs, vsi->vf->repr_id);
+ return xa_load(&pf->eswitch.reprs, id);
}
/**
diff --git a/drivers/net/ethernet/intel/ice/ice_repr.h b/drivers/net/ethernet/intel/ice/ice_repr.h
index cff730b15ca0..07842620d7a2 100644
--- a/drivers/net/ethernet/intel/ice/ice_repr.h
+++ b/drivers/net/ethernet/intel/ice/ice_repr.h
@@ -40,4 +40,5 @@ struct ice_repr *ice_repr_get_by_vsi(struct ice_vsi *vsi);
void ice_repr_inc_tx_stats(struct ice_repr *repr, unsigned int len,
int xmit_status);
void ice_repr_inc_rx_stats(struct net_device *netdev, unsigned int len);
+struct ice_repr *ice_repr_get(struct ice_pf *pf, u32 id);
#endif
--
2.44.0.53.g0f9d4d28b7e6
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v2 3/7] ice: move devlink locking outside the port creation
2024-06-05 20:40 [PATCH v2 0/7] Intel Wired LAN Driver Updates 2024-06-03 Jacob Keller
2024-06-05 20:40 ` [PATCH v2 1/7] net: intel: Use *-y instead of *-objs in Makefile Jacob Keller
2024-06-05 20:40 ` [PATCH v2 2/7] ice: store representor ID in bridge port Jacob Keller
@ 2024-06-05 20:40 ` Jacob Keller
2024-06-07 0:56 ` Jakub Kicinski
2024-06-05 20:40 ` [PATCH v2 4/7] ice: move VSI configuration outside repr setup Jacob Keller
` (3 subsequent siblings)
6 siblings, 1 reply; 14+ messages in thread
From: Jacob Keller @ 2024-06-05 20:40 UTC (permalink / raw)
To: netdev, David Miller, Jakub Kicinski
Cc: Jacob Keller, Michal Swiatkowski, Sujai Buvaneswaran, Jiri Pirko
From: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
In case of subfunction lock will be taken for whole port creation. Do
the same in VF case.
Signed-off-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
Tested-by: Sujai Buvaneswaran <sujai.buvaneswaran@intel.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
---
drivers/net/ethernet/intel/ice/devlink/devlink.c | 2 --
drivers/net/ethernet/intel/ice/devlink/devlink_port.c | 4 ++--
drivers/net/ethernet/intel/ice/ice_eswitch.c | 9 +++++++--
drivers/net/ethernet/intel/ice/ice_repr.c | 2 --
4 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/drivers/net/ethernet/intel/ice/devlink/devlink.c b/drivers/net/ethernet/intel/ice/devlink/devlink.c
index 704e9ad5144e..f774781ab514 100644
--- a/drivers/net/ethernet/intel/ice/devlink/devlink.c
+++ b/drivers/net/ethernet/intel/ice/devlink/devlink.c
@@ -794,10 +794,8 @@ int ice_devlink_rate_init_tx_topology(struct devlink *devlink, struct ice_vsi *v
tc_node = pi->root->children[0];
mutex_lock(&pi->sched_lock);
- devl_lock(devlink);
for (i = 0; i < tc_node->num_children; i++)
ice_traverse_tx_tree(devlink, tc_node->children[i], tc_node, pf);
- devl_unlock(devlink);
mutex_unlock(&pi->sched_lock);
return 0;
diff --git a/drivers/net/ethernet/intel/ice/devlink/devlink_port.c b/drivers/net/ethernet/intel/ice/devlink/devlink_port.c
index 13e6790d3cae..c9fbeebf7fb9 100644
--- a/drivers/net/ethernet/intel/ice/devlink/devlink_port.c
+++ b/drivers/net/ethernet/intel/ice/devlink/devlink_port.c
@@ -407,7 +407,7 @@ int ice_devlink_create_vf_port(struct ice_vf *vf)
devlink_port_attrs_set(devlink_port, &attrs);
devlink = priv_to_devlink(pf);
- err = devlink_port_register(devlink, devlink_port, vsi->idx);
+ err = devl_port_register(devlink, devlink_port, vsi->idx);
if (err) {
dev_err(dev, "Failed to create devlink port for VF %d, error %d\n",
vf->vf_id, err);
@@ -426,5 +426,5 @@ int ice_devlink_create_vf_port(struct ice_vf *vf)
void ice_devlink_destroy_vf_port(struct ice_vf *vf)
{
devl_rate_leaf_destroy(&vf->devlink_port);
- devlink_port_unregister(&vf->devlink_port);
+ devl_port_unregister(&vf->devlink_port);
}
diff --git a/drivers/net/ethernet/intel/ice/ice_eswitch.c b/drivers/net/ethernet/intel/ice/ice_eswitch.c
index b102db8b829a..7b57a6561a5a 100644
--- a/drivers/net/ethernet/intel/ice/ice_eswitch.c
+++ b/drivers/net/ethernet/intel/ice/ice_eswitch.c
@@ -423,6 +423,7 @@ static void ice_eswitch_start_reprs(struct ice_pf *pf)
int
ice_eswitch_attach(struct ice_pf *pf, struct ice_vf *vf)
{
+ struct devlink *devlink = priv_to_devlink(pf);
struct ice_repr *repr;
int err;
@@ -437,7 +438,9 @@ ice_eswitch_attach(struct ice_pf *pf, struct ice_vf *vf)
ice_eswitch_stop_reprs(pf);
+ devl_lock(devlink);
repr = ice_repr_add_vf(vf);
+ devl_unlock(devlink);
if (IS_ERR(repr)) {
err = PTR_ERR(repr);
goto err_create_repr;
@@ -460,7 +463,9 @@ ice_eswitch_attach(struct ice_pf *pf, struct ice_vf *vf)
err_xa_alloc:
ice_eswitch_release_repr(pf, repr);
err_setup_repr:
+ devl_lock(devlink);
ice_repr_rem_vf(repr);
+ devl_unlock(devlink);
err_create_repr:
if (xa_empty(&pf->eswitch.reprs))
ice_eswitch_disable_switchdev(pf);
@@ -484,6 +489,7 @@ void ice_eswitch_detach(struct ice_pf *pf, struct ice_vf *vf)
ice_eswitch_disable_switchdev(pf);
ice_eswitch_release_repr(pf, repr);
+ devl_lock(devlink);
ice_repr_rem_vf(repr);
if (xa_empty(&pf->eswitch.reprs)) {
@@ -491,12 +497,11 @@ void ice_eswitch_detach(struct ice_pf *pf, struct ice_vf *vf)
* no point in keeping the nodes
*/
ice_devlink_rate_clear_tx_topology(ice_get_main_vsi(pf));
- devl_lock(devlink);
devl_rate_nodes_destroy(devlink);
- devl_unlock(devlink);
} else {
ice_eswitch_start_reprs(pf);
}
+ devl_unlock(devlink);
}
/**
diff --git a/drivers/net/ethernet/intel/ice/ice_repr.c b/drivers/net/ethernet/intel/ice/ice_repr.c
index fe83f305cc7d..35a6ac8c0466 100644
--- a/drivers/net/ethernet/intel/ice/ice_repr.c
+++ b/drivers/net/ethernet/intel/ice/ice_repr.c
@@ -285,9 +285,7 @@ ice_repr_reg_netdev(struct net_device *netdev)
static void ice_repr_remove_node(struct devlink_port *devlink_port)
{
- devl_lock(devlink_port->devlink);
devl_rate_leaf_destroy(devlink_port);
- devl_unlock(devlink_port->devlink);
}
/**
--
2.44.0.53.g0f9d4d28b7e6
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v2 4/7] ice: move VSI configuration outside repr setup
2024-06-05 20:40 [PATCH v2 0/7] Intel Wired LAN Driver Updates 2024-06-03 Jacob Keller
` (2 preceding siblings ...)
2024-06-05 20:40 ` [PATCH v2 3/7] ice: move devlink locking outside the port creation Jacob Keller
@ 2024-06-05 20:40 ` Jacob Keller
2024-06-05 20:40 ` [PATCH v2 5/7] ice: update representor when VSI is ready Jacob Keller
` (2 subsequent siblings)
6 siblings, 0 replies; 14+ messages in thread
From: Jacob Keller @ 2024-06-05 20:40 UTC (permalink / raw)
To: netdev, David Miller, Jakub Kicinski
Cc: Jacob Keller, Michal Swiatkowski, Sujai Buvaneswaran, Jiri Pirko
From: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
It is needed because subfunction port representor shouldn't configure
the source VSI during representor creation.
Move the code to separate function and call it only in case the VF port
representor is being created.
Signed-off-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
Tested-by: Sujai Buvaneswaran <sujai.buvaneswaran@intel.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
---
drivers/net/ethernet/intel/ice/ice_eswitch.c | 55 ++++++++++++++++++++--------
drivers/net/ethernet/intel/ice/ice_eswitch.h | 10 +++++
drivers/net/ethernet/intel/ice/ice_repr.c | 7 ++++
3 files changed, 57 insertions(+), 15 deletions(-)
diff --git a/drivers/net/ethernet/intel/ice/ice_eswitch.c b/drivers/net/ethernet/intel/ice/ice_eswitch.c
index 7b57a6561a5a..3f73f46111fc 100644
--- a/drivers/net/ethernet/intel/ice/ice_eswitch.c
+++ b/drivers/net/ethernet/intel/ice/ice_eswitch.c
@@ -117,17 +117,10 @@ static int ice_eswitch_setup_repr(struct ice_pf *pf, struct ice_repr *repr)
struct ice_vsi *vsi = repr->src_vsi;
struct metadata_dst *dst;
- ice_remove_vsi_fltr(&pf->hw, vsi->idx);
repr->dst = metadata_dst_alloc(0, METADATA_HW_PORT_MUX,
GFP_KERNEL);
if (!repr->dst)
- goto err_add_mac_fltr;
-
- if (ice_vsi_update_security(vsi, ice_vsi_ctx_clear_antispoof))
- goto err_dst_free;
-
- if (ice_vsi_add_vlan_zero(vsi))
- goto err_update_security;
+ return -ENOMEM;
netif_keep_dst(uplink_vsi->netdev);
@@ -136,16 +129,48 @@ static int ice_eswitch_setup_repr(struct ice_pf *pf, struct ice_repr *repr)
dst->u.port_info.lower_dev = uplink_vsi->netdev;
return 0;
+}
-err_update_security:
+/**
+ * ice_eswitch_cfg_vsi - configure VSI to work in slow-path
+ * @vsi: VSI structure of representee
+ * @mac: representee MAC
+ *
+ * Return: 0 on success, non-zero on error.
+ */
+int ice_eswitch_cfg_vsi(struct ice_vsi *vsi, const u8 *mac)
+{
+ int err;
+
+ ice_remove_vsi_fltr(&vsi->back->hw, vsi->idx);
+
+ err = ice_vsi_update_security(vsi, ice_vsi_ctx_clear_antispoof);
+ if (err)
+ goto err_update_security;
+
+ err = ice_vsi_add_vlan_zero(vsi);
+ if (err)
+ goto err_vlan_zero;
+
+ return 0;
+
+err_vlan_zero:
ice_vsi_update_security(vsi, ice_vsi_ctx_set_antispoof);
-err_dst_free:
- metadata_dst_free(repr->dst);
- repr->dst = NULL;
-err_add_mac_fltr:
- ice_fltr_add_mac_and_broadcast(vsi, repr->parent_mac, ICE_FWD_TO_VSI);
+err_update_security:
+ ice_fltr_add_mac_and_broadcast(vsi, mac, ICE_FWD_TO_VSI);
- return -ENODEV;
+ return err;
+}
+
+/**
+ * ice_eswitch_decfg_vsi - unroll changes done to VSI for switchdev
+ * @vsi: VSI structure of representee
+ * @mac: representee MAC
+ */
+void ice_eswitch_decfg_vsi(struct ice_vsi *vsi, const u8 *mac)
+{
+ ice_vsi_update_security(vsi, ice_vsi_ctx_set_antispoof);
+ ice_fltr_add_mac_and_broadcast(vsi, mac, ICE_FWD_TO_VSI);
}
/**
diff --git a/drivers/net/ethernet/intel/ice/ice_eswitch.h b/drivers/net/ethernet/intel/ice/ice_eswitch.h
index e2e5c0c75e7d..9a25606e9740 100644
--- a/drivers/net/ethernet/intel/ice/ice_eswitch.h
+++ b/drivers/net/ethernet/intel/ice/ice_eswitch.h
@@ -28,6 +28,9 @@ netdev_tx_t
ice_eswitch_port_start_xmit(struct sk_buff *skb, struct net_device *netdev);
struct net_device *ice_eswitch_get_target(struct ice_rx_ring *rx_ring,
union ice_32b_rx_flex_desc *rx_desc);
+
+int ice_eswitch_cfg_vsi(struct ice_vsi *vsi, const u8 *mac);
+void ice_eswitch_decfg_vsi(struct ice_vsi *vsi, const u8 *mac);
#else /* CONFIG_ICE_SWITCHDEV */
static inline void ice_eswitch_detach(struct ice_pf *pf, struct ice_vf *vf) { }
@@ -85,5 +88,12 @@ ice_eswitch_get_target(struct ice_rx_ring *rx_ring,
{
return rx_ring->netdev;
}
+
+static inline int ice_eswitch_cfg_vsi(struct ice_vsi *vsi, const u8 *mac)
+{
+ return -EOPNOTSUPP;
+}
+
+static inline void ice_eswitch_decfg_vsi(struct ice_vsi *vsi, const u8 *mac) { }
#endif /* CONFIG_ICE_SWITCHDEV */
#endif /* _ICE_ESWITCH_H_ */
diff --git a/drivers/net/ethernet/intel/ice/ice_repr.c b/drivers/net/ethernet/intel/ice/ice_repr.c
index 35a6ac8c0466..bdda3401e343 100644
--- a/drivers/net/ethernet/intel/ice/ice_repr.c
+++ b/drivers/net/ethernet/intel/ice/ice_repr.c
@@ -306,6 +306,7 @@ static void ice_repr_rem(struct ice_repr *repr)
void ice_repr_rem_vf(struct ice_repr *repr)
{
ice_repr_remove_node(&repr->vf->devlink_port);
+ ice_eswitch_decfg_vsi(repr->src_vsi, repr->parent_mac);
unregister_netdev(repr->netdev);
ice_devlink_destroy_vf_port(repr->vf);
ice_virtchnl_set_dflt_ops(repr->vf);
@@ -401,11 +402,17 @@ struct ice_repr *ice_repr_add_vf(struct ice_vf *vf)
if (err)
goto err_netdev;
+ err = ice_eswitch_cfg_vsi(repr->src_vsi, repr->parent_mac);
+ if (err)
+ goto err_cfg_vsi;
+
ice_virtchnl_set_repr_ops(vf);
ice_repr_set_tx_topology(vf->pf);
return repr;
+err_cfg_vsi:
+ unregister_netdev(repr->netdev);
err_netdev:
ice_repr_rem(repr);
err_repr_add:
--
2.44.0.53.g0f9d4d28b7e6
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v2 5/7] ice: update representor when VSI is ready
2024-06-05 20:40 [PATCH v2 0/7] Intel Wired LAN Driver Updates 2024-06-03 Jacob Keller
` (3 preceding siblings ...)
2024-06-05 20:40 ` [PATCH v2 4/7] ice: move VSI configuration outside repr setup Jacob Keller
@ 2024-06-05 20:40 ` Jacob Keller
2024-06-05 20:40 ` [PATCH v2 6/7] ice: add and use roundup_u64 instead of open coding equivalent Jacob Keller
2024-06-05 20:40 ` [PATCH v2 7/7] ice: use irq_update_affinity_hint() Jacob Keller
6 siblings, 0 replies; 14+ messages in thread
From: Jacob Keller @ 2024-06-05 20:40 UTC (permalink / raw)
To: netdev, David Miller, Jakub Kicinski
Cc: Jacob Keller, Michal Swiatkowski, Sujai Buvaneswaran, Jiri Pirko
From: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
In case of reset of VF VSI can be reallocated. To handle this case it
should be properly updated.
Reload representor as vsi->vsi_num can be different than the one stored
when representor was created.
Instead of only changing antispoof do whole VSI configuration for
eswitch.
Signed-off-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
Tested-by: Sujai Buvaneswaran <sujai.buvaneswaran@intel.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
---
drivers/net/ethernet/intel/ice/ice_eswitch.c | 21 ++++++++++++++-------
drivers/net/ethernet/intel/ice/ice_eswitch.h | 4 ++--
drivers/net/ethernet/intel/ice/ice_vf_lib.c | 2 +-
3 files changed, 17 insertions(+), 10 deletions(-)
diff --git a/drivers/net/ethernet/intel/ice/ice_eswitch.c b/drivers/net/ethernet/intel/ice/ice_eswitch.c
index 3f73f46111fc..4f539b1c7781 100644
--- a/drivers/net/ethernet/intel/ice/ice_eswitch.c
+++ b/drivers/net/ethernet/intel/ice/ice_eswitch.c
@@ -178,16 +178,16 @@ void ice_eswitch_decfg_vsi(struct ice_vsi *vsi, const u8 *mac)
* @repr_id: representor ID
* @vsi: VSI for which port representor is configured
*/
-void ice_eswitch_update_repr(unsigned long repr_id, struct ice_vsi *vsi)
+void ice_eswitch_update_repr(unsigned long *repr_id, struct ice_vsi *vsi)
{
struct ice_pf *pf = vsi->back;
struct ice_repr *repr;
- int ret;
+ int err;
if (!ice_is_switchdev_running(pf))
return;
- repr = xa_load(&pf->eswitch.reprs, repr_id);
+ repr = xa_load(&pf->eswitch.reprs, *repr_id);
if (!repr)
return;
@@ -197,12 +197,19 @@ void ice_eswitch_update_repr(unsigned long repr_id, struct ice_vsi *vsi)
if (repr->br_port)
repr->br_port->vsi = vsi;
- ret = ice_vsi_update_security(vsi, ice_vsi_ctx_clear_antispoof);
- if (ret) {
- ice_fltr_add_mac_and_broadcast(vsi, repr->parent_mac,
- ICE_FWD_TO_VSI);
+ err = ice_eswitch_cfg_vsi(vsi, repr->parent_mac);
+ if (err)
dev_err(ice_pf_to_dev(pf), "Failed to update VSI of port representor %d",
repr->id);
+
+ /* The VSI number is different, reload the PR with new id */
+ if (repr->id != vsi->vsi_num) {
+ xa_erase(&pf->eswitch.reprs, repr->id);
+ repr->id = vsi->vsi_num;
+ if (xa_insert(&pf->eswitch.reprs, repr->id, repr, GFP_KERNEL))
+ dev_err(ice_pf_to_dev(pf), "Failed to reload port representor %d",
+ repr->id);
+ *repr_id = repr->id;
}
}
diff --git a/drivers/net/ethernet/intel/ice/ice_eswitch.h b/drivers/net/ethernet/intel/ice/ice_eswitch.h
index 9a25606e9740..09194d514f9b 100644
--- a/drivers/net/ethernet/intel/ice/ice_eswitch.h
+++ b/drivers/net/ethernet/intel/ice/ice_eswitch.h
@@ -18,7 +18,7 @@ ice_eswitch_mode_set(struct devlink *devlink, u16 mode,
struct netlink_ext_ack *extack);
bool ice_is_eswitch_mode_switchdev(struct ice_pf *pf);
-void ice_eswitch_update_repr(unsigned long repr_id, struct ice_vsi *vsi);
+void ice_eswitch_update_repr(unsigned long *repr_id, struct ice_vsi *vsi);
void ice_eswitch_stop_all_tx_queues(struct ice_pf *pf);
@@ -47,7 +47,7 @@ ice_eswitch_set_target_vsi(struct sk_buff *skb,
struct ice_tx_offload_params *off) { }
static inline void
-ice_eswitch_update_repr(unsigned long repr_id, struct ice_vsi *vsi) { }
+ice_eswitch_update_repr(unsigned long *repr_id, struct ice_vsi *vsi) { }
static inline int ice_eswitch_configure(struct ice_pf *pf)
{
diff --git a/drivers/net/ethernet/intel/ice/ice_vf_lib.c b/drivers/net/ethernet/intel/ice/ice_vf_lib.c
index 48a8d462d76a..5635e9da2212 100644
--- a/drivers/net/ethernet/intel/ice/ice_vf_lib.c
+++ b/drivers/net/ethernet/intel/ice/ice_vf_lib.c
@@ -948,7 +948,7 @@ int ice_reset_vf(struct ice_vf *vf, u32 flags)
goto out_unlock;
}
- ice_eswitch_update_repr(vf->repr_id, vsi);
+ ice_eswitch_update_repr(&vf->repr_id, vsi);
/* if the VF has been reset allow it to come up again */
ice_mbx_clear_malvf(&vf->mbx_info);
--
2.44.0.53.g0f9d4d28b7e6
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v2 6/7] ice: add and use roundup_u64 instead of open coding equivalent
2024-06-05 20:40 [PATCH v2 0/7] Intel Wired LAN Driver Updates 2024-06-03 Jacob Keller
` (4 preceding siblings ...)
2024-06-05 20:40 ` [PATCH v2 5/7] ice: update representor when VSI is ready Jacob Keller
@ 2024-06-05 20:40 ` Jacob Keller
2024-06-05 20:40 ` [PATCH v2 7/7] ice: use irq_update_affinity_hint() Jacob Keller
6 siblings, 0 replies; 14+ messages in thread
From: Jacob Keller @ 2024-06-05 20:40 UTC (permalink / raw)
To: netdev, David Miller, Jakub Kicinski; +Cc: Jacob Keller, Pucha Himasekhar Reddy
In ice_ptp_cfg_clkout(), the ice driver needs to calculate the nearest next
second of a current time value specified in nanoseconds. It implements this
using div64_u64, because the time value is a u64. It could use div_u64
since NSEC_PER_SEC is smaller than 32-bits.
Ideally this would be implemented directly with roundup(), but that can't
work on all platforms due to a division which requires using the specific
macros and functions due to platform restrictions, and to ensure that the
most appropriate and fast instructions are used.
The kernel doesn't currently provide any 64-bit equivalents for doing
roundup. Attempting to use roundup() on a 32-bit platform will result in a
link failure due to not having a direct 64-bit division.
The closest equivalent for this is DIV64_U64_ROUND_UP, which does a
division always rounding up. However, this only computes the division, and
forces use of the div64_u64 in cases where the divisor is a 32bit value and
could make use of div_u64.
Introduce DIV_U64_ROUND_UP based on div_u64, and then use it to implement
roundup_u64 which takes a u64 input value and a u32 rounding value.
The name roundup_u64 matches the naming scheme of div_u64, and future
patches could implement roundup64_u64 if they need to round by a multiple
that is greater than 32-bits.
Replace the logic in ice_ptp.c which does this equivalent with the newly
added roundup_u64.
Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com>
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
---
drivers/net/ethernet/intel/ice/ice_ptp.c | 3 +--
include/linux/math64.h | 28 ++++++++++++++++++++++++++++
2 files changed, 29 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/intel/ice/ice_ptp.c b/drivers/net/ethernet/intel/ice/ice_ptp.c
index adbb9cffe20c..b7ab6fdf710d 100644
--- a/drivers/net/ethernet/intel/ice/ice_ptp.c
+++ b/drivers/net/ethernet/intel/ice/ice_ptp.c
@@ -1773,8 +1773,7 @@ static int ice_ptp_cfg_clkout(struct ice_pf *pf, unsigned int chan,
* maintaining phase
*/
if (start_time < current_time)
- start_time = div64_u64(current_time + NSEC_PER_SEC - 1,
- NSEC_PER_SEC) * NSEC_PER_SEC + phase;
+ start_time = roundup_u64(current_time, NSEC_PER_SEC) + phase;
if (ice_is_e810(hw))
start_time -= E810_OUT_PROP_DELAY_NS;
diff --git a/include/linux/math64.h b/include/linux/math64.h
index d34def7f9a8c..6aaccc1626ab 100644
--- a/include/linux/math64.h
+++ b/include/linux/math64.h
@@ -297,6 +297,19 @@ u64 mul_u64_u64_div_u64(u64 a, u64 mul, u64 div);
#define DIV64_U64_ROUND_UP(ll, d) \
({ u64 _tmp = (d); div64_u64((ll) + _tmp - 1, _tmp); })
+/**
+ * DIV_U64_ROUND_UP - unsigned 64bit divide with 32bit divisor rounded up
+ * @ll: unsigned 64bit dividend
+ * @d: unsigned 32bit divisor
+ *
+ * Divide unsigned 64bit dividend by unsigned 32bit divisor
+ * and round up.
+ *
+ * Return: dividend / divisor rounded up
+ */
+#define DIV_U64_ROUND_UP(ll, d) \
+ ({ u32 _tmp = (d); div_u64((ll) + _tmp - 1, _tmp); })
+
/**
* DIV64_U64_ROUND_CLOSEST - unsigned 64bit divide with 64bit divisor rounded to nearest integer
* @dividend: unsigned 64bit dividend
@@ -342,4 +355,19 @@ u64 mul_u64_u64_div_u64(u64 a, u64 mul, u64 div);
div_s64((__x - (__d / 2)), __d); \
} \
)
+
+/**
+ * roundup_u64 - Round up a 64bit value to the next specified 32bit multiple
+ * @x: the value to up
+ * @y: 32bit multiple to round up to
+ *
+ * Rounds @x to the next multiple of @y. For 32bit @x values, see roundup and
+ * the faster round_up() for powers of 2.
+ *
+ * Return: rounded up value.
+ */
+static inline u64 roundup_u64(u64 x, u32 y)
+{
+ return DIV_U64_ROUND_UP(x, y) * y;
+}
#endif /* _LINUX_MATH64_H */
--
2.44.0.53.g0f9d4d28b7e6
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v2 7/7] ice: use irq_update_affinity_hint()
2024-06-05 20:40 [PATCH v2 0/7] Intel Wired LAN Driver Updates 2024-06-03 Jacob Keller
` (5 preceding siblings ...)
2024-06-05 20:40 ` [PATCH v2 6/7] ice: add and use roundup_u64 instead of open coding equivalent Jacob Keller
@ 2024-06-05 20:40 ` Jacob Keller
6 siblings, 0 replies; 14+ messages in thread
From: Jacob Keller @ 2024-06-05 20:40 UTC (permalink / raw)
To: netdev, David Miller, Jakub Kicinski
Cc: Jacob Keller, Michal Schmidt, Sunil Goutham,
Pucha Himasekhar Reddy
From: Michal Schmidt <mschmidt@redhat.com>
irq_set_affinity_hint() is deprecated. Use irq_update_affinity_hint()
instead. This removes the side-effect of actually applying the affinity.
The driver does not really need to worry about spreading its IRQs across
CPUs. The core code already takes care of that.
On the contrary, when the driver applies affinities by itself, it breaks
the users' expectations:
1. The user configures irqbalance with IRQBALANCE_BANNED_CPULIST in
order to prevent IRQs from being moved to certain CPUs that run a
real-time workload.
2. ice reconfigures VSIs at runtime due to a MIB change
(ice_dcb_process_lldp_set_mib_change). Reopening a VSI resets the
affinity in ice_vsi_req_irq_msix().
3. ice has no idea about irqbalance's config, so it may move an IRQ to
a banned CPU. The real-time workload suffers unacceptable latency.
I am not sure if updating the affinity hints is at all useful, because
irqbalance ignores them since 2016 ([1]), but at least it's harmless.
This ice change is similar to i40e commit d34c54d1739c ("i40e: Use
irq_update_affinity_hint()").
[1] https://github.com/Irqbalance/irqbalance/commit/dcc411e7bfdd
Signed-off-by: Michal Schmidt <mschmidt@redhat.com>
Reviewed-by: Sunil Goutham <sgoutham@marvell.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com>
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
---
drivers/net/ethernet/intel/ice/ice_lib.c | 4 ++--
drivers/net/ethernet/intel/ice/ice_main.c | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/net/ethernet/intel/ice/ice_lib.c b/drivers/net/ethernet/intel/ice/ice_lib.c
index 5371e91f6bbb..0f8b622db2b5 100644
--- a/drivers/net/ethernet/intel/ice/ice_lib.c
+++ b/drivers/net/ethernet/intel/ice/ice_lib.c
@@ -2587,8 +2587,8 @@ void ice_vsi_free_irq(struct ice_vsi *vsi)
if (!IS_ENABLED(CONFIG_RFS_ACCEL))
irq_set_affinity_notifier(irq_num, NULL);
- /* clear the affinity_mask in the IRQ descriptor */
- irq_set_affinity_hint(irq_num, NULL);
+ /* clear the affinity_hint in the IRQ descriptor */
+ irq_update_affinity_hint(irq_num, NULL);
synchronize_irq(irq_num);
devm_free_irq(ice_pf_to_dev(pf), irq_num, vsi->q_vectors[i]);
}
diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c
index f60c022f7960..a5d369b8fed5 100644
--- a/drivers/net/ethernet/intel/ice/ice_main.c
+++ b/drivers/net/ethernet/intel/ice/ice_main.c
@@ -2607,7 +2607,7 @@ static int ice_vsi_req_irq_msix(struct ice_vsi *vsi, char *basename)
}
/* assign the mask for this irq */
- irq_set_affinity_hint(irq_num, &q_vector->affinity_mask);
+ irq_update_affinity_hint(irq_num, &q_vector->affinity_mask);
}
err = ice_set_cpu_rx_rmap(vsi);
@@ -2625,7 +2625,7 @@ static int ice_vsi_req_irq_msix(struct ice_vsi *vsi, char *basename)
irq_num = vsi->q_vectors[vector]->irq.virq;
if (!IS_ENABLED(CONFIG_RFS_ACCEL))
irq_set_affinity_notifier(irq_num, NULL);
- irq_set_affinity_hint(irq_num, NULL);
+ irq_update_affinity_hint(irq_num, NULL);
devm_free_irq(dev, irq_num, &vsi->q_vectors[vector]);
}
return err;
--
2.44.0.53.g0f9d4d28b7e6
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH v2 2/7] ice: store representor ID in bridge port
2024-06-05 20:40 ` [PATCH v2 2/7] ice: store representor ID in bridge port Jacob Keller
@ 2024-06-07 0:50 ` Jakub Kicinski
2024-06-07 5:13 ` Michal Swiatkowski
0 siblings, 1 reply; 14+ messages in thread
From: Jakub Kicinski @ 2024-06-07 0:50 UTC (permalink / raw)
To: Jacob Keller
Cc: netdev, David Miller, Michal Swiatkowski, Wojciech Drewek,
Sujai Buvaneswaran, Jiri Pirko
On Wed, 05 Jun 2024 13:40:42 -0700 Jacob Keller wrote:
> -struct ice_repr *ice_repr_get_by_vsi(struct ice_vsi *vsi)
You need to delete it from the header, too:
drivers/net/ethernet/intel/ice/ice_repr.h:struct ice_repr *ice_repr_get_by_vsi(struct ice_vsi *vsi);
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v2 3/7] ice: move devlink locking outside the port creation
2024-06-05 20:40 ` [PATCH v2 3/7] ice: move devlink locking outside the port creation Jacob Keller
@ 2024-06-07 0:56 ` Jakub Kicinski
2024-06-07 5:10 ` Michal Swiatkowski
0 siblings, 1 reply; 14+ messages in thread
From: Jakub Kicinski @ 2024-06-07 0:56 UTC (permalink / raw)
To: Jacob Keller
Cc: netdev, David Miller, Michal Swiatkowski, Sujai Buvaneswaran,
Jiri Pirko
On Wed, 05 Jun 2024 13:40:43 -0700 Jacob Keller wrote:
> From: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
>
> In case of subfunction lock will be taken for whole port creation. Do
> the same in VF case.
No interactions with other locks worth mentioning?
> diff --git a/drivers/net/ethernet/intel/ice/devlink/devlink.c b/drivers/net/ethernet/intel/ice/devlink/devlink.c
> index 704e9ad5144e..f774781ab514 100644
> --- a/drivers/net/ethernet/intel/ice/devlink/devlink.c
> +++ b/drivers/net/ethernet/intel/ice/devlink/devlink.c
> @@ -794,10 +794,8 @@ int ice_devlink_rate_init_tx_topology(struct devlink *devlink, struct ice_vsi *v
>
> tc_node = pi->root->children[0];
> mutex_lock(&pi->sched_lock);
> - devl_lock(devlink);
> for (i = 0; i < tc_node->num_children; i++)
> ice_traverse_tx_tree(devlink, tc_node->children[i], tc_node, pf);
> - devl_unlock(devlink);
> mutex_unlock(&pi->sched_lock);
Like this didn't use to cause a deadlock?
Seems ice_devlink_rate_node_del() takes this lock and it's already
holding the devlink instance lock.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v2 3/7] ice: move devlink locking outside the port creation
2024-06-07 0:56 ` Jakub Kicinski
@ 2024-06-07 5:10 ` Michal Swiatkowski
2024-06-07 21:20 ` Jacob Keller
0 siblings, 1 reply; 14+ messages in thread
From: Michal Swiatkowski @ 2024-06-07 5:10 UTC (permalink / raw)
To: Jakub Kicinski
Cc: Jacob Keller, netdev, David Miller, Sujai Buvaneswaran,
Jiri Pirko
On Thu, Jun 06, 2024 at 05:56:34PM -0700, Jakub Kicinski wrote:
> On Wed, 05 Jun 2024 13:40:43 -0700 Jacob Keller wrote:
> > From: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
> >
> > In case of subfunction lock will be taken for whole port creation. Do
> > the same in VF case.
>
> No interactions with other locks worth mentioning?
>
You right, I could have mentioned also removing path. The patch is only
about devlink lock during port representor creation / removing.
> > diff --git a/drivers/net/ethernet/intel/ice/devlink/devlink.c b/drivers/net/ethernet/intel/ice/devlink/devlink.c
> > index 704e9ad5144e..f774781ab514 100644
> > --- a/drivers/net/ethernet/intel/ice/devlink/devlink.c
> > +++ b/drivers/net/ethernet/intel/ice/devlink/devlink.c
> > @@ -794,10 +794,8 @@ int ice_devlink_rate_init_tx_topology(struct devlink *devlink, struct ice_vsi *v
> >
> > tc_node = pi->root->children[0];
> > mutex_lock(&pi->sched_lock);
> > - devl_lock(devlink);
> > for (i = 0; i < tc_node->num_children; i++)
> > ice_traverse_tx_tree(devlink, tc_node->children[i], tc_node, pf);
> > - devl_unlock(devlink);
> > mutex_unlock(&pi->sched_lock);
>
> Like this didn't use to cause a deadlock?
>
> Seems ice_devlink_rate_node_del() takes this lock and it's already
> holding the devlink instance lock.
ice_devlink_rate_init_tx_topology() wasn't (till now) called with
devlink lock, because it is called from port representor creation flow,
not from the devlink.
Thanks,
Michal
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v2 2/7] ice: store representor ID in bridge port
2024-06-07 0:50 ` Jakub Kicinski
@ 2024-06-07 5:13 ` Michal Swiatkowski
0 siblings, 0 replies; 14+ messages in thread
From: Michal Swiatkowski @ 2024-06-07 5:13 UTC (permalink / raw)
To: Jakub Kicinski
Cc: Jacob Keller, netdev, David Miller, Wojciech Drewek,
Sujai Buvaneswaran, Jiri Pirko
On Thu, Jun 06, 2024 at 05:50:24PM -0700, Jakub Kicinski wrote:
> On Wed, 05 Jun 2024 13:40:42 -0700 Jacob Keller wrote:
> > -struct ice_repr *ice_repr_get_by_vsi(struct ice_vsi *vsi)
>
> You need to delete it from the header, too:
>
> drivers/net/ethernet/intel/ice/ice_repr.h:struct ice_repr *ice_repr_get_by_vsi(struct ice_vsi *vsi);
Yeah, my fault, thanks for finding it.
Thanks,
Michal
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v2 3/7] ice: move devlink locking outside the port creation
2024-06-07 5:10 ` Michal Swiatkowski
@ 2024-06-07 21:20 ` Jacob Keller
2024-06-10 7:20 ` Michal Swiatkowski
0 siblings, 1 reply; 14+ messages in thread
From: Jacob Keller @ 2024-06-07 21:20 UTC (permalink / raw)
To: Michal Swiatkowski, Jakub Kicinski
Cc: netdev, David Miller, Sujai Buvaneswaran, Jiri Pirko
On 6/6/2024 10:10 PM, Michal Swiatkowski wrote:
> On Thu, Jun 06, 2024 at 05:56:34PM -0700, Jakub Kicinski wrote:
>> On Wed, 05 Jun 2024 13:40:43 -0700 Jacob Keller wrote:
>>> From: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
>>>
>>> In case of subfunction lock will be taken for whole port creation. Do
>>> the same in VF case.
>>
>> No interactions with other locks worth mentioning?
>>
>
> You right, I could have mentioned also removing path. The patch is only
> about devlink lock during port representor creation / removing.
>
>>> diff --git a/drivers/net/ethernet/intel/ice/devlink/devlink.c b/drivers/net/ethernet/intel/ice/devlink/devlink.c
>>> index 704e9ad5144e..f774781ab514 100644
>>> --- a/drivers/net/ethernet/intel/ice/devlink/devlink.c
>>> +++ b/drivers/net/ethernet/intel/ice/devlink/devlink.c
>>> @@ -794,10 +794,8 @@ int ice_devlink_rate_init_tx_topology(struct devlink *devlink, struct ice_vsi *v
>>>
>>> tc_node = pi->root->children[0];
>>> mutex_lock(&pi->sched_lock);
>>> - devl_lock(devlink);
>>> for (i = 0; i < tc_node->num_children; i++)
>>> ice_traverse_tx_tree(devlink, tc_node->children[i], tc_node, pf);
>>> - devl_unlock(devlink);
>>> mutex_unlock(&pi->sched_lock);
>>
>> Like this didn't use to cause a deadlock?
>>
>> Seems ice_devlink_rate_node_del() takes this lock and it's already
>> holding the devlink instance lock.
>
> ice_devlink_rate_init_tx_topology() wasn't (till now) called with
> devlink lock, because it is called from port representor creation flow,
> not from the devlink.
>
> Thanks,
> Michal
I take it you will make a respin of the 4 subfunction patches in this
series then?
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v2 3/7] ice: move devlink locking outside the port creation
2024-06-07 21:20 ` Jacob Keller
@ 2024-06-10 7:20 ` Michal Swiatkowski
0 siblings, 0 replies; 14+ messages in thread
From: Michal Swiatkowski @ 2024-06-10 7:20 UTC (permalink / raw)
To: Jacob Keller
Cc: Jakub Kicinski, netdev, David Miller, Sujai Buvaneswaran,
Jiri Pirko
On Fri, Jun 07, 2024 at 02:20:01PM -0700, Jacob Keller wrote:
>
>
> On 6/6/2024 10:10 PM, Michal Swiatkowski wrote:
> > On Thu, Jun 06, 2024 at 05:56:34PM -0700, Jakub Kicinski wrote:
> >> On Wed, 05 Jun 2024 13:40:43 -0700 Jacob Keller wrote:
> >>> From: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
> >>>
> >>> In case of subfunction lock will be taken for whole port creation. Do
> >>> the same in VF case.
> >>
> >> No interactions with other locks worth mentioning?
> >>
> >
> > You right, I could have mentioned also removing path. The patch is only
> > about devlink lock during port representor creation / removing.
> >
> >>> diff --git a/drivers/net/ethernet/intel/ice/devlink/devlink.c b/drivers/net/ethernet/intel/ice/devlink/devlink.c
> >>> index 704e9ad5144e..f774781ab514 100644
> >>> --- a/drivers/net/ethernet/intel/ice/devlink/devlink.c
> >>> +++ b/drivers/net/ethernet/intel/ice/devlink/devlink.c
> >>> @@ -794,10 +794,8 @@ int ice_devlink_rate_init_tx_topology(struct devlink *devlink, struct ice_vsi *v
> >>>
> >>> tc_node = pi->root->children[0];
> >>> mutex_lock(&pi->sched_lock);
> >>> - devl_lock(devlink);
> >>> for (i = 0; i < tc_node->num_children; i++)
> >>> ice_traverse_tx_tree(devlink, tc_node->children[i], tc_node, pf);
> >>> - devl_unlock(devlink);
> >>> mutex_unlock(&pi->sched_lock);
> >>
> >> Like this didn't use to cause a deadlock?
> >>
> >> Seems ice_devlink_rate_node_del() takes this lock and it's already
> >> holding the devlink instance lock.
> >
> > ice_devlink_rate_init_tx_topology() wasn't (till now) called with
> > devlink lock, because it is called from port representor creation flow,
> > not from the devlink.
> >
> > Thanks,
> > Michal
>
> I take it you will make a respin of the 4 subfunction patches in this
> series then?
Ok, I will send.
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2024-06-10 7:21 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-05 20:40 [PATCH v2 0/7] Intel Wired LAN Driver Updates 2024-06-03 Jacob Keller
2024-06-05 20:40 ` [PATCH v2 1/7] net: intel: Use *-y instead of *-objs in Makefile Jacob Keller
2024-06-05 20:40 ` [PATCH v2 2/7] ice: store representor ID in bridge port Jacob Keller
2024-06-07 0:50 ` Jakub Kicinski
2024-06-07 5:13 ` Michal Swiatkowski
2024-06-05 20:40 ` [PATCH v2 3/7] ice: move devlink locking outside the port creation Jacob Keller
2024-06-07 0:56 ` Jakub Kicinski
2024-06-07 5:10 ` Michal Swiatkowski
2024-06-07 21:20 ` Jacob Keller
2024-06-10 7:20 ` Michal Swiatkowski
2024-06-05 20:40 ` [PATCH v2 4/7] ice: move VSI configuration outside repr setup Jacob Keller
2024-06-05 20:40 ` [PATCH v2 5/7] ice: update representor when VSI is ready Jacob Keller
2024-06-05 20:40 ` [PATCH v2 6/7] ice: add and use roundup_u64 instead of open coding equivalent Jacob Keller
2024-06-05 20:40 ` [PATCH v2 7/7] ice: use irq_update_affinity_hint() Jacob Keller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).