|
@@ -711,13 +711,18 @@ static void rx_queue_release(struct kobject *kobj)
|
|
|
|
|
|
|
|
|
|
map = rcu_dereference_raw(queue->rps_map);
|
|
map = rcu_dereference_raw(queue->rps_map);
|
|
- if (map)
|
|
|
|
|
|
+ if (map) {
|
|
|
|
+ RCU_INIT_POINTER(queue->rps_map, NULL);
|
|
call_rcu(&map->rcu, rps_map_release);
|
|
call_rcu(&map->rcu, rps_map_release);
|
|
|
|
+ }
|
|
|
|
|
|
flow_table = rcu_dereference_raw(queue->rps_flow_table);
|
|
flow_table = rcu_dereference_raw(queue->rps_flow_table);
|
|
- if (flow_table)
|
|
|
|
|
|
+ if (flow_table) {
|
|
|
|
+ RCU_INIT_POINTER(queue->rps_flow_table, NULL);
|
|
call_rcu(&flow_table->rcu, rps_dev_flow_table_release);
|
|
call_rcu(&flow_table->rcu, rps_dev_flow_table_release);
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ memset(kobj, 0, sizeof(*kobj));
|
|
dev_put(queue->dev);
|
|
dev_put(queue->dev);
|
|
}
|
|
}
|
|
|
|
|