Messages in this thread |  | | Date | Sat, 14 Oct 2000 02:40:06 -0700 | From | "David S. Miller" <> | Subject | Re: [PATCH] Fix SCSI proc oops |
| |
Date: Sat, 14 Oct 2000 11:43:09 +0200 From: Torben Mathiasen <torben@kernel.dk>
David, why is tpnt->proc_name NULL on sparc for devices not existing? Every driver has this as part of their tpnt struct, so it doesn't matter if the underlying device really exists.
In the mentioned case it would be NULL on all architectures, not just Sparc ;-) (it happens on ix86 too, ix86 is different only because it does not trap kernel NULL pointer derefences during bootup for some odd reason)
Here is what happens:
scsi_register_host() tpnt->present = tpnt->detect(tpnt); /* tpnt->present is zero since no such adapters were found */
If no hosts are detected the driver is under no obligation to initialize the tpnt->proc_name field. For example, sym53c8xx.c:sym53c8xx_detect() does not if PCI is not present and this is the specific case hit on my SBUS-only workstation :-)
Subsequently scsi_unregister_host() is called for this TPNT and this is where the NULL pointer is hit.
If you included this same driver on x86 and ran that kernel on an x86 machine without PCI, the NULL pointer would occur there too. (it just wouldn't oops on ix86, because, for the millionth time :->, x86 does not trap kernel NULL pointer derefences which occur during early bootup)
If we want to create the requirement that XXX_detect() in a scsi driver must initialize tpnt->proc_name to a non-NULL value no matter what when it is invoked, that would be a seperate issue.
Later, David S. Miller davem@redhat.com
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/
|  |