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

Re: [Xen-devel] [RFC/RFT][PATCH 0 of 3] rework locking in sched_adjust



On Tue, Dec 6, 2011 at 8:38 AM, Juergen Gross
<juergen.gross@xxxxxxxxxxxxxx> wrote:
> (XEN) Xen BUG at spinlock.c:47
[snip]
> (XEN) Xen call trace:
> (XEN)    [<ffff82c480124e84>] check_lock+0x44/0x50
> (XEN)    [<ffff82c480124ec1>] _spin_lock+0x11/0x5d
> (XEN)    [<ffff82c48012c085>] xmem_pool_alloc+0x138/0x4d2
> (XEN)    [<ffff82c48012c557>] _xmalloc+0x138/0x230
> (XEN)    [<ffff82c48012c660>] _xzalloc+0x11/0x2d
> (XEN)    [<ffff82c48011f8ab>] sedf_adjust+0x37c/0x9b2
> (XEN)    [<ffff82c480120fec>] sched_adjust+0x5f/0xb7
> (XEN)    [<ffff82c4801037e3>] do_domctl+0xf32/0x1a9f
> (XEN)    [<ffff82c48021f128>] syscall_enter+0xc8/0x122

Hmm, looks like the problem is that we assert that locks must be
called with IRQs enabled all the time, or never.  From
xen/common/spinlock.c:

     * We partition locks into IRQ-safe (always held with IRQs disabled) and
     * IRQ-unsafe (always held with IRQs enabled) types. The convention for
     * every lock must be consistently observed else we can deadlock in
     * IRQ-context rendezvous functions (a rendezvous which gets every CPU
     * into IRQ context before any CPU is released from the rendezvous).

sedf_adj() grabs the private lock with irqs disabled, then calls
sedf_adjust_weights(), which calls xmalloc to allocate some local
scratch space, which ultimately grabs a non-IRQ spinlock.

Not sure the best thing to do here...

 -George

_______________________________________________
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®.