From: Alex Zeffertt <ajz@cambridgebroadband.com>
To: Scott Wood <scottwood@freescale.com>, linuxppc-embedded@ozlabs.org
Subject: Re: local_irq_save not masking interrupts
Date: Tue, 26 Sep 2006 17:17:26 +0100 [thread overview]
Message-ID: <45195296.8000405@cambridgebroadband.com> (raw)
In-Reply-To: <45194F1F.7030003@freescale.com>
Hi Scott,
Thanks for your reply. Comments below.
Scott Wood wrote:
> Alex Zeffertt wrote:
>> Well, mpc832xemds_phy_interrupt_enable() does nothing except call
>> request_irq(,,SA_SHIRQ,,). I suspect that request_irq() is somehow
>> reenabling interrupts, but I can't see where it might be doing so.
>
> One possibile way (in 2.6.18; I'm assuming 2.6.11 is similar) is that
> request_irq() calls setup_irq(), which calls register_irq_proc() and
> register_handler_proc(), both of which call proc_mkdir(), which
> eventually calls proc_create(), which calls kmalloc() with GFP_KERNEL.
> This is probably a bug, since request_irq itself uses GFP_ATOMIC,
> indicating an intent for request_irq() to be safely callable in atomic
> context.
>
I agree this indicates an intent to make it atomic, but I don't see how
this could cause interrupts to become re-enabled during the request_irq()
call. Also, since I am calling request_irq at insmod time, i.e. in process
context, both GFP_ flags *should* work.
> Can you disable the interrupts at the device level until the handler is
> in place, and thus avoid the need to disable IRQs at all?
>
> -Scott
Yup, I've come to the same conclusion. I now, for each shared interrupt:
* initialise all the devices which share the interrupt, turning interrupt generation off
* register all handlers for each device which shares the interrupt
* turn interrupt generation back on for each device.
This avoids the original problem, but it does not explain it. I still
can't see how I can get an interrupt on line 3 below:
1. local_irq_save(flags);
2. request_irq(MPC83xx_IRQ_EXT6, handler, SA_SHIRQ, "name", dev1);
3.
4. request_irq(MPC83xx_IRQ_EXT6, handler, SA_SHIRQ, "name", dev2);
5 local_irq_restore(flags);
Regards,
Alex
next prev parent reply other threads:[~2006-09-26 16:17 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-09-26 10:00 local_irq_save not masking interrupts Alex Zeffertt
2006-09-26 10:19 ` Liu Dave-r63238
2006-09-26 10:28 ` Alex Zeffertt
2006-09-26 16:02 ` Scott Wood
2006-09-26 16:17 ` Alex Zeffertt [this message]
2006-09-26 16:27 ` Scott Wood
2006-09-26 16:42 ` Alex Zeffertt
2006-09-26 16:52 ` Scott Wood
2006-09-27 16:52 ` Esben Nielsen
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=45195296.8000405@cambridgebroadband.com \
--to=ajz@cambridgebroadband.com \
--cc=linuxppc-embedded@ozlabs.org \
--cc=scottwood@freescale.com \
/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.