On SMP boxes I am seeing panics in the following code fragment, 
from scsi.c in the function scsi_do_cmd.  

The SCSI_SLEEP macro has a in_interrupt() detection call which hits. 

   while (SCSI_BLOCK((Scsi_Device *) NULL, host)) {
        spin_unlock(&io_request_lock);      /* FIXME!!! */
        SCSI_SLEEP(&host->host_wait, SCSI_BLOCK((Scsi_Device *) NULL, host));
        spin_lock_irq(&io_request_lock);    /* FIXME!!! */
    }

This comment is above that code...

    /*
     * We must prevent reentrancy to the lowlevel host driver.  This prevents
     * it - we enter a loop until the host we want to talk to is not busy.
     * Race conditions are prevented, as interrupts are disabled in between the
     * time we check for the host being not busy, and the time we mark it busy
     * ourselves.
     */

What I'd like to know is why the FIXME statements were put in this
code and why are the spin_unlock/spin_lock_irq calls not symetrical in
their use.

-- 
Mark Veteikis     [EMAIL PROTECTED]         1-214-654-5257
Interphase Corp.  13800 Senlac Dallas Tx. 75234

-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [EMAIL PROTECTED]

Reply via email to