From: "Wang, Baojun" <wangbj@lzu.edu.cn>
To: Josh Boyer <jwboyer@linux.vnet.ibm.com>
Cc: linuxppc-embedded@ozlabs.org
Subject: Re: disable interrput under ppc?
Date: Wed, 5 Sep 2007 10:00:46 +0800 [thread overview]
Message-ID: <389019707.21991@eyou.net> (raw)
Message-ID: <200709051000.46281.wangbj@lzu.edu.cn> (raw)
In-Reply-To: <388931546.05165@lzu.edu.cn>
[-- Attachment #1: Type: text/plain, Size: 3778 bytes --]
On Wednesday 05 September 2007, you wrote:
> On Tue, 4 Sep 2007 13:24:33 -0500
>
> Scott Wood <scottwood@freescale.com> wrote:
> > On Tue, Sep 04, 2007 at 10:44:14AM +0800, Wang, Baojun wrote:
> > > hi, list
> > >
> > > How can I disable interrput like `cli' in x86?
> >
> > local_irq_disable().
> >
> > > I want the following code freeze the box but it doesn't, $MSR is
> > > altered however the box is still alive, how can I freeze the box like
> > > `cli' in x86? Thanks very much!
> >
> > Disabling interrupts doesn't freeze the machine by itself -- it depends
> > on what you do afterwards, which you didn't show.
I need to check whether the interrupt have been disabled already, so I'm
expected after local_irq_disable() ( __asm__ __volatile__ ("wrteei
0": : :"memory) ), the machine is dead but it doesn't.
> If you're using a BOOKE variant, there is a way to use the DBCR0
> register to set debug wait enable or something to basically hang the
> CPU until something external clears that bit. But why you would want
> to do that, I have no idea.
Sorry, I just want to check whether disable_irq/enable_irq is functioning.
> josh
I'm not really getting confused about the following code:
// Executing all pending events
while ((event = get_next_set_bit_and_clear
(pending, xm_root_domain -> events -> masked_events)) != -1) {
// An event pending when there is not any handler installed
// catching it??? it must be an error
//assert (xm_root_domain -> event_handler [event]);
if (!xm_root_domain -> events -> event_handler [event]) continue;
// Before executing an event handler, events' flag is disabled
// and the event is masked
printk(KERN_EMERG"sync_root_events: looping!\n");
set_bit (xm_root_domain -> events -> masked_events, event);
printk(KERN_EMERG"sync_root_events: looping 2!\n");
disable_events_flag (xm_root_domain);
printk(KERN_EMERG"sync_root_events: looping 3!\n");
printk(KERN_EMERG"hw_irq_disabled?: %d\n", hw_irq_disabled());
hw_enable_irq ();
printk(KERN_EMERG"sync_root_events: looping 4!\n");
// Here, the event handler is executed always
// with the same conditions, that is, event flag disabled
// and the executed event masked as well
(*xm_root_domain -> events -> event_handler[event])
(event, regs);
printk(KERN_EMERG"sync_root_events: looping 5!\n");
hw_disable_irq();
printk(KERN_EMERG"sync_root_events: looping 6!\n");
// Events flag is automatically enabled (iret emulation)
enable_events_flag (xm_root_domain);
}
hw_enable_irq() and hw_disable_irq() is exactly the same as
local_irq_enable()/local_irq_disable(), but the output shows while running
hw_eable_irq() (at that point irq is disabled), the rest of the code is
blocked, and I don't know why:
output:
[ 172.049381] sync_root_events: looping!
[ 172.053159] sync_root_events: looping 2!
[ 172.057094] sync_root_events: looping 3!
[ 172.061027] hw_irq_disabled?: 1
[ 172.997338] sync_root_events: looping!
[ 173.001095] sync_root_events: looping 2!
[ 173.005028] sync_root_events: looping 3!
[ 173.008961] hw_irq_disabled?: 1
I'm sorry If I'm asking a bad question, I'm not familiar with ppc/kernel
programming at this moment. Great thanks to Scott and josh for your reply.
Regards,
Wang
--
Wang, Baojun Lanzhou University
Distributed & Embedded System Lab http://dslab.lzu.edu.cn
School of Information Science and Engeneering wangbj@lzu.edu.cn
Tianshui South Road 222. Lanzhou 730000 .P.R.China
Tel:+86-931-8912025 Fax:+86-931-8912022
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 189 bytes --]
next prev parent reply other threads:[~2007-09-05 2:00 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <200709041044.16525.wangbj@lzu.edu.cn>
2007-09-04 2:44 ` disable interrput under ppc? Wang, Baojun
2007-09-04 18:24 ` Scott Wood
2007-09-04 18:37 ` Josh Boyer
[not found] ` <388931546.05165@lzu.edu.cn>
[not found] ` <200709051000.46281.wangbj@lzu.edu.cn>
2007-09-05 2:00 ` Wang, Baojun [this message]
2007-09-05 16:31 ` Scott Wood
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=389019707.21991@eyou.net \
--to=wangbj@lzu.edu.cn \
--cc=jwboyer@linux.vnet.ibm.com \
--cc=linuxppc-embedded@ozlabs.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).