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

[Xen-devel] Re: xenstored unsafe lock order detected, xlate_proc_name, evtchn_ioctl, port_user_lock



On Sun, Jun 06, 2010 at 10:41:04AM -0700, Jeremy Fitzhardinge wrote:
> On 06/06/2010 10:33 AM, Pasi Kärkkäinen wrote:
> > Hello,
> >
> > I just tried the latest xen/stable-2.6.32.x kernel, ie. 2.6.32.15, with Xen 
> > 4.0.0,
> > and I got this:
> >
> > http://pasik.reaktio.net/xen/pv_ops-dom0-debug/log-2.6.32.15-pvops-dom0-xen-stable-x86_64.txt
> >   
> 
> Does this help?
> 

It gave failing hunks so I had to manually apply it to 2.6.32.15, 
but it seems to fix that issue. No "unsafe lock order" messages anymore.

Thanks!

-- Pasi

> From 3f5e554f669098c84c82ce75e7577f7e0f3fccde Mon Sep 17 00:00:00 2001
> From: Jeremy Fitzhardinge <jeremy.fitzhardinge@xxxxxxxxxx>
> Date: Fri, 28 May 2010 15:28:27 -0700
> Subject: [PATCH] xen/evtchn: don't do unbind_from_irqhandler under spinlock
> 
> unbind_from_irqhandler can end up doing /proc operations, which can't
> happen under a spinlock.  So before removing the IRQ handler,
> disable the irq under the port_user lock (masking the underlying event
> channel and making sure the irq handler isn't running concurrently and
> won't start running), then remove the handler without the lock.
> 
> Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@xxxxxxxxxx>
> 
> diff --git a/drivers/xen/evtchn.c b/drivers/xen/evtchn.c
> index f79ac5c..6a3a129 100644
> --- a/drivers/xen/evtchn.c
> +++ b/drivers/xen/evtchn.c
> @@ -375,10 +375,12 @@ static long evtchn_ioctl(struct file *file,
>                       break;
>               }
>  
> -             evtchn_unbind_from_user(u, unbind.port);
> +             disable_irq(irq_from_evtchn(unbind.port));
>  
>               spin_unlock_irq(&port_user_lock);
>  
> +             evtchn_unbind_from_user(u, unbind.port);
> +
>               rc = 0;
>               break;
>       }
> @@ -484,11 +486,18 @@ static int evtchn_release(struct inode *inode, struct 
> file *filp)
>               if (get_port_user(i) != u)
>                       continue;
>  
> -             evtchn_unbind_from_user(get_port_user(i), i);
> +             disable_irq(irq_from_evtchn(i));
>       }
>  
>       spin_unlock_irq(&port_user_lock);
>  
> +     for (i = 0; i < NR_EVENT_CHANNELS; i++) {
> +             if (get_port_user(i) != u)
> +                     continue;
> +
> +             evtchn_unbind_from_user(get_port_user(i), i);
> +     }
> +
>       kfree(u->name);
>       kfree(u);
>  
> 
> 

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

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