[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH 1/2] xen: allow on_selected_cpus with interrupts disabled



On Fri, 2013-05-03 at 15:58 +0100, Stefano Stabellini wrote:
> Allow on_selected_cpus with interrupts disabled, use it with care.

This is a deadlock waiting to happen. Can we not find a way to do cross
CPU EOI without it? If we can guarantee that we only need to EOI on one
CPU then does that make a specialised SGI vector more plausible?

Can the IPI call not be moved outside the lock? i.e. remove it from the
list under the lock and then IPI outside?

Or could you queue the IRQ on a per-pcpu list of IRQs to EOI and then
outside the lock send an IPI to the other CPU to check the list.

At the least this should assert that he current cpu isn't in the mask
when wait == 1.

> 
> Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
> ---
>  xen/common/smp.c |    7 +++----
>  1 files changed, 3 insertions(+), 4 deletions(-)
> 
> diff --git a/xen/common/smp.c b/xen/common/smp.c
> index dcd93ad..7deb97c 100644
> --- a/xen/common/smp.c
> +++ b/xen/common/smp.c
> @@ -33,10 +33,9 @@ void on_selected_cpus(
>      int wait)
>  {
>      unsigned int nr_cpus;
> +    unsigned long flags;
>  
> -    ASSERT(local_irq_is_enabled());
> -
> -    spin_lock(&call_lock);
> +    spin_lock_irqsave(&call_lock, flags);
>  
>      cpumask_copy(&call_data.selected, selected);
>  
> @@ -54,7 +53,7 @@ void on_selected_cpus(
>          cpu_relax();
>  
>  out:
> -    spin_unlock(&call_lock);
> +    spin_unlock_irqrestore(&call_lock, flags);
>  }
>  
>  void smp_call_function_interrupt(void)



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.