On Fri, Apr 20 2001, Stefan Jaschke wrote:
> On Friday 20 April 2001 00:49, J . A . Magallon wrote:
> > Hi,
> >
> > Just built 2.4.3-ac10 and got an oops when booting. It tries to detect
> > the CD and gives the oops.
> > >>EIP; c01bfc7c <cdrom_get_entry+1c/50>   <=====
> 
> This appears to be a known problem. Jens Axboe sent a patch in a different
> thread ("SD-W2002 DVD-RAM") that fixes this. I am including it
> here for your convenience. (The patch is against 2.4.4-pre4 + Jens' 
> latest fixes.) 

Indeed, and it was the missing init call as suspected. The problem is
that cdrom is consequently linked after low level drivers -- this is
really the stuff that should be fixed, but instead of rewriting all of
that this quick hack should suffice.

-- 
Jens Axboe

--- drivers/cdrom/cdrom.c~      Fri Apr 20 10:43:31 2001
+++ drivers/cdrom/cdrom.c       Fri Apr 20 10:44:21 2001
@@ -381,7 +381,7 @@
  * change it here without gcc complaining at every line.
  */
 #define ENSURE(call, bits) if (cdo->call == NULL) *change_capability &= ~(bits)
-
+static int cdrom_init(void);
 int register_cdrom(struct cdrom_device_info *cdi)
 {
        static char banner_printed;
@@ -397,11 +397,9 @@
        if (cdo->open == NULL || cdo->release == NULL)
                return -2;
        if ( !banner_printed ) {
-               printk(KERN_INFO "Uniform CD-ROM driver " REVISION "\n");
                banner_printed = 1;
-#ifdef CONFIG_SYSCTL
-               cdrom_sysctl_register();
-#endif /* CONFIG_SYSCTL */ 
+               printk(KERN_INFO "Uniform CD-ROM driver " REVISION "\n");
+               cdrom_init();
        }
        ENSURE(drive_status, CDC_DRIVE_STATUS );
        ENSURE(media_changed, CDC_MEDIA_CHANGED);
@@ -477,7 +475,6 @@
 {
        struct cdrom_device_info *cdi, *prev;
        int major = MAJOR(unreg->dev);
-       int bit_nr, cd_index;
 
        cdinfo(CD_OPEN, "entering unregister_cdrom\n"); 
 
@@ -2706,7 +2703,7 @@
 
 #endif /* CONFIG_SYSCTL */
 
-static int __init cdrom_init(void)
+static int cdrom_init(void)
 {
        int n_entries = CDROM_MAX_CDROMS / (sizeof(unsigned long) * 8);
 
@@ -2729,5 +2726,4 @@
        devfs_unregister(devfs_handle);
 }
 
-module_init(cdrom_init);
 module_exit(cdrom_exit);

Reply via email to