Messages in this thread | | | Date | Sat, 03 Jan 2009 15:59:40 +0100 | From | Manfred Spraul <> | Subject | Re: [RFC, PATCH] kernel/rcu: add kfree_rcu |
| |
Paul E. McKenney wrote: > I would suggest instead using the bottom bit to differentiate between > these two cases, especially given that your approach makes it impossible > for callback processing to notice a NULL function pointer. In addition, > this approach would allow different types of allocators to be specified > should this later prove to be helpful. You should not have to shift the > offset because the rcu_head offset should always be a multiple of four > (or eight on 64-bit architectures). > We must be careful: rcu_head might be always aligned, but are function pointers always aligned? The x86 hardware allows arbitrary function pointers, I'm not sure what gcc would do if '--falign-functions=0' is used. Are there other codepaths that assume that the lowest bit of a function pointer is never set?
> And we really are running into bugs that are detected by RCU's seeing a > null function pointer in the rcu_head structure at callback-invocation > time. So, whatever encoding you choose, please leave a function-pointer > value of zero as an invalid value! > Ok.
>> --- a/kernel/rcutree.c >> +++ b/kernel/rcutree.c >> @@ -901,7 +901,7 @@ static void rcu_do_batch(struct rcu_data *rdp) >> while (list) { >> next = list->next; >> prefetch(next); >> - list->func(list); >> + rcu_docallback(list); >> > > Good, you got all three of them! ;-) > > The patch was tested against rcutree ;-)
-- Manfred
| |