Ubuntu – How to disable 8139too network driver in favor of the 8139cp network driver in Ubuntu

driversnetworkingUbuntu

I'm trying to disable the 8139too network driver in favor of the 8139cp driver on my Ubuntu 8.04 server. The current driver crashes when the network card exceeds about 1 MB/s.

The syslog also recommends switching to 8139cp:

8139too: Use the "8139cp" driver for improved performance and stability.

I've added blacklist 8139too to /etc/modprobe.d/blacklist but that doesn't seem to have any effect.

Is there some other way to switch network drivers that I'm not aware of?

Best Answer

I am going to assume you already have the 8139too and 8139cp modules on the machine, and you just want to swap the 8139too with the 8139cp driver. Please note you can easily lock yourself out of the server using this method, so be careful.

Firstly run an lsmod and check what modules the mii module depends on e.g:

:~# lsmod | grep 8139
8139too 38400 0
8139cp 34944 0
mii 14720 2 8139too,8139cp

As you can see the mii module depends on both of the 8139 modules. Now that we know which modules mii depends on we can unload the all the modules, reload the module we want and restart our networking. Here is what we are going to do:

rmmod 8139cp
rmmod 8139too
rmmod mii
modprobe 8139cp
modprobe mii
service networking restart

Short explanation of the code above. First three line remove the offending modules, then with modprobe we add the modules we want. In this case it will be the 8139cp and mii modules, restart your networking and use ethtool to check that it is working properly.

:~# ethtool -i eth0
driver: 8139cp
version: 1.3
firmware-version:
bus-info: 0000:00:12.0

This is a small workaround and will reset once you restart the server, to make it permanent create a bash script with the code above and add it to your startup scripts.