dev_disable_gro_hw(9)
π 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
- 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