net: stmmac: selftests: Update status when disabling RSS
authorJose Abreu <Jose.Abreu@synopsys.com>
Fri, 10 Jan 2020 15:23:52 +0000 (16:23 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 23 Jan 2020 07:22:53 +0000 (08:22 +0100)
commit e715d74504352968cf24ac95476706bc911a69cd upstream.

We are disabling RSS on HW but not updating the internal private status
to the 'disabled' state. This is needed for next tc commit that will
check if RSS is disabled before trying to apply filters.

Fixes: 4647e021193d ("net: stmmac: selftests: Add selftest for L3/L4 Filters")
Signed-off-by: Jose Abreu <Jose.Abreu@synopsys.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c

index b9ee0c0..ba03a2d 100644 (file)
@@ -1297,16 +1297,19 @@ static int __stmmac_test_l3filt(struct stmmac_priv *priv, u32 dst, u32 src,
        struct stmmac_packet_attrs attr = { };
        struct flow_dissector *dissector;
        struct flow_cls_offload *cls;
+       int ret, old_enable = 0;
        struct flow_rule *rule;
-       int ret;
 
        if (!tc_can_offload(priv->dev))
                return -EOPNOTSUPP;
        if (!priv->dma_cap.l3l4fnum)
                return -EOPNOTSUPP;
-       if (priv->rss.enable)
+       if (priv->rss.enable) {
+               old_enable = priv->rss.enable;
+               priv->rss.enable = false;
                stmmac_rss_configure(priv, priv->hw, NULL,
                                     priv->plat->rx_queues_to_use);
+       }
 
        dissector = kzalloc(sizeof(*dissector), GFP_KERNEL);
        if (!dissector) {
@@ -1373,7 +1376,8 @@ cleanup_cls:
 cleanup_dissector:
        kfree(dissector);
 cleanup_rss:
-       if (priv->rss.enable) {
+       if (old_enable) {
+               priv->rss.enable = old_enable;
                stmmac_rss_configure(priv, priv->hw, &priv->rss,
                                     priv->plat->rx_queues_to_use);
        }
@@ -1418,16 +1422,19 @@ static int __stmmac_test_l4filt(struct stmmac_priv *priv, u32 dst, u32 src,
        struct stmmac_packet_attrs attr = { };
        struct flow_dissector *dissector;
        struct flow_cls_offload *cls;
+       int ret, old_enable = 0;
        struct flow_rule *rule;
-       int ret;
 
        if (!tc_can_offload(priv->dev))
                return -EOPNOTSUPP;
        if (!priv->dma_cap.l3l4fnum)
                return -EOPNOTSUPP;
-       if (priv->rss.enable)
+       if (priv->rss.enable) {
+               old_enable = priv->rss.enable;
+               priv->rss.enable = false;
                stmmac_rss_configure(priv, priv->hw, NULL,
                                     priv->plat->rx_queues_to_use);
+       }
 
        dissector = kzalloc(sizeof(*dissector), GFP_KERNEL);
        if (!dissector) {
@@ -1499,7 +1506,8 @@ cleanup_cls:
 cleanup_dissector:
        kfree(dissector);
 cleanup_rss:
-       if (priv->rss.enable) {
+       if (old_enable) {
+               priv->rss.enable = old_enable;
                stmmac_rss_configure(priv, priv->hw, &priv->rss,
                                     priv->plat->rx_queues_to_use);
        }