Hi all! I've now completed the implementation of the points from my earlier "KMS + plymouth + DKMS + harddrake + speedboot + XFdrake + initrd stuff" RFC at http://lists.mandriva.com/cooker/2011-01/msg00107.php. The only notable difference is that instead of regenerating initrds a new "nokmsboot" boot option flag is used instead.
I'll do some final cleanups and testing before I start committing this work; this message is mostly a heads-up in case someone spots something that's not ok. The changes per package follow, feel free to comment: DKMS: - use display_driver_helper for loading display modules - no functional change, just needed due to the other changes Dracut: - fix find commandline to find gzip compressed KMS kernel modules Drakx-kbd-mouse-x11: - Added display_driver_helper script. - Add/Remove "nokmsboot" boot option depending on selected driver. display_driver_helper is used to detect if that is the case. - Ask for reboot instead of X restart in the usual case, as this is commonly required nowadays. Some checks could be added to allow only to restart X when that is enough, but those are for later. Drakxtools (harddrake-service): - Adapt splash handling for plymouth (i.e. hide splash when querying user). - Call drakx-kbd-mouse-x11 to add/remove nokmsboot boot option if needed. Detection is done using display_driver_helper and by checking for /dev/.late_kms which is created by display_driver_helper when it is called from udev and the kms driver wasn't yet loaded by initrd. - If a reboot is needed due to a driver switch (i.e. boot was done without nokmsboot but it is needed for the current driver), ask for it (user is given 30 sec to abort). display_driver_helper is used to detect this. - On driver switch, load the new driver by calling udevadm. - If X.org is already running when a driver change is initiated, defer change to next boot and disable speedboot for the next boot (note: irrelevant with systemd). - Generalize the harddrake_confirm code a bit. Drakxtools (installer): - When configuring bootloader after X is already configured (like One), use display_driver_helper to determine if "nokmsboot" should be used. Initscripts (rc.sysinit / speedboot, not relevant with systemd): - In very early boot, call display_driver_helper to check if there is a pending dkms build (that may cause a wrong older binary dkms driver to be loaded by X server) or a conflicting driver loaded by initrd (which may cause graphical corruption / freeze when starting server) and disable speedboot in those cases. - Load display drivers before X when in speedboot. - In speedboot mode, reopen file descriptors after X should've started. This ensures that harddrake_service (and other sysinit output) is shown to the user if the X startup failed. (plymouth grabs the output, and when it shuts down the output is lost until descriptors are reopened). Mkinitrd: - Allow putting nouveau/radeon in initrd (currently only i915 is allowed) - Do not load display drivers if booted with nokmsboot. Module-init-tools: - Remove now unneeded patch affecting blacklist behaviour. - Remove now unwanted blacklist entries for DKMS and KMS drivers. Proprietary drivers: - Remove modprobe.preload.d, udev now loads the drivers selectively using display_driver_helper. This also fixes a wrong version of a driver being loaded when during early boot there is an old binary dkms driver present and a newer source dkms driver is not yet built. Proprietary NVIDIA drivers: - Replace "alias" entry with "install" entry, to allow removal of a patch in module-init-tools. Udev: - Use display_driver_helper to load display drivers. It checks the drivers it knows so that the X.org configuration is appropriate for the driver before loading it. I.e. if "vesa" is enabled, no display drivers are loaded, and if "fglrx" is enabled "radeon" is not loaded, and vice versa, etc. Also, no wrong version dkms binary driver is loaded if the correct dkms source driver is going to be built later during this boot. - When in initrd, instead of using display_driver_helper, instead check for the nokmsboot boot parameter, and load drivers if that is not set (note: initrds do not contain proprietary drivers). -- Anssi Hannula
