Mailing List Archive

Re: [RFC/RFT][PATCH 0 of 3] rework locking in sched_adjust
On 12/06/2011 01:30 PM, George Dunlap wrote:
> On Tue, Dec 6, 2011 at 8:38 AM, Juergen Gross
> <juergen.gross@ts.fujitsu.com> 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...
sedf_adjust_weights() is called only from sedf_adj(). The easiest solution
would be to xmalloc the scratch space in sedf_adj() before grabbing the lock
and passing the xmalloced area to sedf_adjust_weights().


Juergen

--
Juergen Gross Principal Developer Operating Systems
PDG ES&S SWE OS6 Telephone: +49 (0) 89 3222 2967
Fujitsu Technology Solutions e-mail: juergen.gross@ts.fujitsu.com
Domagkstr. 28 Internet: ts.fujitsu.com
D-80807 Muenchen Company details: ts.fujitsu.com/imprint.html


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
Re: [RFC/RFT][PATCH 0 of 3] rework locking in sched_adjust [ In reply to ]
On Tue, Dec 6, 2011 at 1:39 PM, Juergen Gross
<juergen.gross@ts.fujitsu.com> wrote:
> sedf_adjust_weights() is called only from sedf_adj(). The easiest solution
> would be to xmalloc the scratch space in sedf_adj() before grabbing the lock
> and passing the xmalloced area to sedf_adjust_weights().
>
Done, and it seems to be working... It might be a bit weird to read,
but I couldn't
find any other equally easy and effective solution so.

Thanks a lot and Regards,
Dario

--
<<This happens because I choose it to happen!>> (Raistlin Majere)
----------------------------------------------------------------------
Dario Faggioli, http://retis.sssup.it/people/faggioli
Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK)
PhD Candidate, ReTiS Lab, Scuola Superiore Sant'Anna, Pisa  (Italy)

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