All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mark Broadbent <markb@wetlettuce.com>
To: Sergey Vlasov <vsu@altlinux.ru>
Cc: "David S. Miller" <davem@davemloft.net>,
	Herbert Xu <herbert@gondor.apana.org.au>,
	netdev@oss.sgi.com
Subject: Re: [PATCH] Tulip interrupt uses non IRQ safe spinlock
Date: Mon, 02 May 2005 13:56:46 +0100	[thread overview]
Message-ID: <4276238E.4060606@wetlettuce.com> (raw)
In-Reply-To: <20050429214336.04b40b3f.vsu@altlinux.ru>

Sergey Vlasov wrote:
> On Fri, 29 Apr 2005 09:35:21 -0700 David S. Miller wrote:
> 
> 
>>Look at most interrupt handlers in the kernel, they use
>>spin_lock_irqsave() rather consistently.  If an interrupt
>>is registered with SA_SHIRQ, this is a requirement.
>>Here is why.
>>
>>On i386 (or any other platform using the generic IRQ layer),
>>for example, unless you specify SA_INTERRUPT at
>>request_irq() time, the handler dispatch is:
>>
>>	local_irq_enable();
>>
>>	for each irq registered {
>>		x->handler();
>>	}
>>	local_irq_disable();
>>
>>(see kernel/irq/handle.c)
>>
>>At the top level from that handle_IRQ_event() function, the
>>IRQ source is ACK'd after those calls.
>>
>>However, if you have multiple devices on that IRQ line, you
>>run into a problem.  Let's say TUlip interrupts first and
>>we go into the Tulip driver and grab the lock, next the other
>>device interrupts and we jump into the Tulip interrupt handler
>>again, we will deadlock but what we should have done is use
>>IRQ disabling spin locking like Mark's fix does.
> 
> 
> If what you wrote above is really correct, this means that
> Documentation/DocBook/kernel-locking.sgml contains wrong information:

See Documentation/spin-locking.txt line 137, this states that
spin_[un]lock() should not be used in IRQ handlers.

>>>>The irq handler does not to use spin_lock_irq(), because the
>>>>softirq cannot run while the irq handler is running: it can use
>>>>spin_lock(), which is slightly faster. The only exception would
>>>>be if a different hardware irq handler uses the same lock:
>>>>spin_lock_irq() will stop that from interrupting us.
> 
> 
> AFAIK, even if interrupts are enabled, the IRQ line which is currently
> handled is disabled in the interrupt controller, therefore the
> interrupt handler cannot be reentered (for the same device instance).
> Did this really change?

As far as I can tell this is the case (disclaimer applies) [see my other
reply to Herbert Xu].

Thanks
Mark

  reply	other threads:[~2005-05-02 12:56 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-04-28 20:42 [PATCH] Tulip interrupt uses non IRQ safe spinlock Mark Broadbent
2005-04-28 21:26 ` Herbert Xu
2005-04-29 16:35   ` David S. Miller
2005-04-29 17:43     ` Sergey Vlasov
2005-05-02 12:56       ` Mark Broadbent [this message]
2005-05-02 21:28         ` Herbert Xu
     [not found]           ` <57556.192.102.214.6.1115108726.squirrel@webmail.wetlettuce.com>
2005-05-03  9:07             ` Herbert Xu
2005-04-29 18:44     ` Francois Romieu
2005-04-29 22:49     ` Herbert Xu
2005-05-02 12:57       ` Mark Broadbent
2005-05-02 21:31         ` Herbert Xu
     [not found]         ` <20050502124358.7186447f.davem@davemloft.net>
2005-05-02 21:32           ` Herbert Xu
2005-05-02 21:32             ` David S. Miller
2005-05-02 21:45               ` Herbert Xu
2005-04-30  0:37 ` Alan Cox
2005-04-30  1:02   ` Herbert Xu
2005-05-02 14:16 ` Paulo Marques
2005-05-28  2:24 ` Jeff Garzik

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4276238E.4060606@wetlettuce.com \
    --to=markb@wetlettuce.com \
    --cc=davem@davemloft.net \
    --cc=herbert@gondor.apana.org.au \
    --cc=netdev@oss.sgi.com \
    --cc=vsu@altlinux.ru \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.