* [PATCH] 2.4.28 - AIC driver causes kernel corruption (as a module)
@ 2005-01-11 19:24 Mark Bellon
2005-01-11 19:48 ` James Bottomley
0 siblings, 1 reply; 3+ messages in thread
From: Mark Bellon @ 2005-01-11 19:24 UTC (permalink / raw)
To: linux-scsi
[-- Attachment #1: Type: text/plain, Size: 454 bytes --]
Didn't see a patch for this and the problem is in the 2.4.28 sources.
The scsi_register_module call from within ah[cd]_linux_init causes the
detect routine to be called. The detect routine calls
ah[cd]_linux_pci_init which does a pci_register_driver call. If no
hardware is found in the detect routine, ah[cd]_linux_init will exit
without calling pci_unregister_driver leaving the kernel with pointers
to a driver that never really loaded.
mark
[-- Attachment #2: scsi-patch --]
[-- Type: text/plain, Size: 1564 bytes --]
Index: drivers/scsi/aic7xxx/aic79xx_osm.c
===================================================================
RCS file: /cvsdev/mvl-kernel/linux/drivers/scsi/aic7xxx/aic79xx_osm.c,v
retrieving revision 1.2.4.2.12.4
diff -a -u -r1.2.4.2.12.4 aic79xx_osm.c
--- drivers/scsi/aic7xxx/aic79xx_osm.c 12 Feb 2004 15:33:49 -0000 1.2.4.2.12.4
+++ drivers/scsi/aic7xxx/aic79xx_osm.c 11 Jan 2005 18:46:42 -0000
@@ -5079,6 +5079,8 @@
}
}
+static void ahd_linux_exit(void);
+
static int __init
ahd_linux_init(void)
{
@@ -5087,8 +5089,7 @@
#else
scsi_register_module(MODULE_SCSI_HA, &aic79xx_driver_template);
if (aic79xx_driver_template.present == 0) {
- scsi_unregister_module(MODULE_SCSI_HA,
- &aic79xx_driver_template);
+ ahd_linux_exit();
return (-ENODEV);
}
Index: drivers/scsi/aic7xxx/aic7xxx_osm.c
===================================================================
RCS file: /cvsdev/mvl-kernel/linux/drivers/scsi/aic7xxx/aic7xxx_osm.c,v
retrieving revision 1.2.4.2.12.3
diff -a -u -r1.2.4.2.12.3 aic7xxx_osm.c
--- drivers/scsi/aic7xxx/aic7xxx_osm.c 12 Feb 2004 15:33:49 -0000 1.2.4.2.12.3
+++ drivers/scsi/aic7xxx/aic7xxx_osm.c 11 Jan 2005 18:46:43 -0000
@@ -5077,6 +5077,8 @@
}
}
+static void ahc_linux_exit(void);
+
static int __init
ahc_linux_init(void)
{
@@ -5085,8 +5087,7 @@
#else
scsi_register_module(MODULE_SCSI_HA, &aic7xxx_driver_template);
if (aic7xxx_driver_template.present == 0) {
- scsi_unregister_module(MODULE_SCSI_HA,
- &aic7xxx_driver_template);
+ ahc_linux_exit();
return (-ENODEV);
}
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] 2.4.28 - AIC driver causes kernel corruption (as a module)
2005-01-11 19:24 [PATCH] 2.4.28 - AIC driver causes kernel corruption (as a module) Mark Bellon
@ 2005-01-11 19:48 ` James Bottomley
2005-01-11 20:19 ` Mark Bellon
0 siblings, 1 reply; 3+ messages in thread
From: James Bottomley @ 2005-01-11 19:48 UTC (permalink / raw)
To: Mark Bellon; +Cc: SCSI Mailing List
On Tue, 2005-01-11 at 12:24 -0700, Mark Bellon wrote:
> - scsi_unregister_module(MODULE_SCSI_HA,
> - &aic79xx_driver_template);
> + ahd_linux_exit();
Well, this is pretty much identical to the 2.6 fix for the same problem
except that you forgot to remove the __exit designation from ah
[cd]_linux_exit(). This is required to prevent hanging pointer
references.
James
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] 2.4.28 - AIC driver causes kernel corruption (as a module)
2005-01-11 19:48 ` James Bottomley
@ 2005-01-11 20:19 ` Mark Bellon
0 siblings, 0 replies; 3+ messages in thread
From: Mark Bellon @ 2005-01-11 20:19 UTC (permalink / raw)
Cc: SCSI Mailing List
[-- Attachment #1: Type: text/plain, Size: 497 bytes --]
James Bottomley wrote:
>On Tue, 2005-01-11 at 12:24 -0700, Mark Bellon wrote:
>
>
>>- scsi_unregister_module(MODULE_SCSI_HA,
>>- &aic79xx_driver_template);
>>+ ahd_linux_exit();
>>
>>
>
>Well, this is pretty much identical to the 2.6 fix for the same problem
>except that you forgot to remove the __exit designation from ah
>[cd]_linux_exit(). This is required to prevent hanging pointer
>references.
>
>James
>
>
>
>
Ah! Very true, very true. Updated patch attached.
mark
[-- Attachment #2: scsi-patch --]
[-- Type: text/plain, Size: 1800 bytes --]
Index: drivers/scsi/aic7xxx/aic79xx_osm.c
===================================================================
RCS file: /cvsdev/mvl-kernel/linux/drivers/scsi/aic7xxx/aic79xx_osm.c,v
retrieving revision 1.2.4.2.12.4
diff -a -u -r1.2.4.2.12.4 aic79xx_osm.c
--- drivers/scsi/aic7xxx/aic79xx_osm.c 12 Feb 2004 15:33:49 -0000 1.2.4.2.12.4
+++ drivers/scsi/aic7xxx/aic79xx_osm.c 11 Jan 2005 19:53:02 -0000
@@ -5079,6 +5079,8 @@
}
}
+static void ahd_linux_exit(void);
+
static int __init
ahd_linux_init(void)
{
@@ -5087,8 +5089,7 @@
#else
scsi_register_module(MODULE_SCSI_HA, &aic79xx_driver_template);
if (aic79xx_driver_template.present == 0) {
- scsi_unregister_module(MODULE_SCSI_HA,
- &aic79xx_driver_template);
+ ahd_linux_exit();
return (-ENODEV);
}
@@ -5096,7 +5097,7 @@
#endif
}
-static void __exit
+static void
ahd_linux_exit(void)
{
struct ahd_softc *ahd;
Index: drivers/scsi/aic7xxx/aic7xxx_osm.c
===================================================================
RCS file: /cvsdev/mvl-kernel/linux/drivers/scsi/aic7xxx/aic7xxx_osm.c,v
retrieving revision 1.2.4.2.12.3
diff -a -u -r1.2.4.2.12.3 aic7xxx_osm.c
--- drivers/scsi/aic7xxx/aic7xxx_osm.c 12 Feb 2004 15:33:49 -0000 1.2.4.2.12.3
+++ drivers/scsi/aic7xxx/aic7xxx_osm.c 11 Jan 2005 19:53:08 -0000
@@ -5077,6 +5077,8 @@
}
}
+static void ahc_linux_exit(void);
+
static int __init
ahc_linux_init(void)
{
@@ -5085,8 +5087,7 @@
#else
scsi_register_module(MODULE_SCSI_HA, &aic7xxx_driver_template);
if (aic7xxx_driver_template.present == 0) {
- scsi_unregister_module(MODULE_SCSI_HA,
- &aic7xxx_driver_template);
+ ahc_linux_exit();
return (-ENODEV);
}
@@ -5094,7 +5095,7 @@
#endif
}
-static void __exit
+static void
ahc_linux_exit(void)
{
struct ahc_softc *ahc;
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2005-01-11 20:19 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-01-11 19:24 [PATCH] 2.4.28 - AIC driver causes kernel corruption (as a module) Mark Bellon
2005-01-11 19:48 ` James Bottomley
2005-01-11 20:19 ` Mark Bellon
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox