@@ -842,6 +842,28 @@ static int xennet_close(struct net_device *dev)
842
842
return 0 ;
843
843
}
844
844
845
+ static void xennet_destroy_queues (struct netfront_info * info )
846
+ {
847
+ unsigned int i ;
848
+
849
+ for (i = 0 ; i < info -> netdev -> real_num_tx_queues ; i ++ ) {
850
+ struct netfront_queue * queue = & info -> queues [i ];
851
+
852
+ if (netif_running (info -> netdev ))
853
+ napi_disable (& queue -> napi );
854
+ netif_napi_del (& queue -> napi );
855
+ }
856
+
857
+ kfree (info -> queues );
858
+ info -> queues = NULL ;
859
+ }
860
+
861
+ static void xennet_uninit (struct net_device * dev )
862
+ {
863
+ struct netfront_info * np = netdev_priv (dev );
864
+ xennet_destroy_queues (np );
865
+ }
866
+
845
867
static void xennet_set_rx_rsp_cons (struct netfront_queue * queue , RING_IDX val )
846
868
{
847
869
unsigned long flags ;
@@ -1611,6 +1633,7 @@ static int xennet_xdp(struct net_device *dev, struct netdev_bpf *xdp)
1611
1633
}
1612
1634
1613
1635
static const struct net_device_ops xennet_netdev_ops = {
1636
+ .ndo_uninit = xennet_uninit ,
1614
1637
.ndo_open = xennet_open ,
1615
1638
.ndo_stop = xennet_close ,
1616
1639
.ndo_start_xmit = xennet_start_xmit ,
@@ -2103,22 +2126,6 @@ static int write_queue_xenstore_keys(struct netfront_queue *queue,
2103
2126
return err ;
2104
2127
}
2105
2128
2106
- static void xennet_destroy_queues (struct netfront_info * info )
2107
- {
2108
- unsigned int i ;
2109
-
2110
- for (i = 0 ; i < info -> netdev -> real_num_tx_queues ; i ++ ) {
2111
- struct netfront_queue * queue = & info -> queues [i ];
2112
-
2113
- if (netif_running (info -> netdev ))
2114
- napi_disable (& queue -> napi );
2115
- netif_napi_del (& queue -> napi );
2116
- }
2117
-
2118
- kfree (info -> queues );
2119
- info -> queues = NULL ;
2120
- }
2121
-
2122
2129
2123
2130
2124
2131
static int xennet_create_page_pool (struct netfront_queue * queue )
0 commit comments