Calling request_firmware under the spinlocks in file advansys.c
Hi,
In the file drivers/scsi/advansys.c we are calling function AdvISR at 2 instances [in the function advansys_reset and advansys_interrupt] while holding spinlock. Function AdvISR eventually calls request_firmware following this sequence of routines:
AdvISR -> adv_async_callback -> AdvResetChipAndSB -> AdvInitAsc3550Driver -> request_firmware
According to the definition of request_firmware it should be called from user context where sleeping is allowed. And usually sleeping under the spin lock is not allowed. Is it really necessary to call AdvISR under spinlocks here? Are we taking care of sleeping related concern of request_firmware or am I overlooking something here?
Thank you.
Signature · 1 line
Vaishali
Quoted 7 lines · Vaishali Thakkar
Hi,
In the file
drivers/scsi/advansys.cwe are calling function AdvISR at 2 instances [in the functionadvansys_resetandadvansys_interrupt] while holding spinlock. Function AdvISR eventually callsrequest_firmwarefollowing this sequence of routines:
Quoted 8 lines
AdvISR ->
adv_async_callback-> AdvResetChipAndSB -> AdvInitAsc3550Driver ->request_firmwareAccording to the definition of
request_firmwareit should be called from user context where sleeping is allowed. And usually sleeping under the spin lock is not allowed. Is it really necessary to call AdvISR under spinlocks here? Are we taking care of sleeping related concern ofrequest_firmwareor am I overlooking something here?
Hi,
Any comments on this?
Thanks
Quoted 2 lines
Thank you.
Signature · 1 line
Vaishali
Quoted 19 lines · Vaishali Thakkar
Quoted 7 lines · Vaishali Thakkar
Hi,
In the file
drivers/scsi/advansys.cwe are calling function AdvISR at 2 instances [in the functionadvansys_resetandadvansys_interrupt] while holding spinlock. Function AdvISR eventually callsrequest_firmwarefollowing this sequence of routines:Quoted 8 lines
AdvISR ->
adv_async_callback-> AdvResetChipAndSB -> AdvInitAsc3550Driver ->request_firmwareAccording to the definition of
request_firmwareit should be called from user context where sleeping is allowed. And usually sleeping under the spin lock is not allowed. Is it really necessary to call AdvISR under spinlocks here? Are we taking care of sleeping related concern ofrequest_firmwareor am I overlooking something here?
Quoted 4 lines
Hi,
Any comments on this?
AdvISR is the main interrupt handling routine, for which we definitely will want to have interupts disabled. Plus the SCSI parallel drivers (ab-) use the interrupt routine to do all sorts of things, and are thereby well versed to keep interrupts disabled for an extented amount of time.
However, we don't really have a good way of handling a request firmware here; we probably would need to implement a workqueue to handle this properly ...
Cheers,
Hannes
Signature · 5 lines
Dr. Hannes Reinecke Teamlead Storage & Networking [email protected] +49 911 74053 688 SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton HRB 21284 (AG Nürnberg)