diff mbox

[net-next] net: relax setup_tc ndo op handle restriction

Message ID 20160229192613.24163.31830.stgit@john-Precision-Tower-5810
State Accepted
Delegated to: Jeff Kirsher
Headers show

Commit Message

John Fastabend Feb. 29, 2016, 7:26 p.m. UTC
I added this check in setup_tc to multiple drivers,

 if (handle != TC_H_ROOT || tc->type != TC_SETUP_MQPRIO)

Unfortunately restricting to TC_H_ROOT like this breaks the old
instantiation of mqprio to setup a hardware qdisc. This patch
relaxes the test to only check the type to make it equivalent
to the check before I broke it. With this the old instantiation
continues to work.

A good smoke test is to setup mqprio with,

# tc qdisc add dev eth4 root mqprio num_tc 8 \
  map 0 1 2 3 4 5 6 7 \
  queues 0@0 1@1 2@2 3@3 4@4 5@5 6@6 7@7

Fixes: e4c6734eaab9 ("net: rework ndo tc op to consume additional qdisc handle paramete")
Reported-by: Singh Krishneil <krishneil.k.singh@intel.com>
Reported-by: Jake Keller <jacob.e.keller@intel.com>
CC: Murali Karicheri <m-karicheri2@ti.com>
CC: Shradha Shah <sshah@solarflare.com>
CC: Or Gerlitz <ogerlitz@mellanox.com>
CC: Ariel Elior <ariel.elior@qlogic.com>
CC: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
CC: Bruce Allan <bruce.w.allan@intel.com>
CC: Jesse Brandeburg <jesse.brandeburg@intel.com>
CC: Don Skidmore <donald.c.skidmore@intel.com>
Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
---
 drivers/net/ethernet/amd/xgbe/xgbe-drv.c        |    2 +-
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c |    2 +-
 drivers/net/ethernet/broadcom/bnxt/bnxt.c       |    2 +-
 drivers/net/ethernet/intel/fm10k/fm10k_netdev.c |    2 +-
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c   |    2 +-
 drivers/net/ethernet/mellanox/mlx4/en_netdev.c  |    2 +-
 drivers/net/ethernet/sfc/tx.c                   |    2 +-
 drivers/net/ethernet/ti/netcp_core.c            |    2 +-
 8 files changed, 8 insertions(+), 8 deletions(-)

Comments

Allan, Bruce W March 2, 2016, 2:09 a.m. UTC | #1
> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces@lists.osuosl.org] On
> Behalf Of John Fastabend
> Sent: Monday, February 29, 2016 11:26 AM
> To: intel-wired-lan@lists.osuosl.org; john.fastabend@gmail.com; Kirsher,
> Jeffrey T
> Cc: netdev@vger.kernel.org
> Subject: [Intel-wired-lan] [net-next PATCH] net: relax setup_tc ndo op
> handle restriction
> 
> I added this check in setup_tc to multiple drivers,
> 
>  if (handle != TC_H_ROOT || tc->type != TC_SETUP_MQPRIO)
> 
> Unfortunately restricting to TC_H_ROOT like this breaks the old
> instantiation of mqprio to setup a hardware qdisc. This patch
> relaxes the test to only check the type to make it equivalent
> to the check before I broke it. With this the old instantiation
> continues to work.
> 
> A good smoke test is to setup mqprio with,
> 
> # tc qdisc add dev eth4 root mqprio num_tc 8 \
>   map 0 1 2 3 4 5 6 7 \
>   queues 0@0 1@1 2@2 3@3 4@4 5@5 6@6 7@7
> 
> Fixes: e4c6734eaab9 ("net: rework ndo tc op to consume additional qdisc
> handle paramete")
> Reported-by: Singh Krishneil <krishneil.k.singh@intel.com>
> Reported-by: Jake Keller <jacob.e.keller@intel.com>
> CC: Murali Karicheri <m-karicheri2@ti.com>
> CC: Shradha Shah <sshah@solarflare.com>
> CC: Or Gerlitz <ogerlitz@mellanox.com>
> CC: Ariel Elior <ariel.elior@qlogic.com>
> CC: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
> CC: Bruce Allan <bruce.w.allan@intel.com>
> CC: Jesse Brandeburg <jesse.brandeburg@intel.com>
> CC: Don Skidmore <donald.c.skidmore@intel.com>
> Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
> ---
>  drivers/net/ethernet/amd/xgbe/xgbe-drv.c        |    2 +-
>  drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c |    2 +-
>  drivers/net/ethernet/broadcom/bnxt/bnxt.c       |    2 +-
>  drivers/net/ethernet/intel/fm10k/fm10k_netdev.c |    2 +-
>  drivers/net/ethernet/intel/ixgbe/ixgbe_main.c   |    2 +-
>  drivers/net/ethernet/mellanox/mlx4/en_netdev.c  |    2 +-
>  drivers/net/ethernet/sfc/tx.c                   |    2 +-
>  drivers/net/ethernet/ti/netcp_core.c            |    2 +-
>  8 files changed, 8 insertions(+), 8 deletions(-)

Jeff, please apply this to your next-queue tree/dev-queue branch ASAP as it is
blocking the testing of another patch already in that queue.

Thanks,
Bruce.
David Miller March 3, 2016, 9:25 p.m. UTC | #2
From: John Fastabend <john.fastabend@gmail.com>
Date: Mon, 29 Feb 2016 11:26:13 -0800

> I added this check in setup_tc to multiple drivers,
> 
>  if (handle != TC_H_ROOT || tc->type != TC_SETUP_MQPRIO)
> 
> Unfortunately restricting to TC_H_ROOT like this breaks the old
> instantiation of mqprio to setup a hardware qdisc. This patch
> relaxes the test to only check the type to make it equivalent
> to the check before I broke it. With this the old instantiation
> continues to work.
> 
> A good smoke test is to setup mqprio with,
> 
> # tc qdisc add dev eth4 root mqprio num_tc 8 \
>   map 0 1 2 3 4 5 6 7 \
>   queues 0@0 1@1 2@2 3@3 4@4 5@5 6@6 7@7
> 
> Fixes: e4c6734eaab9 ("net: rework ndo tc op to consume additional qdisc handle paramete")
> Reported-by: Singh Krishneil <krishneil.k.singh@intel.com>
> Reported-by: Jake Keller <jacob.e.keller@intel.com>
 ...
> Signed-off-by: John Fastabend <john.r.fastabend@intel.com>

Applied, thanks John.
diff mbox

Patch

diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
index 3360684..ebf9224 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
@@ -1632,7 +1632,7 @@  static int xgbe_setup_tc(struct net_device *netdev, u32 handle, __be16 proto,
 	struct xgbe_prv_data *pdata = netdev_priv(netdev);
 	u8 tc;
 
-	if (handle != TC_H_ROOT || tc_to_netdev->type != TC_SETUP_MQPRIO)
+	if (tc_to_netdev->type != TC_SETUP_MQPRIO)
 		return -EINVAL;
 
 	tc = tc_to_netdev->tc;
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
index 45843d1..a949783 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
@@ -4275,7 +4275,7 @@  int bnx2x_setup_tc(struct net_device *dev, u8 num_tc)
 int __bnx2x_setup_tc(struct net_device *dev, u32 handle, __be16 proto,
 		     struct tc_to_netdev *tc)
 {
-	if (handle != TC_H_ROOT || tc->type != TC_SETUP_MQPRIO)
+	if (tc->type != TC_SETUP_MQPRIO)
 		return -EINVAL;
 	return bnx2x_setup_tc(dev, tc->tc);
 }
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index ff1507f..f1a0a73 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -5383,7 +5383,7 @@  static int bnxt_setup_tc(struct net_device *dev, u32 handle, __be16 proto,
 	struct bnxt *bp = netdev_priv(dev);
 	u8 tc;
 
-	if (handle != TC_H_ROOT || ntc->type != TC_SETUP_MQPRIO)
+	if (ntc->type != TC_SETUP_MQPRIO)
 		return -EINVAL;
 
 	tc = ntc->tc;
diff --git a/drivers/net/ethernet/intel/fm10k/fm10k_netdev.c b/drivers/net/ethernet/intel/fm10k/fm10k_netdev.c
index dc1a821..d09a8dd 100644
--- a/drivers/net/ethernet/intel/fm10k/fm10k_netdev.c
+++ b/drivers/net/ethernet/intel/fm10k/fm10k_netdev.c
@@ -1207,7 +1207,7 @@  err_queueing_scheme:
 static int __fm10k_setup_tc(struct net_device *dev, u32 handle, __be16 proto,
 			    struct tc_to_netdev *tc)
 {
-	if (handle != TC_H_ROOT || tc->type != TC_SETUP_MQPRIO)
+	if (tc->type != TC_SETUP_MQPRIO)
 		return -EINVAL;
 
 	return fm10k_setup_tc(dev, tc->tc);
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index cf4b729..02139f3 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -8422,7 +8422,7 @@  int __ixgbe_setup_tc(struct net_device *dev, u32 handle, __be16 proto,
 		}
 	}
 
-	if (handle != TC_H_ROOT || tc->type != TC_SETUP_MQPRIO)
+	if (tc->type != TC_SETUP_MQPRIO)
 		return -EINVAL;
 
 	return ixgbe_setup_tc(dev, tc->tc);
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
index 96d95cb..a2d560a 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c
@@ -72,7 +72,7 @@  int mlx4_en_setup_tc(struct net_device *dev, u8 up)
 static int __mlx4_en_setup_tc(struct net_device *dev, u32 handle, __be16 proto,
 			      struct tc_to_netdev *tc)
 {
-	if (handle != TC_H_ROOT || tc->type != TC_SETUP_MQPRIO)
+	if (tc->type != TC_SETUP_MQPRIO)
 		return -EINVAL;
 
 	return mlx4_en_setup_tc(dev, tc->tc);
diff --git a/drivers/net/ethernet/sfc/tx.c b/drivers/net/ethernet/sfc/tx.c
index 2cdb571..2337789 100644
--- a/drivers/net/ethernet/sfc/tx.c
+++ b/drivers/net/ethernet/sfc/tx.c
@@ -571,7 +571,7 @@  int efx_setup_tc(struct net_device *net_dev, u32 handle, __be16 proto,
 	unsigned tc, num_tc;
 	int rc;
 
-	if (handle != TC_H_ROOT || ntc->type != TC_SETUP_MQPRIO)
+	if (ntc->type != TC_SETUP_MQPRIO)
 		return -EINVAL;
 
 	num_tc = ntc->tc;
diff --git a/drivers/net/ethernet/ti/netcp_core.c b/drivers/net/ethernet/ti/netcp_core.c
index ed0c30f..1d0942c 100644
--- a/drivers/net/ethernet/ti/netcp_core.c
+++ b/drivers/net/ethernet/ti/netcp_core.c
@@ -1860,7 +1860,7 @@  static int netcp_setup_tc(struct net_device *dev, u32 handle, __be16 proto,
 	/* setup tc must be called under rtnl lock */
 	ASSERT_RTNL();
 
-	if (handle != TC_H_ROOT || tc->type != TC_SETUP_MQPRIO)
+	if (tc->type != TC_SETUP_MQPRIO)
 		return -EINVAL;
 
 	/* Sanity-check the number of traffic classes requested */