All of lore.kernel.org
 help / color / mirror / Atom feed
* 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.