napi_disable(9)
π¦ napi_disable π¦
okay so real quick β this page is from the Kernel API Manual, and bestie, it's a short one but it's lowkey important, so let's get into it π
β¨ NAME β¨
napi_disable β literally just: prevent NAPI from scheduling. that's the whole vibe check π
πΈ SYNOPSIS πΈ
void napi_disable (struct napi_struct *n );
like yes, that's it. no cap, one argument, returns nothing. main character energy but make it void π
π§ ARGUMENTS π§
nβ the NAPI context π«Ά that's the thing you're about to put on pause, bestie.
π₯ DESCRIPTION π₯
So what does it actually do? It stops NAPI from being scheduled on this context β¨ periodt. That's the headline.
And then β the way that it's not just a "flip a bit and dip" situation β it waits till any outstanding processing completes π like it's not gonna leave the party until every last thing finishes. respectful honestly.
Also: it takes netdev_lock for the associated net_device π so yeah, it's grabbing a lock on the way in, iykyk. plan accordingly.
ngl, "waits till any outstanding processing completes" + "takes netdev_lock" is the part that matters most here β this call can block on you, so don't be caught off guard π
β SEE ALSO β
alright bestie, buckle up, this list is iconic and also extremely long ππ and yes we're keeping every single one, because that's what slay means:
dev_add_pack(9),__dev_remove_pack(9),dev_remove_pack(9),dev_get_iflink(9)dev_fill_metadata_dst(9),netdev_napi_by_id_lock(9),__dev_get_by_name(9),dev_get_by_name_rcu(9)netdev_get_by_name(9),__dev_get_by_index(9),dev_get_by_index_rcu(9),netdev_get_by_index(9)dev_get_by_napi_id(9),netdev_get_by_index_lock(9),netdev_get_name(9),dev_getbyhwaddr_rcu(9)dev_getbyhwaddr(9),netdev_get_by_flags_rcu(9),dev_valid_name(9),__dev_alloc_name(9)dev_alloc_name(9),dev_get_alias(9),netdev_features_change(9),__netdev_notify_peers(9)netdev_notify_peers(9),dev_disable_gro_hw(9),register_netdevice_notifier(9),unregister_netdevice_notifier(9)register_netdevice_notifier_net(9),unregister_netdevice_notifier_net(9),call_netdevice_notifiers_info(9),call_netdevice_notifiers_info_robust(9)call_netdevice_notifiers(9),call_netdevice_notifiers_mtu(9),dev_forward_skb(9),dev_nit_active_rcu(9)netif_setup_tc(9),netif_set_real_num_rx_queues(9),netif_set_real_num_queues(9),netif_set_tso_max_size(9)netif_set_tso_max_segs(9),netif_inherit_tso_max(9),netif_get_num_default_rss_queues(9),netif_device_detach(9)netif_device_attach(9),dev_loopback_xmit(9),__dev_queue_xmit(9),rps_flow_is_active(9)rps_may_expire_flow(9),__netif_rx(9),netif_rx(9),netdev_is_rx_handler_busy(9)netdev_rx_handler_register(9),netdev_rx_handler_unregister(9),netif_receive_skb_core(9),netif_receive_skb(9)netif_receive_skb_list(9),__napi_schedule(9),napi_schedule_prep(9),__napi_schedule_irqoff(9)netif_threaded_enable(9),netif_queue_set_napi(9),napi_enable(9),netdev_has_upper_dev(9)netdev_has_upper_dev_all_rcu(9),netdev_has_any_upper_dev(9),netdev_master_upper_dev_get(9),netdev_has_any_lower_dev(9)netdev_upper_get_next_dev_rcu(9),netdev_lower_get_next_private(9),netdev_lower_get_next_private_rcu(9),netdev_lower_get_next(9)netdev_lower_get_first_private_rcu(9),netdev_master_upper_dev_get_rcu(9),netdev_upper_dev_link(9),netdev_master_upper_dev_link(9)netdev_upper_dev_unlink(9),netdev_bonding_info_change(9),netdev_get_xmit_slave(9),netdev_sk_get_lowest_dev(9)netdev_lower_state_changed(9),netif_get_flags(9),netif_set_mtu_ext(9),netif_pre_changeaddr_notify(9)dev_get_phys_port_id(9),dev_get_phys_port_name(9),netif_get_port_parent_id(9),netdev_port_same_parent_id(9)netdev_change_proto_down_reason_locked(9),dev_change_xdp_fd(9),dev_index_reserve(9),netdev_update_features(9)netdev_change_features(9),netif_stacked_transfer_operstate(9),register_netdevice(9),register_netdev(9)netdev_wait_allrefs_any(9),dev_get_stats(9),dev_fetch_sw_netstats(9),dev_get_tstats64(9)netdev_sw_irq_coalesce_default_on(9),alloc_netdev_mqs(9),free_netdev(9),alloc_netdev_dummy(9)synchronize_net(9),unregister_netdevice_queue(9),unregister_netdevice_many(9),unregister_netdev(9)netdev_increment_features(9),netdev_compute_master_upper_features(9),netdev_drivername(9)
oh and the source file for all of this is Kernel file ./net/core/dev.c π¦ go read it if you're feeling brave, i believe in you π«Ά
and that's the whole page bestie π mwah π
so like, credit where it's due β this one came out of ./net/core, dated October 2026, and it's still filed under napi_disable(9) in the Kernel API Manual πΈ go forth and disable NAPI responsibly βπ
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms