Re: [PATCH] qla2xxx: fix bad locking during eh_abort

Jeff Garzik
2005-05-27T20:42:25Z

James Bottomley wrote:
> On Fri, 2005-05-27 at 16:30 -0400, Jeff Garzik wrote:
>
>>The ha->hardware_lock is obtained without spin_lock_irq(), so that's
>>correct.
>
>
> Yes, that was my confusion
>
> But ... I wish you hadn't pointed it out. Now I look at the driver, the
> ha->hardware_lock is taken at interrupt level (in the interrupt
> routines).
>
> However, this sequence of code:
>
> spin_unlock_irq(ha->host->host_lock);
> spin_lock(&ha->hardware_lock);
>
> Enables interrupts then takes this lock. If we ever get a qla interrupt
> before we drop the ha->hardware_lock again, that will be a classic
> deadlock.

Agreed, this was my analysis as well.

This driver appears to get locking -backwards-:

it uses spin_lock_irqsave() in interrupt handler.
it does not use spin_lock_irqsave() outside interrupt handler.

IMO this is a 2.6.12-rc issue...

Jeff