/openbmc/linux/Documentation/networking/ |
H A D | napi.rst | 6 NAPI title 9 NAPI is the event handling mechanism used by the Linux networking stack. 10 The name NAPI no longer stands for anything in particular [#]_. 14 The host then schedules a NAPI instance to process the events. 15 The device may also be polled for events via NAPI without receiving 18 NAPI processing usually happens in the software interrupt context, 20 for NAPI processing. 22 All in all NAPI abstracts away from the drivers the context and configuration 28 The two most important elements of NAPI are the struct napi_struct 30 of the NAPI instance while the method is the driver-specific event [all …]
|
/openbmc/linux/include/trace/events/ |
H A D | napi.h | 3 #define TRACE_SYSTEM napi 16 TP_PROTO(struct napi_struct *napi, int work, int budget), 18 TP_ARGS(napi, work, budget), 21 __field( struct napi_struct *, napi) 22 __string( dev_name, napi->dev ? napi->dev->name : NO_DEV) 28 __entry->napi = napi; 29 __assign_str(dev_name, napi->dev ? napi->dev->name : NO_DEV); 34 TP_printk("napi poll on napi struct %p for device %s work %d budget %d", 35 __entry->napi, __get_str(dev_name),
|
/openbmc/linux/net/core/ |
H A D | gro.c | 232 static void napi_gro_complete(struct napi_struct *napi, struct sk_buff *skb) in napi_gro_complete() argument 265 gro_normal_one(napi, skb, NAPI_GRO_CB(skb)->count); in napi_gro_complete() 268 static void __napi_gro_flush_chain(struct napi_struct *napi, u32 index, in __napi_gro_flush_chain() argument 271 struct list_head *head = &napi->gro_hash[index].list; in __napi_gro_flush_chain() 278 napi_gro_complete(napi, skb); in __napi_gro_flush_chain() 279 napi->gro_hash[index].count--; in __napi_gro_flush_chain() 282 if (!napi->gro_hash[index].count) in __napi_gro_flush_chain() 283 __clear_bit(index, &napi->gro_bitmask); in __napi_gro_flush_chain() 286 /* napi->gro_hash[].list contains packets ordered by age. 290 void napi_gro_flush(struct napi_struct *napi, bool flush_old) in napi_gro_flush() argument [all …]
|
H A D | gro_cells.c | 9 struct napi_struct napi; member 39 napi_schedule(&cell->napi); in gro_cells_receive() 50 static int gro_cell_poll(struct napi_struct *napi, int budget) in gro_cell_poll() argument 52 struct gro_cell *cell = container_of(napi, struct gro_cell, napi); in gro_cell_poll() 60 napi_gro_receive(napi, skb); in gro_cell_poll() 65 napi_complete_done(napi, work_done); in gro_cell_poll() 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() 85 napi_enable(&cell->napi); in gro_cells_init() 115 napi_disable(&cell->napi); in gro_cells_destroy() [all …]
|
/openbmc/linux/drivers/net/ethernet/intel/igc/ |
H A D | igc_xdp.c | 49 struct napi_struct *napi; in igc_xdp_enable_pool() local 78 /* Rx and Tx rings share the same napi context. */ in igc_xdp_enable_pool() 79 napi = &rx_ring->q_vector->napi; in igc_xdp_enable_pool() 84 napi_disable(napi); in igc_xdp_enable_pool() 91 napi_enable(napi); in igc_xdp_enable_pool() 109 struct napi_struct *napi; in igc_xdp_disable_pool() local 124 /* Rx and Tx rings share the same napi context. */ in igc_xdp_disable_pool() 125 napi = &rx_ring->q_vector->napi; in igc_xdp_disable_pool() 130 napi_disable(napi); in igc_xdp_disable_pool() 138 napi_enable(napi); in igc_xdp_disable_pool()
|
/openbmc/linux/drivers/infiniband/hw/hfi1/ |
H A D | ipoib_rx.c | 22 static struct sk_buff *prepare_frag_skb(struct napi_struct *napi, int size) in prepare_frag_skb() argument 33 return napi_alloc_skb(napi, size); in prepare_frag_skb() 49 struct napi_struct *napi = &rxq->napi; in hfi1_ipoib_prepare_skb() local 55 * napi cache. Otherwise we will try to use napi frag cache. in hfi1_ipoib_prepare_skb() 58 skb = napi_alloc_skb(napi, skb_size); in hfi1_ipoib_prepare_skb() 60 skb = prepare_frag_skb(napi, skb_size); in hfi1_ipoib_prepare_skb()
|
H A D | netdev.h | 18 * @napi: napi object 23 struct napi_struct napi; member 47 * When 0 NAPI will be disabled. 58 /* count of enabled napi polls */ 103 int hfi1_netdev_rx_napi(struct napi_struct *napi, int budget);
|
H A D | netdev_rx.c | 211 rxq->rcd->napi = &rxq->napi; in hfi1_netdev_rxq_init() 212 dd_dev_info(dd, "Setting rcv queue %d napi to context %d\n", in hfi1_netdev_rxq_init() 215 * Disable BUSY_POLL on this NAPI as this is not supported in hfi1_netdev_rxq_init() 218 set_bit(NAPI_STATE_NO_BUSY_POLL, &rxq->napi.state); in hfi1_netdev_rxq_init() 219 netif_napi_add(dev, &rxq->napi, hfi1_netdev_rx_napi); in hfi1_netdev_rxq_init() 252 netif_napi_del(&rxq->napi); in hfi1_netdev_rxq_deinit() 272 napi_enable(&rxq->napi); in enable_queues() 291 /* wait for napi if it was scheduled */ in disable_queues() 295 napi_synchronize(&rxq->napi); in disable_queues() 296 napi_disable(&rxq->napi); in disable_queues() [all …]
|
/openbmc/linux/include/linux/ |
H A D | netpoll.h | 70 static inline void *netpoll_poll_lock(struct napi_struct *napi) in netpoll_poll_lock() argument 72 struct net_device *dev = napi->dev; in netpoll_poll_lock() 77 while (cmpxchg(&napi->poll_owner, -1, owner) != -1) in netpoll_poll_lock() 80 return napi; in netpoll_poll_lock() 87 struct napi_struct *napi = have; in netpoll_poll_unlock() local 89 if (napi) in netpoll_poll_unlock() 90 smp_store_release(&napi->poll_owner, -1); in netpoll_poll_unlock() 99 static inline void *netpoll_poll_lock(struct napi_struct *napi) in netpoll_poll_lock() argument
|
/openbmc/linux/drivers/net/wireless/ath/wil6210/ |
H A D | netdev.c | 91 static int wil6210_netdev_poll_rx(struct napi_struct *napi, int budget) in wil6210_netdev_poll_rx() argument 93 struct wil6210_priv *wil = container_of(napi, struct wil6210_priv, in wil6210_netdev_poll_rx() 102 napi_complete_done(napi, done); in wil6210_netdev_poll_rx() 104 wil_dbg_txrx(wil, "NAPI RX complete\n"); in wil6210_netdev_poll_rx() 107 wil_dbg_txrx(wil, "NAPI RX poll(%d) done %d\n", budget, done); in wil6210_netdev_poll_rx() 112 static int wil6210_netdev_poll_rx_edma(struct napi_struct *napi, int budget) in wil6210_netdev_poll_rx_edma() argument 114 struct wil6210_priv *wil = container_of(napi, struct wil6210_priv, in wil6210_netdev_poll_rx_edma() 123 napi_complete_done(napi, done); in wil6210_netdev_poll_rx_edma() 125 wil_dbg_txrx(wil, "NAPI RX complete\n"); in wil6210_netdev_poll_rx_edma() 128 wil_dbg_txrx(wil, "NAPI RX poll(%d) done %d\n", budget, done); in wil6210_netdev_poll_rx_edma() [all …]
|
/openbmc/linux/drivers/net/ethernet/mellanox/mlx5/core/en/ |
H A D | trap.c | 8 static int mlx5e_trap_napi_poll(struct napi_struct *napi, int budget) in mlx5e_trap_napi_poll() argument 10 struct mlx5e_trap *trap_ctx = container_of(napi, struct mlx5e_trap, napi); in mlx5e_trap_napi_poll() 29 if (unlikely(!napi_complete_done(napi, work_done))) in mlx5e_trap_napi_poll() 73 ccp.napi = &t->napi; in mlx5e_open_trap_rq() 149 netif_napi_add(netdev, &t->napi, mlx5e_trap_napi_poll); in mlx5e_open_trap() 164 netif_napi_del(&t->napi); in mlx5e_open_trap() 173 netif_napi_del(&trap->napi); in mlx5e_close_trap() 179 napi_enable(&trap->napi); in mlx5e_activate_trap() 181 mlx5e_trigger_napi_sched(&trap->napi); in mlx5e_activate_trap() 189 napi_disable(&trap->napi); in mlx5e_deactivate_trap()
|
/openbmc/linux/drivers/net/ethernet/ |
H A D | lantiq_xrx200.c | 64 struct napi_struct napi; member 151 napi_enable(&priv->chan_tx.napi); in xrx200_open() 155 napi_enable(&priv->chan_rx.napi); in xrx200_open() 178 napi_disable(&priv->chan_rx.napi); in xrx200_close() 181 napi_disable(&priv->chan_tx.napi); in xrx200_close() 283 static int xrx200_poll_rx(struct napi_struct *napi, int budget) in xrx200_poll_rx() argument 285 struct xrx200_chan *ch = container_of(napi, in xrx200_poll_rx() 286 struct xrx200_chan, napi); in xrx200_poll_rx() 306 if (napi_complete_done(&ch->napi, rx)) in xrx200_poll_rx() 313 static int xrx200_tx_housekeeping(struct napi_struct *napi, int budget) in xrx200_tx_housekeeping() argument [all …]
|
/openbmc/linux/drivers/net/ethernet/aquantia/atlantic/ |
H A D | aq_vec.c | 21 struct napi_struct napi; member 28 static int aq_vec_poll(struct napi_struct *napi, int budget) in aq_vec_poll() argument 30 struct aq_vec_s *self = container_of(napi, struct aq_vec_s, napi); in aq_vec_poll() 68 napi, in aq_vec_poll() 93 napi_complete_done(napi, work_done); in aq_vec_poll() 122 netif_napi_add(aq_nic_get_ndev(aq_nic), &self->napi, aq_vec_poll); in aq_vec_alloc() 151 self->napi.napi_id) < 0) { in aq_vec_ring_alloc() 245 napi_enable(&self->napi); in aq_vec_start() 265 napi_disable(&self->napi); in aq_vec_stop() 290 netif_napi_del(&self->napi); in aq_vec_free() [all …]
|
/openbmc/linux/drivers/net/ethernet/synopsys/ |
H A D | dwc-xlgmac-net.c | 283 * enabled before using the private data napi structure. in xlgmac_isr() 290 if (napi_schedule_prep(&pdata->napi)) { in xlgmac_isr() 296 __napi_schedule_irqoff(&pdata->napi); in xlgmac_isr() 348 * channel napi structure and not the private data napi structure in xlgmac_dma_isr() 350 if (napi_schedule_prep(&channel->napi)) { in xlgmac_dma_isr() 355 __napi_schedule_irqoff(&channel->napi); in xlgmac_dma_isr() 365 struct napi_struct *napi; in xlgmac_tx_timer() local 367 napi = (pdata->per_channel_irq) ? &channel->napi : &pdata->napi; in xlgmac_tx_timer() 369 if (napi_schedule_prep(napi)) { in xlgmac_tx_timer() 378 __napi_schedule(napi); in xlgmac_tx_timer() [all …]
|
/openbmc/linux/drivers/net/caif/ |
H A D | caif_virtio.c | 30 /* NAPI schedule quota */ 41 /* struct cfv_napi_contxt - NAPI context info 54 * @rx_napi_complete: Number of NAPI completions (RX) 84 * @napi: Napi context used in cfv_rx_poll() 111 struct napi_struct napi; member 250 static int cfv_rx_poll(struct napi_struct *napi, int quota) in cfv_rx_poll() argument 252 struct cfv_info *cfv = container_of(napi, struct cfv_info, napi); in cfv_rx_poll() 319 napi_complete(napi); in cfv_rx_poll() 321 napi_schedule_prep(napi)) { in cfv_rx_poll() 323 __napi_schedule(napi); in cfv_rx_poll() [all …]
|
/openbmc/linux/include/net/page_pool/ |
H A D | types.h | 29 * use-case. The NAPI budget is 64 packets. After a NAPI poll the RX 35 * this array, as it shares the same softirq/NAPI protection. If 53 * @napi: NAPI which is the sole consumer of pages, otherwise NULL 64 struct napi_struct *napi; member 151 * Softirq/BH scheduling and napi_schedule. NAPI schedule 177 * protected by NAPI, due to above pp_alloc_cache. This 233 /* Caller must provide appropriate safe context, e.g. NAPI. */
|
/openbmc/linux/drivers/net/wireless/mediatek/mt76/ |
H A D | mt792x_dma.c | 66 napi_schedule(&dev->mt76.napi[MT_RXQ_MCU]); in mt792x_irq_tasklet() 69 napi_schedule(&dev->mt76.napi[MT_RXQ_MCU_WA]); in mt792x_irq_tasklet() 72 napi_schedule(&dev->mt76.napi[MT_RXQ_MAIN]); in mt792x_irq_tasklet() 290 int mt792x_poll_tx(struct napi_struct *napi, int budget) in mt792x_poll_tx() argument 294 dev = container_of(napi, struct mt792x_dev, mt76.tx_napi); in mt792x_poll_tx() 297 napi_complete(napi); in mt792x_poll_tx() 303 if (napi_complete(napi)) in mt792x_poll_tx() 312 int mt792x_poll_rx(struct napi_struct *napi, int budget) in mt792x_poll_rx() argument 317 dev = container_of(napi->dev, struct mt792x_dev, mt76.napi_dev); in mt792x_poll_rx() 320 napi_complete(napi); in mt792x_poll_rx() [all …]
|
/openbmc/linux/drivers/net/wireless/ath/ath12k/ |
H A D | dp_mon.h | 81 struct napi_struct *napi); 87 struct napi_struct *napi); 89 struct napi_struct *napi, int budget, 101 struct napi_struct *napi, 105 struct napi_struct *napi, int *budget);
|
/openbmc/linux/drivers/net/ethernet/google/gve/ |
H A D | gve_rx.c | 363 static struct sk_buff *gve_rx_add_frags(struct napi_struct *napi, in gve_rx_add_frags() argument 373 skb = napi_get_frags(napi); in gve_rx_add_frags() 382 skb = napi_alloc_skb(napi, 0); in gve_rx_add_frags() 433 struct napi_struct *napi, in gve_rx_raw_addressing() argument 437 struct sk_buff *skb = gve_rx_add_frags(napi, page_info, packet_buffer_size, len, ctx); in gve_rx_raw_addressing() 453 u16 len, struct napi_struct *napi) in gve_rx_copy_to_pool() argument 494 skb = gve_rx_add_frags(napi, &alloc_page_info, in gve_rx_copy_to_pool() 510 skb = gve_rx_add_frags(napi, copy_page_info, in gve_rx_copy_to_pool() 540 u16 len, struct napi_struct *napi, in gve_rx_qpl() argument 552 skb = gve_rx_add_frags(napi, page_info, rx->packet_buffer_size, len, ctx); in gve_rx_qpl() [all …]
|
/openbmc/linux/drivers/net/ethernet/qlogic/qlcnic/ |
H A D | qlcnic_io.c | 960 static int qlcnic_poll(struct napi_struct *napi, int budget) in qlcnic_poll() argument 967 sds_ring = container_of(napi, struct qlcnic_host_sds_ring, napi); in qlcnic_poll() 980 napi_complete_done(&sds_ring->napi, work_done); in qlcnic_poll() 990 static int qlcnic_tx_poll(struct napi_struct *napi, int budget) in qlcnic_tx_poll() argument 996 tx_ring = container_of(napi, struct qlcnic_host_tx_ring, napi); in qlcnic_tx_poll() 1001 napi_complete(&tx_ring->napi); in qlcnic_tx_poll() 1012 static int qlcnic_rx_poll(struct napi_struct *napi, int budget) in qlcnic_rx_poll() argument 1018 sds_ring = container_of(napi, struct qlcnic_host_sds_ring, napi); in qlcnic_rx_poll() 1024 napi_complete_done(&sds_ring->napi, work_done); in qlcnic_rx_poll() 1249 napi_gro_receive(&sds_ring->napi, skb); in qlcnic_process_rcv() [all …]
|
/openbmc/linux/drivers/staging/octeon/ |
H A D | ethernet-rx.c | 37 struct napi_struct napi; member 43 * @napi_id: Cookie to identify the NAPI instance. 406 * cvm_oct_napi_poll - the NAPI poll function. 407 * @napi: The NAPI instance. 412 static int cvm_oct_napi_poll(struct napi_struct *napi, int budget) in cvm_oct_napi_poll() argument 414 struct oct_rx_group *rx_group = container_of(napi, struct oct_rx_group, in cvm_oct_napi_poll() 415 napi); in cvm_oct_napi_poll() 422 napi_complete_done(napi, rx_count); in cvm_oct_napi_poll() 472 netif_napi_add_weight(dev_for_napi, &oct_rx_group[i].napi, in cvm_oct_rx_initialize() 474 napi_enable(&oct_rx_group[i].napi); in cvm_oct_rx_initialize() [all …]
|
/openbmc/linux/drivers/net/wwan/t7xx/ |
H A D | t7xx_netdev.c | 68 napi_enable(ctlb->napi[i]); in t7xx_ccmni_enable_napi() 69 napi_schedule(ctlb->napi[i]); in t7xx_ccmni_enable_napi() 82 napi_synchronize(ctlb->napi[i]); in t7xx_ccmni_disable_napi() 83 napi_disable(ctlb->napi[i]); in t7xx_ccmni_disable_napi() 261 * so add a dummy device for NAPI. in t7xx_init_netdev_napi() 268 ctlb->napi[i] = &ctlb->hif_ctrl->rxq[i].napi; in t7xx_init_netdev_napi() 269 netif_napi_add_weight(&ctlb->dummy_dev, ctlb->napi[i], t7xx_dpmaif_napi_rx_poll, in t7xx_init_netdev_napi() 279 netif_napi_del(ctlb->napi[i]); in t7xx_uninit_netdev_napi() 280 ctlb->napi[i] = NULL; in t7xx_uninit_netdev_napi() 406 struct napi_struct *napi) in t7xx_ccmni_recv_skb() argument [all …]
|
/openbmc/linux/drivers/net/ethernet/broadcom/ |
H A D | bcm4908_enet.c | 68 struct napi_struct napi; member 443 napi_schedule(&ring->napi); in bcm4908_enet_irq_handler() 483 napi_enable(&tx_ring->napi); in bcm4908_enet_open() 489 napi_enable(&rx_ring->napi); in bcm4908_enet_open() 506 napi_disable(&rx_ring->napi); in bcm4908_enet_stop() 507 napi_disable(&tx_ring->napi); in bcm4908_enet_stop() 534 napi_schedule(&enet->tx_ring.napi); in bcm4908_enet_start_xmit() 581 static int bcm4908_enet_poll_rx(struct napi_struct *napi, int weight) in bcm4908_enet_poll_rx() argument 583 struct bcm4908_enet_dma_ring *rx_ring = container_of(napi, struct bcm4908_enet_dma_ring, napi); in bcm4908_enet_poll_rx() 641 napi_complete_done(napi, handled); in bcm4908_enet_poll_rx() [all …]
|
/openbmc/linux/drivers/net/can/dev/ |
H A D | rx-offload.c | 42 static int can_rx_offload_napi_poll(struct napi_struct *napi, int quota) in can_rx_offload_napi_poll() argument 44 struct can_rx_offload *offload = container_of(napi, in can_rx_offload_napi_poll() 46 napi); in can_rx_offload_napi_poll() 66 napi_complete_done(napi, work_done); in can_rx_offload_napi_poll() 70 napi_reschedule(&offload->napi); in can_rx_offload_napi_poll() 325 napi_schedule(&offload->napi); in can_rx_offload_irq_finish() 347 napi_schedule(&offload->napi); in can_rx_offload_threaded_irq_finish() 364 netif_napi_add_weight(dev, &offload->napi, can_rx_offload_napi_poll, in can_rx_offload_init_queue() 417 napi_enable(&offload->napi); in can_rx_offload_enable() 423 netif_napi_del(&offload->napi); in can_rx_offload_del()
|
/openbmc/linux/drivers/net/wireless/ath/ath11k/ |
H A D | dp_rx.h | 70 struct napi_struct *napi, int budget); 71 int ath11k_dp_process_rx_err(struct ath11k_base *ab, struct napi_struct *napi, 74 struct napi_struct *napi, 85 struct napi_struct *napi, int budget); 87 struct napi_struct *napi, int budget);
|