Subject: spin locks and timers in scsi hba driver

Hi List,

I want to make sure that my hba-driver timers do run
when the uppar scsi-layer calls any of the error handler entry points
and while I am still doing the error handling. As I know, scsi-layer
calls spin_lock_irqsave(&io_request_lock, flags) before calling the
error handlers and they call spin_unlock_irqrestore(&io_request_lock, flags)
after returning from the error handlers. So, inside the error handlers,
I call spin_unlock_irq(&io_request_lock); wait for the timers to run,
and the again call spin_lock_irq(&io_request_lock).

But this does not seem to be working. Even after I call
spin_unlock_irq(&io_request_lock), I don't see my timer routines getting
called.
Can somebody advise me on how to achive this ? I cannot use
spin_unlock_irqrestore() as I do not have the saved 'flags' value.

TIA.
-hiren


2001-10-15 22:10:42

by Arjan van de Ven

[permalink] [raw]
Subject: Re: spin locks and timers in scsi hba driver

In article <[email protected]> you wrote:
> Hi List,

> I want to make sure that my hba-driver timers do run
> when the uppar scsi-layer calls any of the error handler entry points
> and while I am still doing the error handling. As I know, scsi-layer
> calls spin_lock_irqsave(&io_request_lock, flags) before calling the
> error handlers and they call spin_unlock_irqrestore(&io_request_lock, flags)
> after returning from the error handlers. So, inside the error handlers,
> I call spin_unlock_irq(&io_request_lock); wait for the timers to run,
> and the again call spin_lock_irq(&io_request_lock).

well interrupts are still disabled...
Could you give an URL to the source of your driver so that I and others can
see what you really are trying to do ?

Greetings,
Arjan van de Ven

Subject: RE: spin locks and timers in scsi hba driver

Well, I thought spin_unlock_irq() is supposed to enable all maskable
interrupts
by setting IF flag in the EFLAGS register which gets cleared by
local_irq_save().
I understand that spin_unlock_irq does not restore all the flags. But it
atleast sets the IF flag which enables the interrupt. I believe that this
is atleast true in case of intel x86 arch. We have not made our sources
open-source yet. So I cannot give out the sources. Sorry.

Thanks and regards,
-hiren

-----Original Message-----
From: [email protected] [mailto:[email protected]]
Sent: Monday, October 15, 2001 3:11 PM
To: [email protected]
Cc: [email protected]
Subject: Re: spin locks and timers in scsi hba driver


In article <[email protected]>
you wrote:
> Hi List,

> I want to make sure that my hba-driver timers do run
> when the uppar scsi-layer calls any of the error handler entry points
> and while I am still doing the error handling. As I know, scsi-layer
> calls spin_lock_irqsave(&io_request_lock, flags) before calling the
> error handlers and they call spin_unlock_irqrestore(&io_request_lock,
flags)
> after returning from the error handlers. So, inside the error handlers,
> I call spin_unlock_irq(&io_request_lock); wait for the timers to run,
> and the again call spin_lock_irq(&io_request_lock).

well interrupts are still disabled...
Could you give an URL to the source of your driver so that I and others can
see what you really are trying to do ?

Greetings,
Arjan van de Ven

2001-10-16 06:52:09

by Arjan van de Ven

[permalink] [raw]
Subject: Re: spin locks and timers in scsi hba driver

On Mon, Oct 15, 2001 at 04:44:44PM -0600, MEHTA,HIREN (A-SanJose,ex1) wrote:
> is atleast true in case of intel x86 arch. We have not made our sources
> open-source yet. So I cannot give out the sources. Sorry.

Then I ask you to consider buying developer support from one of the linux
companies instead of using this open source forum for questions....