Print this page
OS-5192 need faster clock_gettime
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Joshua M. Clulow <jmc@joyent.com>
Reviewed by: Ryan Zezeski <ryan@zinascii.com>
*** 25,35 ****
/*
* Copyright (c) 2010, Intel Corporation.
* All rights reserved.
*/
/*
! * Copyright 2015 Joyent, Inc.
* Copyright 2013 Nexenta Systems, Inc. All rights reserved.
*/
#include <sys/types.h>
#include <sys/thread.h>
--- 25,35 ----
/*
* Copyright (c) 2010, Intel Corporation.
* All rights reserved.
*/
/*
! * Copyright 2016 Joyent, Inc.
* Copyright 2013 Nexenta Systems, Inc. All rights reserved.
*/
#include <sys/types.h>
#include <sys/thread.h>
*** 245,255 ****
--- 245,273 ----
}
kpreempt_enable();
}
+ #if !defined(__xpv)
/*
+ * Configure per-cpu ID GDT
+ */
+ static void
+ init_cpu_id_gdt(struct cpu *cp)
+ {
+ /* Write cpu_id into limit field of GDT for usermode retrieval */
+ #if defined(__amd64)
+ set_usegd(&cp->cpu_gdt[GDT_CPUID], SDP_SHORT, NULL, cp->cpu_id,
+ SDT_MEMRODA, SEL_UPL, SDP_BYTES, SDP_OP32);
+ #elif defined(__i386)
+ set_usegd(&cp->cpu_gdt[GDT_CPUID], NULL, cp->cpu_id, SDT_MEMRODA,
+ SEL_UPL, SDP_BYTES, SDP_OP32);
+ #endif
+ }
+ #endif /* !defined(__xpv) */
+
+ /*
* Multiprocessor initialization.
*
* Allocate and initialize the cpu structure, TRAPTRACE buffer, and the
* startup and idle threads for the specified CPU.
* Parameter boot is true for boot time operations and is false for CPU
*** 428,437 ****
--- 446,459 ----
#endif
cp->cpu_m.mcpu_idle_cpu = cpu_idle;
init_cpu_info(cp);
+ #if !defined(__xpv)
+ init_cpu_id_gdt(cp);
+ #endif
+
/*
* alloc space for ucode_info
*/
ucode_alloc_space(cp);
xc_init_cpu(cp);
*** 1484,1493 ****
--- 1506,1519 ----
/*
* Initialize our own cpu_info.
*/
init_cpu_info(CPU);
+ #if !defined(__xpv)
+ init_cpu_id_gdt(CPU);
+ #endif
+
cmn_err(CE_CONT, "?cpu%d: %s\n", CPU->cpu_id, CPU->cpu_idstr);
cmn_err(CE_CONT, "?cpu%d: %s\n", CPU->cpu_id, CPU->cpu_brandstr);
/*
* Initialize our syscall handlers