On Wed, 2009-11-18 at 18:12 +0100, Jan Kiszka wrote:
> This fixes the valid complaint about safe_halt being called with the
> root domain unstalled.

The fix should go to the caller. ipipe_suspend_domain() acts as a
logical barrier: after that point, you may assume that the current
domain is unstalled.

> 
> Signed-off-by: Jan Kiszka <[email protected]>
> ---
>  kernel/ipipe/core.c |    5 ++++-
>  1 files changed, 4 insertions(+), 1 deletions(-)
> 
> Applies to 2.6.31, but is relevant for older kernels as well.
> 
> diff --git a/kernel/ipipe/core.c b/kernel/ipipe/core.c
> index ffaceaa..cd946f3 100644
> --- a/kernel/ipipe/core.c
> +++ b/kernel/ipipe/core.c
> @@ -615,12 +615,13 @@ void ipipe_suspend_domain(void)
>       struct ipipe_domain *this_domain, *next_domain;
>       struct ipipe_percpu_domain_data *p;
>       struct list_head *ln;
> -     unsigned long flags;
> +     unsigned long flags, saved_status;
> 
>       local_irq_save_hw(flags);
> 
>       this_domain = next_domain = __ipipe_current_domain;
>       p = ipipe_cpudom_ptr(this_domain);
> +     saved_status = p->status & ~IPIPE_SYNC_MASK;
>       p->status &= ~(IPIPE_STALL_MASK|IPIPE_SYNC_MASK);
> 
>       if (p->irqpend_himask != 0)
> @@ -654,6 +655,8 @@ sync_stage:
>       }
> 
>       __ipipe_current_domain = this_domain;
> +     p = ipipe_cpudom_ptr(this_domain);
> +     p->status = saved_status;
> 
>       local_irq_restore_hw(flags);
>  }


-- 
Philippe.



_______________________________________________
Adeos-main mailing list
[email protected]
https://mail.gna.org/listinfo/adeos-main

Reply via email to