First of all my 10 Gigabit connection is still working. Over the last year I used varying linux kernels between 3.18 and 4.0. But in terms of features those kernels are over 2 years old. Therefore this post deals with the issues from last time concerning kernel releases 4.1 and greater.
I guess there are many methods to fix this problem, but I started to debug with git-bisect because I know which kernel release did (not) work.
If you just want a short explanation about git-bisect, you are right here, but for more details there is a good guide how to bisect a kernel on the gentoo wiki. Basically we tell the git-bisect tool which git version works and which one doesn’t. But before starting we have to clone the official git repository.
cd /usr/src git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-stable
Then copy your kernel configuration file (.config) into /usr/src/linux-stable. Create a symlink from /usr/src/linux to the new repository.
cp linux/.config linux-stable ln -s linux-stable linux
The we start bisect and mark the good and the bad kernel version. After that we build the new custom kernel and reboot.
cd linux git bisect start | tee -a /root/bisect.log git bisect good v3.18.45 | tee -a /root/bisect.log git bisect bad v4.1.15 | tee -a /root/bisect.log make olddefconfig && make prepare && make modules_prepare && make -j5 && make modules_install && make install && emerge -qv @module-rebuild && grub-mkconfig -o /boot/grub/grub.cfg reboot
Then we need a method to determine if this custom kernel has the issues. I copied a few linux ISOs over the 10 Gigabit connection to have a reproducible test case. If everything worked you have a good kernel, otherwise a bad one.
cd /usr/src/linux git bisect bad | tee -a /root/bisect.log #or git bisect bad | tee -a /root/bisect.log
Afterwards build a new kernel, reboot and test again. In my case it took 14 steps to find the first bad commit. This doesn’t mean that there is something wrong in this commit, but it is a sign that this commit triggers some incompatibility in your setup. So, this commit changed/fixed the behaviour of the Active State Power Management (ASPM) from PCIe. My solution was to disable ASPM in my bios and now everything works with kernel version 4.9.9.
As always, feel free to comment, if you liked this post or have questions.