[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [Xen-devel] [PATCH 1/2, v2] x86: replace nr_irqs sized per-domain arrays with radix trees
> From: Jan Beulich [mailto:JBeulich@xxxxxxxxxx] > Subject: Re: [Xen-devel] [PATCH 1/2, v2] x86: replace nr_irqs sized > per-domain arrays with radix trees > > >>> On 03.05.11 at 23:08, Keir Fraser <keir@xxxxxxx> wrote: > > On 03/05/2011 15:08, "Jan Beulich" <JBeulich@xxxxxxxxxx> wrote: > > > >> It would seem possible to fold the two trees into one (making e.g. > the > >> emuirq bits stored in the upper half of the pointer), but I'm not > >> certain that's worth it as it would make deletion of entries more > >> cumbersome. Unless pirq-s and emuirq-s were mutually exclusive... > >> > >> v2: Split setup/teardown into two stages - (de-)allocation (tree > node > >> (de-)population) is done with just d->event_lock held (and hence > >> interrupts enabled), while actual insertion/removal of translation > data > >> gets done with irq_desc's lock held (and interrupts disabled). > > > > This is mostly okay, because the only operations that occur with irqs > > disabled are read-only on the radix-rtree structure itself, hence no > > alloc/dealloc will happen. *However* those calls to > > radix_tree_lookup[_slot]() are not synchronised wrt your calls to > > radix_tree_{insert,delete}(). The latter hold d->event_lock, while > the > > former do not. Hence you need RCU and you need a new first patch in > your > > patch set to pull in a modern radix-tree.[ch] from upstream Linux. > > Right you are - I didn't pay attention to the tree internal nodes. > Will take a few days though before I can get to this. Jan, Keir -- If either of you are working on radix-tree.c in Xen, this lkml post explains how the Xen version differs from the Linux upstream version and (for tmem) why: https://lkml.org/lkml/2010/12/7/294 After some offlist discussion, for kztmem (later renamed "the new zcache"), I ended up extracting the essence of the radix-tree data structure and adapting it inline specifically for my in-kernel tmem needs. While I'm not a fan of duplicating code, this was an expedient way to avoid a political quagmire. Ideally, the Xen radix-tree.c would support both needs through some kind of layering, but if your preference is to go to the upstream Linux radix-tree.c, I can probably leverage my inlined-radix-tree code into Xen tmem.c. I don't expect it will be trivial though. Thanks, Dan P.S. In case you are curious about looking at the end result for tmem in Linux, see https://lkml.org/lkml/2010/12/7/294 and search (case-insensitive) for instances of "objnode"... I'm sure you'll see the resemblance to radix-tree.c. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |