[dracut] Loading of modules that don't have a uevent or pci device: ideas?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hey Harald and initramfs mailing list, 

I am working on de-coupling a lot of Xen modules from the PV-OPS
kernel (git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen.git)
so that it is not neccessary to have them compiled in.

I've gotten to the point that all of the drivers (fbfront, kbdfront,
netfront, blkfront, pcifront) can be loaded on demand. Some of them
can't be unloaded (still working on that).

The next stage is to make the loading automatic, and detect if the kernel
is running under Xen (PV) and if so load the neccesssary modules.

To solve that, my thought was to:

a) Write udev rules that would be act up if the kernel emitted such
rules. But the kernel does not emit any uevents for this purpose and
it does not emit any virtualization ones until the virtualization modules
are loaded.  I could write up code that would emit this
information and be generic enough that it would do so for anything
that uses the paravirt strutures. So basically a SysFS interface for
the paravirt interface. 

b) Or utilize xen-detect and load the appropiate modules if we are
running in Xen PV land. The second is by far much simpler but I don't
know if more appropiate. I am attaching an example patch to demonstrate
what I had in mind. (Caveat: I didn't include the pre-requisite for
xen-tools yet).

c). Another way? Any ideas would be much appreciated.

diff -uNpr dracut-003.orig/dracut.spec dracut-003/dracut.spec
--- dracut-003.orig/dracut.spec	2009-12-21 15:41:45.574109292 -0500
+++ dracut-003/dracut.spec	2009-12-21 16:02:09.019109359 -0500
@@ -162,6 +162,7 @@ rm -rf $RPM_BUILD_ROOT
 %{_datadir}/dracut/modules.d/10redhat-i18n
 %{_datadir}/dracut/modules.d/10rpmversion
 %{_datadir}/dracut/modules.d/50plymouth
+%{_datadir}/dracut/modules.d/60xen
 %{_datadir}/dracut/modules.d/90crypt
 %{_datadir}/dracut/modules.d/90dm
 %{_datadir}/dracut/modules.d/90dmraid
@@ -216,6 +217,9 @@ rm -rf $RPM_BUILD_ROOT
 %dir /var/lib/dracut/overlay
 
 %changelog
+* Mon Dec 21 2009 Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> 003
+- add support for loading Xen modules.
+
 * Mon Nov 23 2009 Harald Hoyer <harald@xxxxxxxxxx> 002-26
 - add WITH_SWITCH_ROOT make flag
 - add fips requirement conditional
diff -uNpr dracut-003.orig/modules.d/60xen/check dracut-003/modules.d/60xen/check
--- dracut-003.orig/modules.d/60xen/check	1969-12-31 19:00:00.000000000 -0500
+++ dracut-003/modules.d/60xen/check	2009-12-21 16:26:35.754120140 -0500
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+# No Xen-detect? Boo!!
+which xen-detect >/dev/null 2>&1 || exit 1
+
+. $dracutfunctions
+[[ $debug ]] && set -x
+
+# Yes, we are under Xen PV env.
+xen-detect | egrep -q -v 'PV' || exit 0
+
+exit 1
diff -uNpr dracut-003.orig/modules.d/60xen/install dracut-003/modules.d/60xen/install
--- dracut-003.orig/modules.d/60xen/install	1969-12-31 19:00:00.000000000 -0500
+++ dracut-003/modules.d/60xen/install	2009-12-21 15:57:08.243111382 -0500
@@ -0,0 +1,4 @@
+#!/bin/bash
+inst xen-detect 
+inst_hook pre-udev 40 "$moddir/xen-pre-udev.sh"
+
diff -uNpr dracut-003.orig/modules.d/60xen/installkernel dracut-003/modules.d/60xen/installkernel
--- dracut-003.orig/modules.d/60xen/installkernel	1969-12-31 19:00:00.000000000 -0500
+++ dracut-003/modules.d/60xen/installkernel	2009-12-21 16:00:08.388121268 -0500
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+for i in \
+    xenbus_probe_frontend xen-pcifront \
+    xen-fbfront xen-kbdfront xen-blkfront xen-netfront \
+    ; do
+    modinfo -k $kernel $i >/dev/null 2>&1 && instmods $i
+done
+
diff -uNpr dracut-003.orig/modules.d/60xen/xen-pre-udev.sh dracut-003/modules.d/60xen/xen-pre-udev.sh
--- dracut-003.orig/modules.d/60xen/xen-pre-udev.sh	1969-12-31 19:00:00.000000000 -0500
+++ dracut-003/modules.d/60xen/xen-pre-udev.sh	2009-12-21 16:03:52.735120719 -0500
@@ -0,0 +1,10 @@
+xen-detect
+RC=$?
+if [ "$RC" = "1" ] ; then
+        modprobe xenbus_probe_frontend
+        modprobe xen-kbdfront
+        modprobe xen-fbfront
+        modprobe xen-blkfront
+        modprobe xen-netfront
+        modprobe xen-pcifront
+fi

[Index of Archives]     [Linux Kernel]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux