Lines Matching +full:1 +full:- +full:cell
1 // SPDX-License-Identifier: GPL-2.0
14 struct net_device *dev = skb->dev; in gro_cells_receive()
15 struct gro_cell *cell; in gro_cells_receive() local
19 if (unlikely(!(dev->flags & IFF_UP))) in gro_cells_receive()
22 if (!gcells->cells || skb_cloned(skb) || netif_elide_gro(dev)) { in gro_cells_receive()
27 cell = this_cpu_ptr(gcells->cells); in gro_cells_receive()
29 if (skb_queue_len(&cell->napi_skbs) > netdev_max_backlog) { in gro_cells_receive()
31 atomic_long_inc(&dev->rx_dropped); in gro_cells_receive()
37 __skb_queue_tail(&cell->napi_skbs, skb); in gro_cells_receive()
38 if (skb_queue_len(&cell->napi_skbs) == 1) in gro_cells_receive()
39 napi_schedule(&cell->napi); in gro_cells_receive()
52 struct gro_cell *cell = container_of(napi, struct gro_cell, napi); in gro_cell_poll() local
57 skb = __skb_dequeue(&cell->napi_skbs); in gro_cell_poll()
73 gcells->cells = alloc_percpu(struct gro_cell); in gro_cells_init()
74 if (!gcells->cells) in gro_cells_init()
75 return -ENOMEM; in gro_cells_init()
78 struct gro_cell *cell = per_cpu_ptr(gcells->cells, i); in gro_cells_init() local
80 __skb_queue_head_init(&cell->napi_skbs); in gro_cells_init()
82 set_bit(NAPI_STATE_NO_BUSY_POLL, &cell->napi.state); in gro_cells_init()
84 netif_napi_add(dev, &cell->napi, gro_cell_poll, in gro_cells_init()
86 napi_enable(&cell->napi); in gro_cells_init()
96 if (!gcells->cells) in gro_cells_destroy()
99 struct gro_cell *cell = per_cpu_ptr(gcells->cells, i); in gro_cells_destroy() local
101 napi_disable(&cell->napi); in gro_cells_destroy()
102 __netif_napi_del(&cell->napi); in gro_cells_destroy()
103 __skb_queue_purge(&cell->napi_skbs); in gro_cells_destroy()
105 /* This barrier is needed because netpoll could access dev->napi_list in gro_cells_destroy()
110 free_percpu(gcells->cells); in gro_cells_destroy()
111 gcells->cells = NULL; in gro_cells_destroy()