Skip to content

Commit 43d00e1

Browse files
Marcin Szycikkuba-moo
authored andcommitted
ice: Block switchdev mode when ADQ is active and vice versa
ADQ and switchdev are not supported simultaneously. Enabling both at the same time can result in nullptr dereference. To prevent this, check if ADQ is active when changing devlink mode to switchdev mode, and check if switchdev is active when enabling ADQ. Fixes: fbc7b27 ("ice: enable ndo_setup_tc support for mqprio_qdisc") Signed-off-by: Marcin Szycik <marcin.szycik@linux.intel.com> Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com> Tested-by: Sujai Buvaneswaran <sujai.buvaneswaran@intel.com> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com> Reviewed-by: Simon Horman <horms@kernel.org> Link: https://lore.kernel.org/r/20230816193405.1307580-1-anthony.l.nguyen@intel.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent 2eb9625 commit 43d00e1

File tree

2 files changed

+11
-0
lines changed

2 files changed

+11
-0
lines changed

drivers/net/ethernet/intel/ice/ice_eswitch.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -538,6 +538,12 @@ ice_eswitch_mode_set(struct devlink *devlink, u16 mode,
538538
break;
539539
case DEVLINK_ESWITCH_MODE_SWITCHDEV:
540540
{
541+
if (ice_is_adq_active(pf)) {
542+
dev_err(ice_pf_to_dev(pf), "Couldn't change eswitch mode to switchdev - ADQ is active. Delete ADQ configs and try again, e.g. tc qdisc del dev $PF root");
543+
NL_SET_ERR_MSG_MOD(extack, "Couldn't change eswitch mode to switchdev - ADQ is active. Delete ADQ configs and try again, e.g. tc qdisc del dev $PF root");
544+
return -EOPNOTSUPP;
545+
}
546+
541547
dev_info(ice_pf_to_dev(pf), "PF %d changed eswitch mode to switchdev",
542548
pf->hw.pf_id);
543549
NL_SET_ERR_MSG_MOD(extack, "Changed eswitch mode to switchdev");

drivers/net/ethernet/intel/ice/ice_main.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8823,6 +8823,11 @@ ice_setup_tc(struct net_device *netdev, enum tc_setup_type type,
88238823
ice_setup_tc_block_cb,
88248824
np, np, true);
88258825
case TC_SETUP_QDISC_MQPRIO:
8826+
if (ice_is_eswitch_mode_switchdev(pf)) {
8827+
netdev_err(netdev, "TC MQPRIO offload not supported, switchdev is enabled\n");
8828+
return -EOPNOTSUPP;
8829+
}
8830+
88268831
if (pf->adev) {
88278832
mutex_lock(&pf->adev_mutex);
88288833
device_lock(&pf->adev->dev);

0 commit comments

Comments
 (0)