mirror of
https://github.com/torvalds/linux.git
synced 2024-11-17 09:31:50 +00:00
x86, 64-bit: use write_gdt_entry in vsyscall_set_cpu
Use write_gdt_entry to generate the special vgetcpu descriptor in the vsyscall page. Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> Cc: xen-devel <xen-devel@lists.xensource.com> Cc: Stephen Tweedie <sct@redhat.com> Cc: Eduardo Habkost <ehabkost@redhat.com> Cc: Mark McLoughlin <markmc@redhat.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
ada8570823
commit
fc8b8a60ff
@ -249,7 +249,7 @@ static ctl_table kernel_root_table2[] = {
|
||||
doesn't violate that. We'll find out if it does. */
|
||||
static void __cpuinit vsyscall_set_cpu(int cpu)
|
||||
{
|
||||
unsigned long *d;
|
||||
unsigned long d;
|
||||
unsigned long node = 0;
|
||||
#ifdef CONFIG_NUMA
|
||||
node = cpu_to_node(cpu);
|
||||
@ -260,11 +260,11 @@ static void __cpuinit vsyscall_set_cpu(int cpu)
|
||||
/* Store cpu number in limit so that it can be loaded quickly
|
||||
in user space in vgetcpu.
|
||||
12 bits for the CPU and 8 bits for the node. */
|
||||
d = (unsigned long *)(get_cpu_gdt_table(cpu) + GDT_ENTRY_PER_CPU);
|
||||
*d = 0x0f40000000000ULL;
|
||||
*d |= cpu;
|
||||
*d |= (node & 0xf) << 12;
|
||||
*d |= (node >> 4) << 48;
|
||||
d = 0x0f40000000000ULL;
|
||||
d |= cpu;
|
||||
d |= (node & 0xf) << 12;
|
||||
d |= (node >> 4) << 48;
|
||||
write_gdt_entry(get_cpu_gdt_table(cpu), GDT_ENTRY_PER_CPU, &d, DESCTYPE_S);
|
||||
}
|
||||
|
||||
static void __cpuinit cpu_vsyscall_init(void *arg)
|
||||
|
Loading…
Reference in New Issue
Block a user