* help? usage of indirect per-cpu variables
@ 2016-09-27 19:41 Chris Friesen
0 siblings, 0 replies; only message in thread
From: Chris Friesen @ 2016-09-27 19:41 UTC (permalink / raw)
To: lkml
Hi,
I'm trying to wrap my head around indirect percpu variables, and I'm hoping
someone can school me on how they work.
For example, in mm/slub.c we have "struct kmem_cache *s". s->cpu_slab is a
per-cpu variable, so we access it with something like:
c = raw_cpu_ptr(s->cpu_slab);
and then a bit later on we do
object = c->freelist;
So far so good. Essentially the raw_cpu_ptr() macro applies a unique per-CPU
offset to s->cpu_slab to generate "c" which is a real pointer so we can
dereference it to get c->freelist.
What confuses me is how we can do something like this:
this_cpu_cmpxchg_double(s->cpu_slab->freelist,
s->cpu_slab->tid,
object, tid,
next_object, next_tid(tid))
If s->cpu_slab is a special pointer that needs to be accessed only via the
per-CPU macros, then how is it valid to specify "s->cpu_slab->freelist"? Since
s->cpuslab isn't actually a valid address, how can we dereference it?
Thanks,
Chris
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2016-09-27 19:41 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-09-27 19:41 help? usage of indirect per-cpu variables Chris Friesen
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.