dev_disable_gro_hw(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… dev_disable_gro_hw β€” the Kernel API Manual page you didn't know you needed

okay so bestie, welcome to the dev_disable_gro_hw(9) page, straight out of the Kernel API Manual, and honestly? it's a short one, but it matters. sit down, grab a lil snack πŸ“, and let's get into it.


✨ NAME ✨

dev_disable_gro_hw β€” turn off HW Generic Receive Offload on a device. that's it. that's the function. no cap.


πŸŽ€ SYNOPSIS πŸŽ€

void dev_disable_gro_hw (struct net_device *dev );

yes the spacing in there is exactly how the kernel docs roll, she's quirky like that πŸ’…


πŸ¦‹ ARGUMENTS πŸ¦‹

  • dev β€” the device. the net device in question. the whole point. she's the main character of this function call πŸ‘‘

🌸 DESCRIPTION 🌸

so what does she actually do? dev_disable_gro_hw disables HW Generic Receive Offload (that's GRO_HW for the girlies in the back) on a net device. literally just β€” off. gone. not today. πŸ™…β€β™€οΈ

⚠️ real talk though: it must be called under RTNL. that is not a vibe suggestion, it's a requirement. don't be out here calling it whenever, RTNL is holding the door for you.

and why would you even want this? because it's needed if Generic XDP is installed on the device. that's the whole situation. XDP's in the house, so GRO_HW has to go. iykyk πŸ’€


πŸ”₯ SEE ALSO πŸ”₯

okay this is where it gets iconic, because the SEE ALSO section on this page is genuinely a whole friend group. the kernel file is ./net/core/dev.c, and these are all her mutuals:

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),

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_disable(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)

like i said. whole friend group. every single one of them. go say hi 🫢


that's the page bestie, short and sweet πŸ’– this one's from ./net/core, dated October 2026 β€” and yes, that's the cute sign-off, you're welcome, mwah πŸ’…βœ¨

πŸ“¦ where this page comes from