lkml.org 
[lkml]   [2008]   [Aug]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: invalidate caches before going into suspend

* Mark Langsdorf <mark.langsdorf@amd.com> wrote:

> > to make sure the compiler doesnt ever insert something into this
> > codepath? [ And note the double cli which would be further
> > robustification - in theory we could get a spurious interrupt
> > straight after the wbinvd. ] Hm?
>
> I don't think it's necessary. I can submit a delta patch later if you
> think it's really necessary.

this sequence:

> diff -r 1e74a821dd00 arch/x86/kernel/process_32.c
> --- a/arch/x86/kernel/process_32.c Tue Aug 12 12:04:12 2008 -0500
> +++ b/arch/x86/kernel/process_32.c Wed Aug 13 06:40:00 2008 -0500
> @@ -95,11 +95,11 @@ static inline void play_dead(void)
> {
> /* This must be done before dead CPU ack */
> cpu_exit_clear();
> - wbinvd();
> mb();
> /* Ack it */
> __get_cpu_var(cpu_state) = CPU_DEAD;
>
> + wbinvd();
> /*
> * With physical CPU hotplug, we should halt the cpu
> */

is still unsafe somewhat, as the cli only comes afterwards:

local_irq_disable();
while (1)
halt();
so there's a small race open for some stray irq to come before the CLI.

Also, any of the primitives could be instrumented in theory and more
code could be inserted - it's really the best approach to unify them
into a single primitive, like the wbinvd_halt() API i suggested in the
previous mail.

And it deserves a few comments as well.

Ingo


\
 
 \ /
  Last update: 2008-08-13 19:41    [from the cache]
©2003-2011 Jasper Spaans