|
@@ -1887,10 +1887,10 @@ static struct xps_map *remove_xps_queue(struct xps_dev_maps *dev_maps,
|
|
|
return map;
|
|
|
}
|
|
|
|
|
|
-void netif_reset_xps_queue(struct net_device *dev, u16 index)
|
|
|
+static void netif_reset_xps_queues_gt(struct net_device *dev, u16 index)
|
|
|
{
|
|
|
struct xps_dev_maps *dev_maps;
|
|
|
- int cpu;
|
|
|
+ int cpu, i;
|
|
|
bool active = false;
|
|
|
|
|
|
mutex_lock(&xps_map_mutex);
|
|
@@ -1900,7 +1900,11 @@ void netif_reset_xps_queue(struct net_device *dev, u16 index)
|
|
|
goto out_no_maps;
|
|
|
|
|
|
for_each_possible_cpu(cpu) {
|
|
|
- if (remove_xps_queue(dev_maps, cpu, index))
|
|
|
+ for (i = index; i < dev->num_tx_queues; i++) {
|
|
|
+ if (!remove_xps_queue(dev_maps, cpu, i))
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (i == dev->num_tx_queues)
|
|
|
active = true;
|
|
|
}
|
|
|
|
|
@@ -1909,8 +1913,10 @@ void netif_reset_xps_queue(struct net_device *dev, u16 index)
|
|
|
kfree_rcu(dev_maps, rcu);
|
|
|
}
|
|
|
|
|
|
- netdev_queue_numa_node_write(netdev_get_tx_queue(dev, index),
|
|
|
- NUMA_NO_NODE);
|
|
|
+ for (i = index; i < dev->num_tx_queues; i++)
|
|
|
+ netdev_queue_numa_node_write(netdev_get_tx_queue(dev, i),
|
|
|
+ NUMA_NO_NODE);
|
|
|
+
|
|
|
out_no_maps:
|
|
|
mutex_unlock(&xps_map_mutex);
|
|
|
}
|
|
@@ -2096,8 +2102,12 @@ int netif_set_real_num_tx_queues(struct net_device *dev, unsigned int txq)
|
|
|
if (dev->num_tc)
|
|
|
netif_setup_tc(dev, txq);
|
|
|
|
|
|
- if (txq < dev->real_num_tx_queues)
|
|
|
+ if (txq < dev->real_num_tx_queues) {
|
|
|
qdisc_reset_all_tx_gt(dev, txq);
|
|
|
+#ifdef CONFIG_XPS
|
|
|
+ netif_reset_xps_queues_gt(dev, txq);
|
|
|
+#endif
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
dev->real_num_tx_queues = txq;
|
|
@@ -5919,6 +5929,10 @@ static void rollback_registered_many(struct list_head *head)
|
|
|
|
|
|
/* Remove entries from kobject tree */
|
|
|
netdev_unregister_kobject(dev);
|
|
|
+#ifdef CONFIG_XPS
|
|
|
+ /* Remove XPS queueing entries */
|
|
|
+ netif_reset_xps_queues_gt(dev, 0);
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
synchronize_net();
|