diff options
author | Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | 2013-04-05 16:42:23 -0400 |
---|---|---|
committer | H. Peter Anvin <hpa@linux.intel.com> | 2013-04-11 18:40:38 -0400 |
commit | 357d122670937c35b33d99c46356ef2b63182a1f (patch) | |
tree | f630334f9e9364858a648a740cbf72f43daeaff3 | |
parent | 84e70971e67d97bc2db18a4e76d42846272a54bd (diff) |
x86, xen, gdt: Remove the pvops variant of store_gdt.
The two use-cases where we needed to store the GDT were during ACPI S3 suspend
and resume. As the patches:
x86/gdt/i386: store/load GDT for ACPI S3 or hibernation/resume path is not needed
x86/gdt/64-bit: store/load GDT for ACPI S3 or hibernate/resume path is not needed.
have demonstrated - there are other mechanism by which the GDT is
saved and reloaded during early resume path.
Hence we do not need to worry about the pvops call-chain for saving the
GDT and can and can eliminate it. The other areas where the store_gdt is
used are never going to be hit when running under the pvops platforms.
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Link: http://lkml.kernel.org/r/1365194544-14648-4-git-send-email-konrad.wilk@oracle.com
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
-rw-r--r-- | arch/x86/include/asm/paravirt.h | 4 | ||||
-rw-r--r-- | arch/x86/include/asm/paravirt_types.h | 2 | ||||
-rw-r--r-- | arch/x86/kernel/acpi/sleep.c | 2 | ||||
-rw-r--r-- | arch/x86/kernel/doublefault_32.c | 2 | ||||
-rw-r--r-- | arch/x86/kernel/paravirt.c | 1 | ||||
-rw-r--r-- | arch/x86/kvm/vmx.c | 2 | ||||
-rw-r--r-- | arch/x86/xen/enlighten.c | 1 |
7 files changed, 4 insertions, 10 deletions
diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h index 5edd1742cfd0..736512869950 100644 --- a/arch/x86/include/asm/paravirt.h +++ b/arch/x86/include/asm/paravirt.h | |||
@@ -262,10 +262,6 @@ static inline void set_ldt(const void *addr, unsigned entries) | |||
262 | { | 262 | { |
263 | PVOP_VCALL2(pv_cpu_ops.set_ldt, addr, entries); | 263 | PVOP_VCALL2(pv_cpu_ops.set_ldt, addr, entries); |
264 | } | 264 | } |
265 | static inline void store_gdt(struct desc_ptr *dtr) | ||
266 | { | ||
267 | PVOP_VCALL1(pv_cpu_ops.store_gdt, dtr); | ||
268 | } | ||
269 | static inline void store_idt(struct desc_ptr *dtr) | 265 | static inline void store_idt(struct desc_ptr *dtr) |
270 | { | 266 | { |
271 | PVOP_VCALL1(pv_cpu_ops.store_idt, dtr); | 267 | PVOP_VCALL1(pv_cpu_ops.store_idt, dtr); |
diff --git a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/paravirt_types.h index 142236ed83af..b6c69a6917c8 100644 --- a/arch/x86/include/asm/paravirt_types.h +++ b/arch/x86/include/asm/paravirt_types.h | |||
@@ -122,7 +122,7 @@ struct pv_cpu_ops { | |||
122 | void (*load_tr_desc)(void); | 122 | void (*load_tr_desc)(void); |
123 | void (*load_gdt)(const struct desc_ptr *); | 123 | void (*load_gdt)(const struct desc_ptr *); |
124 | void (*load_idt)(const struct desc_ptr *); | 124 | void (*load_idt)(const struct desc_ptr *); |
125 | void (*store_gdt)(struct desc_ptr *); | 125 | /* store_gdt has been removed. */ |
126 | void (*store_idt)(struct desc_ptr *); | 126 | void (*store_idt)(struct desc_ptr *); |
127 | void (*set_ldt)(const void *desc, unsigned entries); | 127 | void (*set_ldt)(const void *desc, unsigned entries); |
128 | unsigned long (*store_tr)(void); | 128 | unsigned long (*store_tr)(void); |
diff --git a/arch/x86/kernel/acpi/sleep.c b/arch/x86/kernel/acpi/sleep.c index 0532f5d6e4ef..b44577bc9744 100644 --- a/arch/x86/kernel/acpi/sleep.c +++ b/arch/x86/kernel/acpi/sleep.c | |||
@@ -46,7 +46,7 @@ int acpi_suspend_lowlevel(void) | |||
46 | header->pmode_behavior = 0; | 46 | header->pmode_behavior = 0; |
47 | 47 | ||
48 | #ifndef CONFIG_64BIT | 48 | #ifndef CONFIG_64BIT |
49 | store_gdt((struct desc_ptr *)&header->pmode_gdt); | 49 | native_store_gdt((struct desc_ptr *)&header->pmode_gdt); |
50 | 50 | ||
51 | if (!rdmsr_safe(MSR_EFER, | 51 | if (!rdmsr_safe(MSR_EFER, |
52 | &header->pmode_efer_low, | 52 | &header->pmode_efer_low, |
diff --git a/arch/x86/kernel/doublefault_32.c b/arch/x86/kernel/doublefault_32.c index 37250fe490b1..155a13f33ed8 100644 --- a/arch/x86/kernel/doublefault_32.c +++ b/arch/x86/kernel/doublefault_32.c | |||
@@ -20,7 +20,7 @@ static void doublefault_fn(void) | |||
20 | struct desc_ptr gdt_desc = {0, 0}; | 20 | struct desc_ptr gdt_desc = {0, 0}; |
21 | unsigned long gdt, tss; | 21 | unsigned long gdt, tss; |
22 | 22 | ||
23 | store_gdt(&gdt_desc); | 23 | native_store_gdt(&gdt_desc); |
24 | gdt = gdt_desc.address; | 24 | gdt = gdt_desc.address; |
25 | 25 | ||
26 | printk(KERN_EMERG "PANIC: double fault, gdt at %08lx [%d bytes]\n", gdt, gdt_desc.size); | 26 | printk(KERN_EMERG "PANIC: double fault, gdt at %08lx [%d bytes]\n", gdt, gdt_desc.size); |
diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c index 17fff18a1031..4ae3d2305db1 100644 --- a/arch/x86/kernel/paravirt.c +++ b/arch/x86/kernel/paravirt.c | |||
@@ -360,7 +360,6 @@ struct pv_cpu_ops pv_cpu_ops = { | |||
360 | .set_ldt = native_set_ldt, | 360 | .set_ldt = native_set_ldt, |
361 | .load_gdt = native_load_gdt, | 361 | .load_gdt = native_load_gdt, |
362 | .load_idt = native_load_idt, | 362 | .load_idt = native_load_idt, |
363 | .store_gdt = native_store_gdt, | ||
364 | .store_idt = native_store_idt, | 363 | .store_idt = native_store_idt, |
365 | .store_tr = native_store_tr, | 364 | .store_tr = native_store_tr, |
366 | .load_tls = native_load_tls, | 365 | .load_tls = native_load_tls, |
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 6667042714cc..867b81037f96 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c | |||
@@ -2459,7 +2459,7 @@ static int hardware_enable(void *garbage) | |||
2459 | ept_sync_global(); | 2459 | ept_sync_global(); |
2460 | } | 2460 | } |
2461 | 2461 | ||
2462 | store_gdt(&__get_cpu_var(host_gdt)); | 2462 | native_store_gdt(&__get_cpu_var(host_gdt)); |
2463 | 2463 | ||
2464 | return 0; | 2464 | return 0; |
2465 | } | 2465 | } |
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c index c8e1c7b95c3b..ddab5390d548 100644 --- a/arch/x86/xen/enlighten.c +++ b/arch/x86/xen/enlighten.c | |||
@@ -1220,7 +1220,6 @@ static const struct pv_cpu_ops xen_cpu_ops __initconst = { | |||
1220 | .alloc_ldt = xen_alloc_ldt, | 1220 | .alloc_ldt = xen_alloc_ldt, |
1221 | .free_ldt = xen_free_ldt, | 1221 | .free_ldt = xen_free_ldt, |
1222 | 1222 | ||
1223 | .store_gdt = native_store_gdt, | ||
1224 | .store_idt = native_store_idt, | 1223 | .store_idt = native_store_idt, |
1225 | .store_tr = xen_store_tr, | 1224 | .store_tr = xen_store_tr, |
1226 | 1225 | ||