On 2/18/2025 5:59 PM, Paul Menzel wrote:
Dear Linux folks,


The driver e1000e has several parameters [1]:

     $ modinfo e1000e
    filename: /lib/modules/6.6.35.mx64.477/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko
     […]
     alias:          pci:v00008086d0000105Esv*sd*bc*sc*i*
     depends:
     retpoline:      Y
     intree:         Y
     name:           e1000e
     vermagic:       6.6.35.mx64.477 SMP preempt mod_unload modversions
     parm:           debug:Debug level (0=none,...,16=all) (int)
    parm:           copybreak:Maximum size of packet that is copied to a new buffer on receive (uint)
     parm:           TxIntDelay:Transmit Interrupt Delay (array of int)
    parm:           TxAbsIntDelay:Transmit Absolute Interrupt Delay (array of int)
     parm:           RxIntDelay:Receive Interrupt Delay (array of int)
    parm:           RxAbsIntDelay:Receive Absolute Interrupt Delay (array of int)     parm:           InterruptThrottleRate:Interrupt Throttling Rate (array of int)
     parm:           IntMode:Interrupt Mode (array of int)
    parm:           SmartPowerDownEnable:Enable PHY smart power down (array of int)     parm:           KumeranLockLoss:Enable Kumeran lock loss workaround (array of int)     parm:           WriteProtectNVM:Write-protect NVM [WARNING: disabling this can lead to corrupted NVM] (array of int)     parm:           CrcStripping:Enable CRC Stripping, disable if your BMC needs the CRC (array of int)

Unfortunately, only `copybreak` seems to be exposed via sysfs:

     $ ls /sys/module/e1000e/parameters/
     copybreak

Adding `e1000e.debug=16` to the Linux command line in GRUB also does not seem to help – at least no additional messages are logged by Linux.

The StackExchange thread *Debugging why NIC link comes up/down constantly* [2] makes the same observations. Regarding the reason, LinuxQuestions.org has the answer [3], that the permissions are set to 0, so the parameters are not exposed:

 From `drivers/net/ethernet/intel/e1000e/param.c`:

```
/* All parameters are treated the same, as an integer array of values.
  * This macro just reduces the need to repeat the same declaration code
  * over and over (plus this helps to avoid typo bugs).
  */
#define E1000_PARAM_INIT { [0 ... E1000_MAX_NIC] = OPTION_UNSET }
#define E1000_PARAM(X, desc)                                    \
         static int X[E1000_MAX_NIC+1] = E1000_PARAM_INIT;       \
         static unsigned int num_##X;                            \
         module_param_array_named(X, X, int, &num_##X, 0);       \
         MODULE_PARM_DESC(X, desc);
[…]

and from `drivers/net/ethernet/intel/e1000e/netdev.c`:

     static int debug = -1;
     module_param(debug, int, 0);
     MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)");

Could you please share the reason, why these are hidden from sysfs, not allowing them to be changed at runtime?


Kind regards,

Paul


[1]: https://www.kernel.org/doc/html/latest/networking/device_drivers/ethernet/intel/e1000.html#command-line-parameters [2]: https://unix.stackexchange.com/questions/662578/debugging-why-nic-link-comes-up-down-constantly
[3]: https://www.linuxquestions.org/questions/showthread.php?p=6305802


Hi Paul,

This part of the code was submitted in 2012 b3f4d5990bfc8 ("intel: make wired ethernet driver message level consistent (rev2)"), we don't know why the perm parameter was set to 0.

Anyway, in runtime the message level can be changed by ethtool -s msglvl command.

Reply via email to