* [PATCH net v4 0/2][pull request] Intel Wired LAN Driver Updates 2023-01-27 (ice)
@ 2023-01-27 22:53 Tony Nguyen
2023-01-27 22:53 ` [PATCH net v4 1/2] ice: Prevent set_channel from changing queues while RDMA active Tony Nguyen
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Tony Nguyen @ 2023-01-27 22:53 UTC (permalink / raw)
To: davem, kuba, pabeni, edumazet; +Cc: Tony Nguyen, netdev, leonro
This series contains updates to ice driver only.
Dave prevents modifying channels when RDMA is active as this will break
RDMA traffic.
Michal fixes a broken URL.
---
v4:
- Protect driver with device_lock; send variable down the call chain to
avoid double lock
- Change returned error from -EINVAL to -EBUSY
v3: https://lore.kernel.org/netdev/20230120211231.431147-1-anthony.l.nguyen@intel.com/
- Reduced scope of lock in patch 1 to avoid double lock
- Dropped, previous, patch 2
v2: https://lore.kernel.org/netdev/20230103230738.1102585-1-anthony.l.nguyen@intel.com/
- Dropped, previous, patch 1.
- Replace RDMA patch to disallow change instead of replugging aux device
v1: https://lore.kernel.org/netdev/20221207211040.1099708-1-anthony.l.nguyen@intel.com/
The following are changes since commit 7083df59abbc2b7500db312cac706493be0273ff:
net: mdio-mux-meson-g12a: force internal PHY off on mux switch
and are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue 100GbE
Dave Ertman (1):
ice: Prevent set_channel from changing queues while RDMA active
Michal Wilczynski (1):
ice: Fix broken link in ice NAPI doc
.../device_drivers/ethernet/intel/ice.rst | 2 +-
drivers/net/ethernet/intel/ice/ice.h | 2 +-
drivers/net/ethernet/intel/ice/ice_dcb_lib.c | 23 ++++++++-------
drivers/net/ethernet/intel/ice/ice_dcb_lib.h | 4 +--
drivers/net/ethernet/intel/ice/ice_ethtool.c | 28 ++++++++++++++++---
drivers/net/ethernet/intel/ice/ice_main.c | 5 ++--
6 files changed, 44 insertions(+), 20 deletions(-)
--
2.38.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH net v4 1/2] ice: Prevent set_channel from changing queues while RDMA active
2023-01-27 22:53 [PATCH net v4 0/2][pull request] Intel Wired LAN Driver Updates 2023-01-27 (ice) Tony Nguyen
@ 2023-01-27 22:53 ` Tony Nguyen
2023-01-30 9:12 ` Leon Romanovsky
2023-01-27 22:53 ` [PATCH net v4 2/2] ice: Fix broken link in ice NAPI doc Tony Nguyen
2023-01-31 5:10 ` [PATCH net v4 0/2][pull request] Intel Wired LAN Driver Updates 2023-01-27 (ice) patchwork-bot+netdevbpf
2 siblings, 1 reply; 5+ messages in thread
From: Tony Nguyen @ 2023-01-27 22:53 UTC (permalink / raw)
To: davem, kuba, pabeni, edumazet
Cc: Dave Ertman, netdev, anthony.l.nguyen, leonro, Gurucharan G
From: Dave Ertman <david.m.ertman@intel.com>
The PF controls the set of queues that the RDMA auxiliary_driver requests
resources from. The set_channel command will alter that pool and trigger a
reconfiguration of the VSI, which breaks RDMA functionality.
Prevent set_channel from executing when RDMA driver bound to auxiliary
device.
Adding a locked variable to pass down the call chain to avoid double
locking the device_lock.
Fixes: 348048e724a0 ("ice: Implement iidc operations")
Signed-off-by: Dave Ertman <david.m.ertman@intel.com>
Tested-by: Gurucharan G <gurucharanx.g@intel.com> (A Contingent worker at Intel)
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
drivers/net/ethernet/intel/ice/ice.h | 2 +-
drivers/net/ethernet/intel/ice/ice_dcb_lib.c | 23 +++++++++-------
drivers/net/ethernet/intel/ice/ice_dcb_lib.h | 4 +--
drivers/net/ethernet/intel/ice/ice_ethtool.c | 28 +++++++++++++++++---
drivers/net/ethernet/intel/ice/ice_main.c | 5 ++--
5 files changed, 43 insertions(+), 19 deletions(-)
diff --git a/drivers/net/ethernet/intel/ice/ice.h b/drivers/net/ethernet/intel/ice/ice.h
index 2f0b604abc5e..713069f809ec 100644
--- a/drivers/net/ethernet/intel/ice/ice.h
+++ b/drivers/net/ethernet/intel/ice/ice.h
@@ -880,7 +880,7 @@ void ice_set_ethtool_repr_ops(struct net_device *netdev);
void ice_set_ethtool_safe_mode_ops(struct net_device *netdev);
u16 ice_get_avail_txq_count(struct ice_pf *pf);
u16 ice_get_avail_rxq_count(struct ice_pf *pf);
-int ice_vsi_recfg_qs(struct ice_vsi *vsi, int new_rx, int new_tx);
+int ice_vsi_recfg_qs(struct ice_vsi *vsi, int new_rx, int new_tx, bool locked);
void ice_update_vsi_stats(struct ice_vsi *vsi);
void ice_update_pf_stats(struct ice_pf *pf);
void
diff --git a/drivers/net/ethernet/intel/ice/ice_dcb_lib.c b/drivers/net/ethernet/intel/ice/ice_dcb_lib.c
index 4f24d441c35e..0a55c552189a 100644
--- a/drivers/net/ethernet/intel/ice/ice_dcb_lib.c
+++ b/drivers/net/ethernet/intel/ice/ice_dcb_lib.c
@@ -441,7 +441,7 @@ int ice_pf_dcb_cfg(struct ice_pf *pf, struct ice_dcbx_cfg *new_cfg, bool locked)
goto out;
}
- ice_pf_dcb_recfg(pf);
+ ice_pf_dcb_recfg(pf, false);
out:
/* enable previously downed VSIs */
@@ -731,12 +731,13 @@ static int ice_dcb_noncontig_cfg(struct ice_pf *pf)
/**
* ice_pf_dcb_recfg - Reconfigure all VEBs and VSIs
* @pf: pointer to the PF struct
+ * @locked: is adev device lock held
*
* Assumed caller has already disabled all VSIs before
* calling this function. Reconfiguring DCB based on
* local_dcbx_cfg.
*/
-void ice_pf_dcb_recfg(struct ice_pf *pf)
+void ice_pf_dcb_recfg(struct ice_pf *pf, bool locked)
{
struct ice_dcbx_cfg *dcbcfg = &pf->hw.port_info->qos_cfg.local_dcbx_cfg;
struct iidc_event *event;
@@ -783,14 +784,16 @@ void ice_pf_dcb_recfg(struct ice_pf *pf)
if (vsi->type == ICE_VSI_PF)
ice_dcbnl_set_all(vsi);
}
- /* Notify the AUX drivers that TC change is finished */
- event = kzalloc(sizeof(*event), GFP_KERNEL);
- if (!event)
- return;
+ if (!locked) {
+ /* Notify the AUX drivers that TC change is finished */
+ event = kzalloc(sizeof(*event), GFP_KERNEL);
+ if (!event)
+ return;
- set_bit(IIDC_EVENT_AFTER_TC_CHANGE, event->type);
- ice_send_event_to_aux(pf, event);
- kfree(event);
+ set_bit(IIDC_EVENT_AFTER_TC_CHANGE, event->type);
+ ice_send_event_to_aux(pf, event);
+ kfree(event);
+ }
}
/**
@@ -1044,7 +1047,7 @@ ice_dcb_process_lldp_set_mib_change(struct ice_pf *pf,
}
/* changes in configuration update VSI */
- ice_pf_dcb_recfg(pf);
+ ice_pf_dcb_recfg(pf, false);
/* enable previously downed VSIs */
ice_dcb_ena_dis_vsi(pf, true, true);
diff --git a/drivers/net/ethernet/intel/ice/ice_dcb_lib.h b/drivers/net/ethernet/intel/ice/ice_dcb_lib.h
index 4c421c842a13..800879a88c5e 100644
--- a/drivers/net/ethernet/intel/ice/ice_dcb_lib.h
+++ b/drivers/net/ethernet/intel/ice/ice_dcb_lib.h
@@ -23,7 +23,7 @@ u8 ice_dcb_get_tc(struct ice_vsi *vsi, int queue_index);
int
ice_pf_dcb_cfg(struct ice_pf *pf, struct ice_dcbx_cfg *new_cfg, bool locked);
int ice_dcb_bwchk(struct ice_pf *pf, struct ice_dcbx_cfg *dcbcfg);
-void ice_pf_dcb_recfg(struct ice_pf *pf);
+void ice_pf_dcb_recfg(struct ice_pf *pf, bool locked);
void ice_vsi_cfg_dcb_rings(struct ice_vsi *vsi);
int ice_init_pf_dcb(struct ice_pf *pf, bool locked);
void ice_update_dcb_stats(struct ice_pf *pf);
@@ -128,7 +128,7 @@ static inline u8 ice_get_pfc_mode(struct ice_pf *pf)
return 0;
}
-static inline void ice_pf_dcb_recfg(struct ice_pf *pf) { }
+static inline void ice_pf_dcb_recfg(struct ice_pf *pf, bool locked) { }
static inline void ice_vsi_cfg_dcb_rings(struct ice_vsi *vsi) { }
static inline void ice_update_dcb_stats(struct ice_pf *pf) { }
static inline void
diff --git a/drivers/net/ethernet/intel/ice/ice_ethtool.c b/drivers/net/ethernet/intel/ice/ice_ethtool.c
index 4191994d8f3a..a359f1610fc1 100644
--- a/drivers/net/ethernet/intel/ice/ice_ethtool.c
+++ b/drivers/net/ethernet/intel/ice/ice_ethtool.c
@@ -3641,7 +3641,9 @@ static int ice_set_channels(struct net_device *dev, struct ethtool_channels *ch)
struct ice_vsi *vsi = np->vsi;
struct ice_pf *pf = vsi->back;
int new_rx = 0, new_tx = 0;
+ bool locked = false;
u32 curr_combined;
+ int ret = 0;
/* do not support changing channels in Safe Mode */
if (ice_is_safe_mode(pf)) {
@@ -3705,15 +3707,33 @@ static int ice_set_channels(struct net_device *dev, struct ethtool_channels *ch)
return -EINVAL;
}
- ice_vsi_recfg_qs(vsi, new_rx, new_tx);
+ if (pf->adev) {
+ mutex_lock(&pf->adev_mutex);
+ device_lock(&pf->adev->dev);
+ locked = true;
+ if (pf->adev->dev.driver) {
+ netdev_err(dev, "Cannot change channels when RDMA is active\n");
+ ret = -EBUSY;
+ goto adev_unlock;
+ }
+ }
+
+ ice_vsi_recfg_qs(vsi, new_rx, new_tx, locked);
- if (!netif_is_rxfh_configured(dev))
- return ice_vsi_set_dflt_rss_lut(vsi, new_rx);
+ if (!netif_is_rxfh_configured(dev)) {
+ ret = ice_vsi_set_dflt_rss_lut(vsi, new_rx);
+ goto adev_unlock;
+ }
/* Update rss_size due to change in Rx queues */
vsi->rss_size = ice_get_valid_rss_size(&pf->hw, new_rx);
- return 0;
+adev_unlock:
+ if (locked) {
+ device_unlock(&pf->adev->dev);
+ mutex_unlock(&pf->adev_mutex);
+ }
+ return ret;
}
/**
diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c
index 237ede2cffb0..5f86e4111fa9 100644
--- a/drivers/net/ethernet/intel/ice/ice_main.c
+++ b/drivers/net/ethernet/intel/ice/ice_main.c
@@ -4195,12 +4195,13 @@ bool ice_is_wol_supported(struct ice_hw *hw)
* @vsi: VSI being changed
* @new_rx: new number of Rx queues
* @new_tx: new number of Tx queues
+ * @locked: is adev device_lock held
*
* Only change the number of queues if new_tx, or new_rx is non-0.
*
* Returns 0 on success.
*/
-int ice_vsi_recfg_qs(struct ice_vsi *vsi, int new_rx, int new_tx)
+int ice_vsi_recfg_qs(struct ice_vsi *vsi, int new_rx, int new_tx, bool locked)
{
struct ice_pf *pf = vsi->back;
int err = 0, timeout = 50;
@@ -4229,7 +4230,7 @@ int ice_vsi_recfg_qs(struct ice_vsi *vsi, int new_rx, int new_tx)
ice_vsi_close(vsi);
ice_vsi_rebuild(vsi, false);
- ice_pf_dcb_recfg(pf);
+ ice_pf_dcb_recfg(pf, locked);
ice_vsi_open(vsi);
done:
clear_bit(ICE_CFG_BUSY, pf->state);
--
2.38.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH net v4 2/2] ice: Fix broken link in ice NAPI doc
2023-01-27 22:53 [PATCH net v4 0/2][pull request] Intel Wired LAN Driver Updates 2023-01-27 (ice) Tony Nguyen
2023-01-27 22:53 ` [PATCH net v4 1/2] ice: Prevent set_channel from changing queues while RDMA active Tony Nguyen
@ 2023-01-27 22:53 ` Tony Nguyen
2023-01-31 5:10 ` [PATCH net v4 0/2][pull request] Intel Wired LAN Driver Updates 2023-01-27 (ice) patchwork-bot+netdevbpf
2 siblings, 0 replies; 5+ messages in thread
From: Tony Nguyen @ 2023-01-27 22:53 UTC (permalink / raw)
To: davem, kuba, pabeni, edumazet
Cc: Michal Wilczynski, netdev, anthony.l.nguyen, corbet, linux-doc,
Jesse Brandeburg
From: Michal Wilczynski <michal.wilczynski@intel.com>
Current link for NAPI documentation in ice driver doesn't work - it
returns 404. Update the link to the working one.
Signed-off-by: Michal Wilczynski <michal.wilczynski@intel.com>
Acked-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
Documentation/networking/device_drivers/ethernet/intel/ice.rst | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Documentation/networking/device_drivers/ethernet/intel/ice.rst b/Documentation/networking/device_drivers/ethernet/intel/ice.rst
index dc2e60ced927..b481b81f3be5 100644
--- a/Documentation/networking/device_drivers/ethernet/intel/ice.rst
+++ b/Documentation/networking/device_drivers/ethernet/intel/ice.rst
@@ -819,7 +819,7 @@ NAPI
----
This driver supports NAPI (Rx polling mode).
For more information on NAPI, see
-https://www.linuxfoundation.org/collaborate/workgroups/networking/napi
+https://wiki.linuxfoundation.org/networking/napi
MACVLAN
--
2.38.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH net v4 1/2] ice: Prevent set_channel from changing queues while RDMA active
2023-01-27 22:53 ` [PATCH net v4 1/2] ice: Prevent set_channel from changing queues while RDMA active Tony Nguyen
@ 2023-01-30 9:12 ` Leon Romanovsky
0 siblings, 0 replies; 5+ messages in thread
From: Leon Romanovsky @ 2023-01-30 9:12 UTC (permalink / raw)
To: Tony Nguyen
Cc: davem, kuba, pabeni, edumazet, Dave Ertman, netdev, Gurucharan G
On Fri, Jan 27, 2023 at 02:53:32PM -0800, Tony Nguyen wrote:
> From: Dave Ertman <david.m.ertman@intel.com>
>
> The PF controls the set of queues that the RDMA auxiliary_driver requests
> resources from. The set_channel command will alter that pool and trigger a
> reconfiguration of the VSI, which breaks RDMA functionality.
>
> Prevent set_channel from executing when RDMA driver bound to auxiliary
> device.
>
> Adding a locked variable to pass down the call chain to avoid double
> locking the device_lock.
>
> Fixes: 348048e724a0 ("ice: Implement iidc operations")
> Signed-off-by: Dave Ertman <david.m.ertman@intel.com>
> Tested-by: Gurucharan G <gurucharanx.g@intel.com> (A Contingent worker at Intel)
> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
> ---
> drivers/net/ethernet/intel/ice/ice.h | 2 +-
> drivers/net/ethernet/intel/ice/ice_dcb_lib.c | 23 +++++++++-------
> drivers/net/ethernet/intel/ice/ice_dcb_lib.h | 4 +--
> drivers/net/ethernet/intel/ice/ice_ethtool.c | 28 +++++++++++++++++---
> drivers/net/ethernet/intel/ice/ice_main.c | 5 ++--
> 5 files changed, 43 insertions(+), 19 deletions(-)
Honestly, it looks horrid to see holding two locks and "locked"
parameter just to send an event to AUX driver.
Thanks,
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH net v4 0/2][pull request] Intel Wired LAN Driver Updates 2023-01-27 (ice)
2023-01-27 22:53 [PATCH net v4 0/2][pull request] Intel Wired LAN Driver Updates 2023-01-27 (ice) Tony Nguyen
2023-01-27 22:53 ` [PATCH net v4 1/2] ice: Prevent set_channel from changing queues while RDMA active Tony Nguyen
2023-01-27 22:53 ` [PATCH net v4 2/2] ice: Fix broken link in ice NAPI doc Tony Nguyen
@ 2023-01-31 5:10 ` patchwork-bot+netdevbpf
2 siblings, 0 replies; 5+ messages in thread
From: patchwork-bot+netdevbpf @ 2023-01-31 5:10 UTC (permalink / raw)
To: Tony Nguyen; +Cc: davem, kuba, pabeni, edumazet, netdev, leonro
Hello:
This series was applied to netdev/net.git (master)
by Tony Nguyen <anthony.l.nguyen@intel.com>:
On Fri, 27 Jan 2023 14:53:31 -0800 you wrote:
> This series contains updates to ice driver only.
>
> Dave prevents modifying channels when RDMA is active as this will break
> RDMA traffic.
>
> Michal fixes a broken URL.
>
> [...]
Here is the summary with links:
- [net,v4,1/2] ice: Prevent set_channel from changing queues while RDMA active
https://git.kernel.org/netdev/net/c/a6a0974aae42
- [net,v4,2/2] ice: Fix broken link in ice NAPI doc
https://git.kernel.org/netdev/net/c/53b9b77dcf48
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-01-31 5:10 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-01-27 22:53 [PATCH net v4 0/2][pull request] Intel Wired LAN Driver Updates 2023-01-27 (ice) Tony Nguyen
2023-01-27 22:53 ` [PATCH net v4 1/2] ice: Prevent set_channel from changing queues while RDMA active Tony Nguyen
2023-01-30 9:12 ` Leon Romanovsky
2023-01-27 22:53 ` [PATCH net v4 2/2] ice: Fix broken link in ice NAPI doc Tony Nguyen
2023-01-31 5:10 ` [PATCH net v4 0/2][pull request] Intel Wired LAN Driver Updates 2023-01-27 (ice) patchwork-bot+netdevbpf
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).