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);