From: George Anzinger <george@mvista.com>
To: Manfred Spraul <manfred@colorfullife.com>
Cc: Andrea Arcangeli <andrea@suse.de>,
Zwane Mwaikambo <zwane@arm.linux.org.uk>,
Lee Revell <rlrevell@joe-job.com>,
dipankar@in.ibm.com, ganzinger@mvista.com,
lkml <linux-kernel@vger.kernel.org>
Subject: Re: RCU question
Date: Sun, 12 Dec 2004 08:51:41 -0800 [thread overview]
Message-ID: <41BC771D.6020506@mvista.com> (raw)
In-Reply-To: <41BC1BF9.70701@colorfullife.com>
Manfred Spraul wrote:
> Andrea Arcangeli wrote:
>
>> On Sun, Dec 12, 2004 at 09:59:00AM +0100, Manfred Spraul wrote:
>>
>>
>>> It means that our NMI irq return path should check if it points to a
>>> hlt instruction and if yes, then increase the saved EIP by one before
>>> doing the iretd, right?
>>>
>>
>>
>> I don't think we'll ever post any event through nmi, so it doesn't
>> matter. We only care to be waken by real irqs, not nmi/smi. Idle loop is
>> fine to ignore the actions of the nmi handlers and to hang into the
>> "hlt".
>>
>>
> No, You misunderstood the problem:
>
> sti
> ** NMI handler
> ** normal interrupt arrives, is queued by the cpu
> ** irqd from NMI handler
> ** cpu notices the normal interrupt, handles it.
> ** normal interrupt does a wakeup, schedules a tasklet, whatever
I think you are forgetting that the system does the full context switch from the
interrupt handler (well, actually from entry.S) and does not do the irqd until
it is time to go back to the idle thread (i.e. there is nothing left to do), so..
> ** irqd from normal interupt
> hlt << cpu sleeps.
What we loose here is that idle does not go around its little loop again. If an
interrupt becomes pending on the way to the hlt, i.e. while entry.S has
interrupts masked and is doing the irqd, it will be handled prior to the hlt so
we could loose several of these idle loop spins, until no interrupt is pending
allowing the hlt to be executed. On the next interrupt/irqd the hlt will exit.
So what is lost is one or more spins round the idle loop.
The "normal" idle loop just looks at the need_resched flag and goes right back
to the hlt, however, idle, it self, never sets this flag, only interrupt code
can set it at this point, and the interrupt exit takes action to clear it so I
don't see it every being found set in the idle loop (I suppose one could do a
test to see if it is ever found set here), so, in theory, the net effect should
be nill.
Did I miss something?
--
George Anzinger george@mvista.com
High-res-timers: http://sourceforge.net/projects/high-res-timers/
next prev parent reply other threads:[~2004-12-12 16:51 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-12-09 23:59 RCU question George Anzinger
2004-12-10 4:31 ` Dipankar Sarma
2004-12-10 19:42 ` George Anzinger
2004-12-10 20:40 ` Dipankar Sarma
2004-12-10 20:45 ` Lee Revell
2004-12-10 21:02 ` George Anzinger
2004-12-10 22:58 ` Zwane Mwaikambo
2004-12-11 2:22 ` George Anzinger
2004-12-11 2:45 ` Zwane Mwaikambo
2004-12-11 3:29 ` George Anzinger
2004-12-11 14:52 ` Zwane Mwaikambo
2004-12-11 16:32 ` Manfred Spraul
2004-12-11 16:52 ` George Anzinger
2004-12-12 2:53 ` Zwane Mwaikambo
2004-12-12 8:59 ` Manfred Spraul
2004-12-12 9:37 ` Andrea Arcangeli
2004-12-12 10:22 ` Manfred Spraul
2004-12-12 12:15 ` Andrea Arcangeli
2004-12-14 21:40 ` Lee Revell
2004-12-14 22:23 ` [patch, 2.6.10-rc3] safe_hlt() & NMIs Ingo Molnar
2004-12-14 22:47 ` Ingo Molnar
2004-12-14 23:09 ` Linus Torvalds
2004-12-15 8:52 ` Ingo Molnar
2004-12-15 15:44 ` Linus Torvalds
2004-12-15 16:35 ` Ingo Molnar
2004-12-16 0:37 ` Alan Cox
2004-12-16 1:58 ` Linus Torvalds
2004-12-16 14:51 ` Ingo Molnar
2004-12-16 15:08 ` Maciej W. Rozycki
2004-12-16 15:11 ` Ingo Molnar
2004-12-16 15:42 ` Maciej W. Rozycki
2004-12-16 15:54 ` Linus Torvalds
2004-12-16 2:10 ` Zwane Mwaikambo
2004-12-16 13:26 ` Alan Cox
2004-12-14 23:41 ` Andrea Arcangeli
2004-12-14 23:00 ` Linus Torvalds
2004-12-15 5:04 ` Andi Kleen
2004-12-15 6:27 ` Avi Kivity
2004-12-15 8:51 ` Ingo Molnar
2004-12-12 16:51 ` George Anzinger [this message]
2004-12-12 22:40 ` RCU question Manfred Spraul
2004-12-13 5:22 ` George Anzinger
2004-12-12 16:26 ` Zwane Mwaikambo
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=41BC771D.6020506@mvista.com \
--to=george@mvista.com \
--cc=andrea@suse.de \
--cc=dipankar@in.ibm.com \
--cc=ganzinger@mvista.com \
--cc=linux-kernel@vger.kernel.org \
--cc=manfred@colorfullife.com \
--cc=rlrevell@joe-job.com \
--cc=zwane@arm.linux.org.uk \
/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