Conflict between igc and i40e Intel drivers on Minisforum MS-01

I am using a Minisforum MS-01 (overkill, I know) for my openwrt router. When I installed the i40e drivers to use the Intel X710 and rebooted my device, my router would not restore. Turns out that after logging in through console, I found that the i40e drivers were being used for the I226 ports and the igc drivers were being used for the X710 device. If I do a lspci -n ## -v it shows the correct driver there, but ethtool shows otherwise and that's when my drivers won't load. The "workaround" for now is rmmod i40e and rmmod igc then modprobe igc followed a few seconds by modprobe i40e so when it loads in that order it correctly installs the drivers to the right devices.

Is this a bug? Is there anything I can do to force the interfaces to load the proper drivers?

not a solution, but perhaps a workaround.

add blacklist=i40e to grub, then modprobe it in rc.local.

1 Like

This is what I have in place for my workaround:

# Disable EEE
# Optimizations for eth0 and eth1
(sleep 60; ethtool --set-eee eth0 eee off)&
(sleep 60; ethtool --set-eee eth1 eee off)&

# Disable Offloading
# Optimizations for eth0, eth1, and eth3
(sleep 60; ethtool -K eth0 tso off gso off gro off rx off tx off ufo off lro off rxvlan off txvlan off)&
(sleep 60; ethtool -K eth1 tso off gso off gro off rx off tx off ufo off lro off rxvlan off txvlan off)&
(sleep 60; ethtool -K eth3 tso off gso off gro off rx off tx off ufo off lro off rxvlan off txvlan off)&

# Workaround
rmmod igc
rmmod i40e
modprobe igc
(sleep 30; modprobe i40e)&

Interfaces in question:

02:00.0 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 02)
02:00.1 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 02)
57:00.0 Ethernet controller: Intel Corporation Ethernet Controller I226-V (rev 04)
58:00.0 Ethernet controller: Intel Corporation Ethernet Controller I226-LM (rev 04)

When I do ethtool -i eth# before doing the workaround, the drivers are backwards. As mentioned in my original post, lspci -n ##: -v shows the correct driver even when ethtool shows it wrong. However, it also doesn't work when it's backwards in ethtool so I'm believing ethtool has more of an accurate depiction of what's really going on.

I was thinking of creating a conf in /etc/udev/rules.d to see if I can specify the driver there, but I have read other places that it doesn't work since it runs too late post-boot. If I get a chance to after work today I'll try and provide an update:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="igc", ATTR{address}=="AA:AA:AA:AA:AA:AA", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="igc", ATTR{address}=="BB:BB:BB:BB:BB:BB", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="eth1"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="i40e", ATTR{address}=="CC:CC:CC:CC:CC:CC", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="eth2"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="i40e", ATTR{address}=="DD:DD:DD:DD:DD:DD", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="eth3"

there's no udev in openwrt.

1 Like

Well that shoots that idea down quickly. Thanks for letting me know!
Any ideas or suggestions on how to rectify this issue?

Seems like a cleaner workaround than what I'm doing now. I'll implement. Thank you!

Update: It did not work :frowning:

Found a fix:
I renamed the files in /etc/modules.d/ so that igc loads first before i40n.

cd /etc/modules.d/
mv igc 74-igc
mv i40n 75-i40n
2 Likes

This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.