--- linux-ac7/drivers/usb/usb-core.c	Sat Jun  3 09:14:39 2000
+++ linux/drivers/usb/usb-core.c	Sun Jun  4 12:50:33 2000
@@ -14,6 +14,7 @@
 #include <linux/kernel.h>
 #include <linux/config.h>
 #include <linux/usb.h>
+#include <linux/kmod.h>
 
 /*
  * USB core
@@ -97,5 +98,34 @@
 	ohci_hcd_init(); 
 #endif
 #endif
+
+#if	defined (CONFIG_USB_MODULE) && defined (CONFIG_KMOD)
+	/*
+	 * When USB itself is a module (so we're called with a root fs
+	 * to modprobe from), and the kernel module loader is enabled
+	 * (we can modprobe), we initialize all host controller drivers
+	 * (HCDs) ... just as if neither usbcore nor HCDs were modular.
+	 *
+	 * Else, some administrative component must manually modprobe
+	 * the HCDs to make sure the HCs (and USB) are usable.
+	 *
+	 * USB device driver loading is a separate problem, which
+	 * requires functioning HCDs in order to be of any use. 
+	 */
+#ifdef	CONFIG_USB_OHCI_MODULE
+	request_module ("usb-ohci");
+#endif
+#ifdef	CONFIG_USB_UHCI_MODULE
+	request_module ("usb-uhci");
+#endif
+#ifdef	CONFIG_USB_UHCI_ALT_MODULE
+	request_module ("uhci");
+#endif
+	/*
+	 * XXX If we found no HCs here, clean up and return a failure ...
+	 * unloading usbcore and freeing its unusable resources.
+	 */
+#endif
+
 	return 0;
 }

