Re: [PATCH 3/4] x86_64: Fold pda into per cpu area

From: Jeremy Fitzhardinge
Date: Wed Jun 04 2008 - 09:59:00 EST


Mike Travis wrote:
Jeremy Fitzhardinge wrote:
Mike Travis wrote:
* Declare the pda as a per cpu variable.

* Make the x86_64 per cpu area start at zero.

* Since the pda is now the first element of the per_cpu area, cpu_pda()
is no longer needed and per_cpu() can be used instead. This also
makes
the _cpu_pda[] table obsolete.

* Since %gs is pointing to the pda, it will then also point to the
per cpu
variables and can be accessed thusly:

%gs:[&per_cpu_xxxx - __per_cpu_start]


The above is only a partial story (I folded the two patches but didn't
update the comments correctly.] The variables are already offset from
__per_cpu_start by virtue of the .data.percpu section being based at
zero. Therefore only the %gs register needs to be set to the base of
each cpu's percpu section to resolve the target address:

%gs:&per_cpu_xxxx

Oh, good. I'd played with trying to make that work at one point, and got lost in linker bugs and/or random version-specific strangeness.

J
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/