Message ID | 20230307112103.2733285-1-daniel.machon@microchip.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [net] net: microchip: sparx5: fix deletion of existing DSCP mappings | expand |
On Tue, Mar 07, 2023 at 12:21:03PM +0100, Daniel Machon wrote: > Fix deletion of existing DSCP mappings in the APP table. > > Adding and deleting DSCP entries are replicated per-port, since the > mapping table is global for all ports in the chip. Whenever a mapping > for a DSCP value already exists, the old mapping is deleted first. > However, it is only deleted for the specified port. Fix this by calling > sparx5_dcb_ieee_delapp() instead of dcb_ieee_delapp() as it ought to be. > > Reproduce: > > // Map and remap DSCP value 63 > $ dcb app add dev eth0 dscp-prio 63:1 > $ dcb app add dev eth0 dscp-prio 63:2 > > $ dcb app show dev eth0 dscp-prio > dscp-prio 63:2 > > $ dcb app show dev eth1 dscp-prio > dscp-prio 63:1 63:2 <-- 63:1 should not be there > > Fixes: 8dcf69a64118 ("net: microchip: sparx5: add support for offloading dscp table") > Signed-off-by: Daniel Machon <daniel.machon@microchip.com> Reviewed-by: Simon Horman <simon.horman@corigine.com>
Hello: This patch was applied to netdev/net.git (main) by David S. Miller <davem@davemloft.net>: On Tue, 7 Mar 2023 12:21:03 +0100 you wrote: > Fix deletion of existing DSCP mappings in the APP table. > > Adding and deleting DSCP entries are replicated per-port, since the > mapping table is global for all ports in the chip. Whenever a mapping > for a DSCP value already exists, the old mapping is deleted first. > However, it is only deleted for the specified port. Fix this by calling > sparx5_dcb_ieee_delapp() instead of dcb_ieee_delapp() as it ought to be. > > [...] Here is the summary with links: - [net] net: microchip: sparx5: fix deletion of existing DSCP mappings https://git.kernel.org/netdev/net/c/cdd28833100c You are awesome, thank you!
diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_dcb.c b/drivers/net/ethernet/microchip/sparx5/sparx5_dcb.c index 871a3e62f852..2d763664dcda 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_dcb.c +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_dcb.c @@ -249,6 +249,21 @@ static int sparx5_dcb_ieee_dscp_setdel(struct net_device *dev, return 0; } +static int sparx5_dcb_ieee_delapp(struct net_device *dev, struct dcb_app *app) +{ + int err; + + if (app->selector == IEEE_8021QAZ_APP_SEL_DSCP) + err = sparx5_dcb_ieee_dscp_setdel(dev, app, dcb_ieee_delapp); + else + err = dcb_ieee_delapp(dev, app); + + if (err < 0) + return err; + + return sparx5_dcb_app_update(dev); +} + static int sparx5_dcb_ieee_setapp(struct net_device *dev, struct dcb_app *app) { struct dcb_app app_itr; @@ -264,7 +279,7 @@ static int sparx5_dcb_ieee_setapp(struct net_device *dev, struct dcb_app *app) if (prio) { app_itr = *app; app_itr.priority = prio; - dcb_ieee_delapp(dev, &app_itr); + sparx5_dcb_ieee_delapp(dev, &app_itr); } if (app->selector == IEEE_8021QAZ_APP_SEL_DSCP) @@ -281,21 +296,6 @@ static int sparx5_dcb_ieee_setapp(struct net_device *dev, struct dcb_app *app) return err; } -static int sparx5_dcb_ieee_delapp(struct net_device *dev, struct dcb_app *app) -{ - int err; - - if (app->selector == IEEE_8021QAZ_APP_SEL_DSCP) - err = sparx5_dcb_ieee_dscp_setdel(dev, app, dcb_ieee_delapp); - else - err = dcb_ieee_delapp(dev, app); - - if (err < 0) - return err; - - return sparx5_dcb_app_update(dev); -} - static int sparx5_dcb_setapptrust(struct net_device *dev, u8 *selectors, int nselectors) {
Fix deletion of existing DSCP mappings in the APP table. Adding and deleting DSCP entries are replicated per-port, since the mapping table is global for all ports in the chip. Whenever a mapping for a DSCP value already exists, the old mapping is deleted first. However, it is only deleted for the specified port. Fix this by calling sparx5_dcb_ieee_delapp() instead of dcb_ieee_delapp() as it ought to be. Reproduce: // Map and remap DSCP value 63 $ dcb app add dev eth0 dscp-prio 63:1 $ dcb app add dev eth0 dscp-prio 63:2 $ dcb app show dev eth0 dscp-prio dscp-prio 63:2 $ dcb app show dev eth1 dscp-prio dscp-prio 63:1 63:2 <-- 63:1 should not be there Fixes: 8dcf69a64118 ("net: microchip: sparx5: add support for offloading dscp table") Signed-off-by: Daniel Machon <daniel.machon@microchip.com> --- .../ethernet/microchip/sparx5/sparx5_dcb.c | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-)