net: restore call to netdev_queue_numa_node_write when resetting XPS
authorSabrina Dubroca <sd@queasysnail.net>
Thu, 29 Nov 2018 13:14:48 +0000 (14:14 +0100)
committerDavid S. Miller <davem@davemloft.net>
Thu, 29 Nov 2018 19:06:08 +0000 (11:06 -0800)
Before commit 80d19669ecd3 ("net: Refactor XPS for CPUs and Rx queues"),
netif_reset_xps_queues() did netdev_queue_numa_node_write() for all the
queues being reset. Now, this is only done when the "active" variable in
clean_xps_maps() is false, ie when on all the CPUs, there's no active
XPS mapping left.

Fixes: 80d19669ecd3 ("net: Refactor XPS for CPUs and Rx queues")
Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/dev.c

index ddc551f..32a63f4 100644 (file)
@@ -2187,17 +2187,19 @@ static void clean_xps_maps(struct net_device *dev, const unsigned long *mask,
                active |= remove_xps_queue_cpu(dev, dev_maps, j, offset,
                                               count);
        if (!active) {
-               if (is_rxqs_map) {
+               if (is_rxqs_map)
                        RCU_INIT_POINTER(dev->xps_rxqs_map, NULL);
-               } else {
+               else
                        RCU_INIT_POINTER(dev->xps_cpus_map, NULL);
+               kfree_rcu(dev_maps, rcu);
+       }
 
-                       for (i = offset + (count - 1); count--; i--)
-                               netdev_queue_numa_node_write(
-                                       netdev_get_tx_queue(dev, i),
-                                                       NUMA_NO_NODE);
+       if (!is_rxqs_map) {
+               for (i = offset + (count - 1); count--; i--) {
+                       netdev_queue_numa_node_write(
+                               netdev_get_tx_queue(dev, i),
+                               NUMA_NO_NODE);
                }
-               kfree_rcu(dev_maps, rcu);
        }
 }