Using some cheap hardware in a thin-client setup we use a diskless PXE booting a small Linux kernel. Currently, it takes a quite some time to boot it fully up and we're looking into some optimizations here. The biggest pain now is the network link initialization by the kernel.
During the initialization of the PXE Option ROM it acquires a link, IP address and options which PXELinux uses to do do the TFTP action to load the kernel and a small initrd. While loading the kernel, or more specifically the ethernet kernel module, it recycles the link and does re-negotiation with the switch. We've timed this to be at least four seconds on the hardware we have here. In an enterprise environment this can take quite some additional time on the switch before it is able to talk to the rest of the network (e.g. Cisco without portfast). All this and has to be walked through twice from the point one hits the power button. Avoiding it the second time would be of great value here.
Summarizing: would it be possible to have the Linux network (ethernet) driver to not touch the link state it acquired by the PXE boot subsystem? Also, if this is only valid for specific hardware, I would be quite interested to know about it.
jme involves just these three module parameters:
parm: force_pseudohp:Enable pseudo hot-plug feature manually by driver instead of BIOS. (int) parm: no_pseudohp:Disable pseudo hot-plug feature. (int) parm: no_extplug:Do not use external plug signal for pseudo hot-plug. (int)
Looking at the source code there's no condition for running the reset link function when initializing the hardware. (specifically,
jme_open -> unconditional