x86/segments: Introduce the 'CPUNODE' naming to better document the segment limit...
authorIngo Molnar <mingo@kernel.org>
Mon, 8 Oct 2018 08:41:59 +0000 (10:41 +0200)
committerIngo Molnar <mingo@kernel.org>
Mon, 8 Oct 2018 08:45:02 +0000 (10:45 +0200)
commit22245bdf0ad805d6c29f82b6d5e977ee94bb2166
treeaf187e5e67e1acfd4b096707a0c5b525c040d3df
parentb2e2ba578e016a091eb31565849990fe68c7c599
x86/segments: Introduce the 'CPUNODE' naming to better document the segment limit CPU/node NR trick

We have a special segment descriptor entry in the GDT, whose sole purpose is to
encode the CPU and node numbers in its limit (size) field. There are user-space
instructions that allow the reading of the limit field, which gives us a really
fast way to read the CPU and node IDs from the vDSO for example.

But the naming of related functionality does not make this clear, at all:

VDSO_CPU_SIZE
VDSO_CPU_MASK
__CPU_NUMBER_SEG
GDT_ENTRY_CPU_NUMBER
vdso_encode_cpu_node
vdso_read_cpu_node

There's a number of problems:

 - The 'VDSO_CPU_SIZE' doesn't really make it clear that these are number
   of bits, nor does it make it clear which 'CPU' this refers to, i.e.
   that this is about a GDT entry whose limit encodes the CPU and node number.

 - Furthermore, the 'CPU_NUMBER' naming is actively misleading as well,
   because the segment limit encodes not just the CPU number but the
   node ID as well ...

So use a better nomenclature all around: name everything related to this trick
as 'CPUNODE', to make it clear that this is something special, and add
_BITS to make it clear that these are number of bits, and propagate this to
every affected name:

VDSO_CPU_SIZE         =>  VDSO_CPUNODE_BITS
VDSO_CPU_MASK         =>  VDSO_CPUNODE_MASK
__CPU_NUMBER_SEG      =>  __CPUNODE_SEG
GDT_ENTRY_CPU_NUMBER  =>  GDT_ENTRY_CPUNODE
vdso_encode_cpu_node  =>  vdso_encode_cpunode
vdso_read_cpu_node    =>  vdso_read_cpunode

This, beyond being less confusing, also makes it easier to grep for all related
functionality:

  $ git grep -i cpunode arch/x86

Also, while at it, fix "return is not a function" style sloppiness in vdso_encode_cpunode().

Cc: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Chang S. Bae <chang.seok.bae@intel.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Markus T Metzger <markus.t.metzger@intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ravi Shankar <ravi.v.shankar@intel.com>
Cc: Rik van Riel <riel@surriel.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-kernel@vger.kernel.org
Link: http://lkml.kernel.org/r/1537312139-5580-2-git-send-email-chang.seok.bae@intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
arch/x86/entry/vdso/vgetcpu.c
arch/x86/include/asm/segment.h
arch/x86/kernel/cpu/common.c