Messages in this thread | | | Date | Mon, 23 Sep 2002 19:22:18 -0400 | From | Jeff Garzik <> | Subject | Re: Quick aic7xxx bug hunt... |
| |
Justin T. Gibbs wrote: >>>For all of these delays, I'd be more than happy to make them all into >>>sleeps if I can tell, from inside ahc_delay() if I'm in a context where >>>it is safe to sleep. On the other platforms that this core code runs on >>>I'm usually not in a context where it is safe to sleep, so I don't want >>>to switch to using a different driver primitive. >> >>For Linux it's unconditionally safe, and other platforms is sounds like >>it's unconditionally not. So, s/ahc_delay/ahc_sleep/ for the places I >>pointed out, and just make ahc_delay==ahc_sleep on non-Linux platforms >>(or any similarly-functioning solution) > > > So you can sleep while in an interrupt context? I didn't know that > 2.5 had switched to using interrupt threads or some similar construct.
Of course not :)
ahc_reset aic7770_config -> can sleep ahc_pci_config -> can sleep ahc_shutdown -> can't sleep, whoops ahc_resume -> dead code ahc_init aic7770_config -> can sleep ahc_pci_config -> can sleep ahc_acquire_seeprom check_extport -> can sleep ahc_proc_write_seeprom -> can sleep
so, ahc_init and ahc_acquire_seeprom can s/ahc_delay/ahc_sleep/ safely.
Oh, and I found another bug: never use check_region, it's inherently racy. Use request_region and check its return value.
Note I agree with a comment in the code, that wrapping SHT->detect() in io_request_lock is silly... the comment describing the rationale in drivers/scsi/scsi.c is not really accurate...
Jeff
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |