ksz_free_desc(9)
π ksz_free_desc(9) β or, the glow-up where descriptors get released π
okay so real talk, bestie, this little page lives in the Kernel API Manual and it's about one very specific, very necessary cleanup routine. it's short, it's sweet, and it's lowkey the reason your NIC driver doesn't leak memory into the void. we stan a responsible free-er. π«Ά
β¨ NAME β¨
ksz_free_desc β frees the software and the hardware descriptors, together, like a matched set. no cap. π
β¨ SYNOPSIS β¨
void ksz_free_desc (struct dev_info *adapter );
that's it. that's the whole signature. iconic minimalism. π
β¨ ARGUMENTS β¨
adapterβ the adapter information structure. it's giving "the one struct to rule them all" energy; you hand it over and the descriptors get freed. π
β¨ DESCRIPTION β¨
so, this is a local routine β meaning it's not out here doing global main-character things, it's just doing its job inside the driver. and what's the job? it frees the software and hardware descriptors. π¦
which descriptors, you ask? the ones that were allocated by ksz_alloc_desc. it's the matching pair, fr fr β ksz_alloc_desc takes, ksz_free_desc gives back. balance restored, vibes immaculate. β
that's literally the whole function. no elaborate plot, no side quests, just responsible resource cleanup. and honestly? that's the kind of energy the kernel needs. πΈ
β¨ SEE ALSO β¨
buckle up bestie, this list is long and we are not skipping a single one of them β the way that this manpage cross-references the entire driver π. starting with the file itself:
Kernel file ./drivers/net/ethernet/micrel/ksz884x.c, then struct ksz_hw_desc(9), struct ksz_sw_desc(9), struct ksz_dma_buf(9), struct ksz_desc(9), struct ksz_desc_info(9), struct ksz_mac_table(9), struct ksz_vlan_table(9), struct ksz_port_mib(9), struct ksz_port_cfg(9), struct ksz_switch(9), struct ksz_port_info(9), struct ksz_hw(9), struct ksz_port(9), struct ksz_timer_info(9), struct ksz_shared_mem(9), struct ksz_counter_info(9), struct dev_info(9), struct dev_priv(9).
then the hardware/switch helpers: hw_turn_on_intr(9), hw_block_intr(9), sw_r_table(9), sw_w_table_64(9), sw_w_sta_mac_table(9), sw_r_vlan_table(9), port_r_mib_cnt(9), port_r_mib_pkt(9), port_r_cnt(9), port_init_cnt(9), port_cfg(9), port_r8(9), port_r16(9), port_w16(9), sw_chk(9), sw_cfg(9), sw_cfg_broad_storm(9), sw_get_broad_storm(9), sw_dis_broad_storm(9), sw_ena_broad_storm(9), sw_init_broad_storm(9), hw_cfg_broad_storm(9), sw_dis_prio_rate(9), sw_init_prio_rate(9), sw_dis_diffserv(9), sw_dis_802_1p(9), sw_cfg_replace_null_vid(9), sw_cfg_replace_vid(9), sw_cfg_port_based(9), sw_dis_multi_queue(9), sw_init_prio(9), port_get_def_vid(9), sw_init_vlan(9), sw_cfg_port_base_vlan(9), sw_set_addr(9), sw_set_global_ctrl(9), port_set_stp_state(9), sw_clr_sta_mac_table(9), sw_init_stp(9), sw_block_addr(9).
then the phy/eeprom/link crowd: hw_r_phy(9), hw_w_phy(9), eeprom_read(9), eeprom_write(9), port_get_link_speed(9), port_set_link_speed(9), port_force_link_speed(9).
wake-on-lan squad, assemble: hw_chk_wol_pme_status(9), hw_clr_wol_pme_status(9), hw_cfg_wol_pme(9), hw_cfg_wol(9), hw_set_wol_frame(9), hw_add_wol_arp(9), hw_add_wol_bcast(9), hw_add_wol_mcast(9), hw_add_wol_ucast(9), hw_enable_wol(9).
hardware bring-up besties: hw_init(9), hw_reset(9), hw_setup(9), hw_setup_intr(9), hw_set_desc_base(9), hw_start_rx(9), hw_stop_rx(9), hw_start_tx(9), hw_stop_tx(9), hw_disable(9), hw_enable(9), hw_alloc_pkt(9), hw_send_pkt(9), hw_set_addr(9), hw_read_addr(9), hw_clr_multicast(9), hw_set_grp_addr(9), hw_set_multicast(9), hw_set_promiscuous(9), sw_enable(9), sw_setup(9).
descriptor & memory crew (our faves, obviously): ksz_start_timer(9), ksz_stop_timer(9), ksz_alloc_soft_desc(9), ksz_alloc_desc(9), free_dma_buf(9), ksz_init_rx_buffers(9), ksz_alloc_mem(9), ksz_free_buffers(9), ksz_free_mem(9).
transmit path girlies: send_packet(9), transmit_cleanup(9), tx_done(9), netdev_tx(9), netdev_tx_timeout(9), netdev_intr(9), netdev_close(9), netdev_open(9), netdev_query_statistics(9), netdev_set_mac_address(9), netdev_set_rx_mode(9), netdev_ioctl(9), mdio_read(9), mdio_write(9).
and finally the entire ethtool/netdev extended universe: netdev_get_link_ksettings(9), netdev_set_link_ksettings(9), netdev_nway_reset(9), netdev_get_link(9), netdev_get_drvinfo(9), netdev_get_regs_len(9), netdev_get_regs(9), netdev_get_wol(9), netdev_set_wol(9), netdev_get_msglevel(9), netdev_set_msglevel(9), netdev_get_eeprom_len(9), netdev_get_eeprom(9), netdev_set_eeprom(9), netdev_get_pauseparam(9), netdev_set_pauseparam(9), netdev_get_ringparam(9), netdev_get_strings(9), netdev_get_sset_count(9), netdev_get_ethtool_stats(9), netdev_set_features(9), dev_monitor(9), netdev_init(9).
likeβ¦ that's the whole friend group. every single one of them. invited to the function. ππ«Ά
ngl bestie, if you call this on descriptors that ksz_alloc_desc didn't allocate, that's on you β the page doesn't promise anything about that, and we're not out here inventing behaviour. π
and that's the page! π source path is ./drivers/net/ethernet/micrel, dated October 2026 β no notes, we love a low-maintenance queen. go free those descriptors, bestie, slay, periodt. π¦β¨πΈ
π¦ 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