I am a beginner overall but I have installed Fedora on my MSI Laptop (NVIDIA and Intel GPU), and since about Kernel 4.19 (and the current ones as well), I experiment terrible slow boot times.
The thing is, I have a partial solution which is to blacklist i2c_nvidia_gpu. However, doing this, my laptop will run 100% of the time on Nvidia GPU killing the battery life. I will, after this post, try to install Bumblebee to see if I can retain the graphic card switching and keep this boot fix.
The problem is caused (by running: systemd-analyze blame)
Which in boot becomes:
A start job is running for udev … ( 1.30 minutes)
Found the solution here:
which is basically:
sudo vim /etc/modprobe.d/blacklist-i2c-nvidia-gpu.conf
will remove a delay time of 1 minute and 30 seconds on boot
Not sure how we can make Fedora consider this problem or reach out to other people. This solution fixes the slow boot but the GPU will never switch back to intel, and eat up all battery.
Afaik unfortunately there’s not much Fedora can do here, since the issue seems to be with the NVIDIA driver. That being said, if you don’t actually use the laptop for gaming (or don’t game on Linux and e.g. dual boot), you can uninstall the nvidia driver and blacklist nouveau instead, which will ensure that you’re always using the Intel GPU.
For some added context: this is probably related to NVIDIA being an out-of-tree driver, compiled locally; since it’s not signed, it would fail the secure boot check. Tbh this should have entirely stopped boot, I’m not entirely sure why it instead randomly broke hardware detection…
From my experience (with much older NVidia GPU on a desktop, i.e. with a single GPU) it didn’t stop the boot, just skipped loading unsigned – locally compiled – Nvidia kernel modules. I’ve got to tty text-only boot – no graphics driver available – and could see that kernel rejected unsigned module.
In this case if the systemd-udev-settle.service was the culprit (it’s unclear from the posts to me if it actually was) – this service’s intent is to wait while udev completes all the devices initialization – and without kernel module initialization of GPU wasn’t completing in timely fashion – so it all sort of makes sense.