Update-initramfs ignores dkms module

Ubuntu Version:
24.04.02 LTS
6.11.0-29-generic

Problem Description:
I have an Ubuntu system with one AMD/Xilinx/Solarflare X2522-25G-Plus network card. The kernel contains drivers for older Solarflare cards but I need to use the updated, out-of-tree, driver (V6.x) available here:
https://www.xilinx.com/support/download/nic-software-and-drivers.html#linux

After making the DKMS version I can install it with:

sudo modprobe -r sfc
sudo modprobe sfc

And I can confirm it has loaded with both:

ethtool -i {interfacename}
sudo sfkey

HOWEVER, when I reboot the machine the new driver is lost and I have to modprobe it back again.

I have tried:

sudo update-initramfs -u

But this has zero effect.

I then tried:

sudo update-initramfs -u -v 2>&1 | tee initramfs.log

(Why on earth does update-initramfs send its output to stderr?)

If I look in this log file, the only lines containing references to ‘sfc’ are these:

dracut-install: mkdir '/var/tmp/mkinitramfs_sCz84W/lib/modules/6.11.0-29-generic/kernel/drivers/net/ethernet/sfc'
dracut-install: cp '/lib/modules/6.11.0-29-generic/kernel/drivers/net/ethernet/sfc/sfc.ko.zst' '/var/tmp/mkinitramfs_sCz84W/lib/modules/6.11.0-29-generic/kernel/drivers/net/ethernet/sfc/sfc.ko.zst'
dracut-install: mkdir '/var/tmp/mkinitramfs_sCz84W/lib/modules/6.11.0-29-generic/kernel/drivers/mtd'
dracut-install: cp '/lib/modules/6.11.0-29-generic/kernel/drivers/mtd/mtd.ko.zst' '/var/tmp/mkinitramfs_sCz84W/lib/modules/6.11.0-29-generic/kernel/drivers/mtd/mtd.ko.zst'
dracut-install: mkdir '/var/tmp/mkinitramfs_sCz84W/lib/modules/6.11.0-29-generic/kernel/drivers/net/ethernet/sfc/falcon'
dracut-install: cp '/lib/modules/6.11.0-29-generic/kernel/drivers/net/ethernet/sfc/falcon/sfc-falcon.ko.zst' '/var/tmp/mkinitramfs_sCz84W/lib/modules/6.11.0-29-generic/kernel/drivers/net/ethernet/sfc/falcon/sfc-falcon.ko.zst'
dracut-install: mkdir '/var/tmp/mkinitramfs_sCz84W/lib/modules/6.11.0-29-generic/kernel/drivers/net/ethernet/sfc/siena'
dracut-install: cp '/lib/modules/6.11.0-29-generic/kernel/drivers/net/ethernet/sfc/siena/sfc-siena.ko.zst' '/var/tmp/mkinitramfs_sCz84W/lib/modules/6.11.0-29-generic/kernel/drivers/net/ethernet/sfc/siena/sfc-siena.ko.zst'

There is no reference to the DKMS driver found here:
/var/lib/dkms/sfc/6.0.2.1000/6.11.0-29-generic/x86_64/module/sfc.ko.zst

The filenames are the same but they are different files with different sizes.

How do I make update-initramfs pick up the new, DKMS, driver?

1 Like

What results for modinfo sfc

modinfo sfc > modinfo.log

filename:       /lib/modules/6.11.0-29-generic/updates/dkms/sfc.ko.zst
version:        6.0.2.1000
license:        GPL
description:    Solarflare network driver
author:         Solarflare Communications and Michael Brown <mbrown@fensystems.co.uk>
srcversion:     7863D6663C4AA2DC70891E5
alias:          pci:v00001924d00003C03sv*sd*bc02sc00i*
alias:          pci:v00001924d00002C03sv*sd*bc*sc*i*
alias:          pci:v00001924d00001C03sv*sd*bc02sc00i*
alias:          pci:v00001924d00000C03sv*sd*bc*sc*i*
alias:          pci:v00001924d00001B03sv*sd*bc02sc00i*
alias:          pci:v00001924d00000B03sv*sd*bc*sc*i*
alias:          pci:v00001924d00001A03sv*sd*bc02sc00i*
alias:          pci:v00001924d00000A03sv*sd*bc*sc*i*
alias:          pci:v00001924d00001923sv*sd*bc02sc00i*
alias:          pci:v00001924d00000923sv*sd*bc*sc*i*
alias:          pci:v00001924d00001903sv*sd*bc02sc00i*
alias:          pci:v00001924d00000903sv*sd*bc*sc*i*
depends:        mtd
retpoline:      Y
name:           sfc
vermagic:       6.11.0-29-generic SMP preempt mod_unload modversions 
parm:           efx_allow_nvconfig_writes:Allow access to static config and backup firmware (bool)
parm:           max_vfs:Specify the number of VFs initialized by the driver (array of int)
parm:           vf_count:Duplicate of the max_vfs parameter (array of int)
parm:           enable_vswitch:Force allocation of a VEB vswitch on supported adapters (bool)
parm:           vfs_vlan_restrict:[SFC9100-family] Restrict VLANs usage on VFs. VF driver needs to use HW VLAN filtering to get VLAN tagged traffic; default=N (bool)
parm:           mcdi_logging_default:Enable MCDI logging on newly-probed functions (bool)
parm:           mcdi_log_commands:Specify which MCDI commands to log when logging is enabled. Comma or space separated list of hex values e.g. 'b,4c'. An empty string will log all commands (charp)
parm:           rx_refill_threshold:RX descriptor ring refill threshold (%) (uint)
parm:           rx_recycle_ring_size:Maximum number of RX buffers to recycle pages for (uint)
parm:           underreport_skb_truesize:Give false skb truesizes. Debug option to restore previous driver behaviour. (bool)
parm:           rx_copybreak:Size of headers copied into skb linear data area
parm:           lro_table_size:Size of the LRO hash table.  Must be a power of 2 (uint)
parm:           lro_chain_max:Maximum length of chains in the LRO hash table (uint)
parm:           lro_idle_jiffies:Time (in jiffies) after which an idle connection's LRO state is discarded (uint)
parm:           lro_slow_start_packets:Number of packets that must pass in-order before starting LRO. (uint)
parm:           lro_loss_packets:Number of packets that must pass in-order following loss before restarting LRO. (uint)
parm:           tx_copybreak:Maximum size of packet that may be copied to a new buffer on transmit, minimum is 16 bytes or 0 to disable (uint)
parm:           piobuf_size:[SFC9100-family] Maximum size of packet that may be copied to a PIO buffer on transmit (uint)
parm:           tx_push_max_fill:[SFC9100-family] Only use Tx push when the queue is below this fill level; 0=>never push 1=>push when empty; default always to push (uint)
parm:           tx_coalesce_doorbell:[SFC9100-family] Coalesce notification to NIC of pending TXdata when set this option sets tx_push_max_fill=0::default=N (bool)
parm:           multicast_chaining:[SFC9100-family] Enabled multicast filter chaining in firmware; default=Y (bool)
parm:           monitor_hw_available:[SFC9100-family] Check hardware availability during periodic monitor; default=N (bool)
parm:           tx_non_csum_queue:[SFC9100-family] Allocate dedicated TX queues for traffic not requiring checksum offload; default=N (bool)
parm:           num_vis:The number of extra VIs to allocate for Onload (int)
parm:           rss_use_fixed_key:Use a fixed RSS hash key, tested for reliable spreading across channels (bool)
parm:           rss_cpus:Number of CPUs to use for Receive-Side Scaling, or 'packages', 'cores', 'hyperthreads', 'numa_local_cores' or 'numa_local_hyperthreads' (charp)
parm:           rss_numa_local:Restrict RSS to CPUs on the local NUMA node (bool)
parm:           irq_adapt_low_thresh:Threshold score for reducing IRQ moderation (uint)
parm:           irq_adapt_high_thresh:Threshold score for increasing IRQ moderation (uint)
parm:           irq_adapt_irqs:Number of IRQs per IRQ moderation adaptation (uint)
parm:           napi_weight:NAPI weighting (int)
parm:           auto_config_xps:Toggle automatic XPS configuration (default is enabled). (bool)
parm:           irq_set_affinity:Set SMP affinity of IRQs to support RSS (N=>disabled Y=>enabled (default)) (bool)
parm:           debug:Bitmapped debugging message enable value (uint)
parm:           monitor_interval_ms:Bus state test interval in ms (uint)
parm:           phy_power_follows_link:Power down phy when interface is administratively down (bool)
parm:           link_down_on_reset:Signal the link down and up on resets (bool)
parm:           xdp_alloc_tx_resources:[EXPERIMENTAL] Allocate resources for XDP TX (bool)
parm:           lro:Large receive offload acceleration (bool)
parm:           separate_tx_channels:Use separate channels for TX and RX (bool)
parm:           interrupt_mode:Interrupt mode (0=>MSIX 1=>MSI) (uint)
parm:           irq_adapt_enable:Enable adaptive interrupt moderation (bool)
parm:           rx_ring:Maximum number of descriptors in a receive ring (uint)
parm:           tx_ring:Maximum number of descriptors in a transmit ring (uint)
parm:           performance_profile:Tune settings for different performance profiles: 'throughput', 'latency' or (default) 'auto' (charp)
parm:           rx_irq_mod_usec:Receive interrupt moderation (microseconds) (uint)
parm:           tx_irq_mod_usec:Transmit interrupt moderation (microseconds) (uint)

This is from a test rig I’m using. It has the same problem but with an SFN8522 card.