diff options
-rw-r--r-- | arch/x86/kernel/acpi/sleep.c | 18 | ||||
-rw-r--r-- | arch/x86/kernel/head_64.S | 15 | ||||
-rw-r--r-- | arch/x86/kernel/tracepoint.c | 6 | ||||
-rw-r--r-- | arch/x86/kernel/traps.c | 12 | ||||
-rw-r--r-- | arch/x86/platform/ce4100/ce4100.c | 1 | ||||
-rw-r--r-- | arch/x86/platform/efi/efi.c | 7 | ||||
-rw-r--r-- | drivers/firmware/efi/efivars.c | 3 |
7 files changed, 28 insertions, 34 deletions
diff --git a/arch/x86/kernel/acpi/sleep.c b/arch/x86/kernel/acpi/sleep.c index 2a34aaf3c8f1..33120100ff5e 100644 --- a/arch/x86/kernel/acpi/sleep.c +++ b/arch/x86/kernel/acpi/sleep.c | |||
@@ -48,9 +48,20 @@ int x86_acpi_suspend_lowlevel(void) | |||
48 | #ifndef CONFIG_64BIT | 48 | #ifndef CONFIG_64BIT |
49 | native_store_gdt((struct desc_ptr *)&header->pmode_gdt); | 49 | native_store_gdt((struct desc_ptr *)&header->pmode_gdt); |
50 | 50 | ||
51 | /* | ||
52 | * We have to check that we can write back the value, and not | ||
53 | * just read it. At least on 90 nm Pentium M (Family 6, Model | ||
54 | * 13), reading an invalid MSR is not guaranteed to trap, see | ||
55 | * Erratum X4 in "Intel Pentium M Processor on 90 nm Process | ||
56 | * with 2-MB L2 Cache and IntelĀ® Processor A100 and A110 on 90 | ||
57 | * nm process with 512-KB L2 Cache Specification Update". | ||
58 | */ | ||
51 | if (!rdmsr_safe(MSR_EFER, | 59 | if (!rdmsr_safe(MSR_EFER, |
52 | &header->pmode_efer_low, | 60 | &header->pmode_efer_low, |
53 | &header->pmode_efer_high)) | 61 | &header->pmode_efer_high) && |
62 | !wrmsr_safe(MSR_EFER, | ||
63 | header->pmode_efer_low, | ||
64 | header->pmode_efer_high)) | ||
54 | header->pmode_behavior |= (1 << WAKEUP_BEHAVIOR_RESTORE_EFER); | 65 | header->pmode_behavior |= (1 << WAKEUP_BEHAVIOR_RESTORE_EFER); |
55 | #endif /* !CONFIG_64BIT */ | 66 | #endif /* !CONFIG_64BIT */ |
56 | 67 | ||
@@ -61,7 +72,10 @@ int x86_acpi_suspend_lowlevel(void) | |||
61 | } | 72 | } |
62 | if (!rdmsr_safe(MSR_IA32_MISC_ENABLE, | 73 | if (!rdmsr_safe(MSR_IA32_MISC_ENABLE, |
63 | &header->pmode_misc_en_low, | 74 | &header->pmode_misc_en_low, |
64 | &header->pmode_misc_en_high)) | 75 | &header->pmode_misc_en_high) && |
76 | !wrmsr_safe(MSR_IA32_MISC_ENABLE, | ||
77 | header->pmode_misc_en_low, | ||
78 | header->pmode_misc_en_high)) | ||
65 | header->pmode_behavior |= | 79 | header->pmode_behavior |= |
66 | (1 << WAKEUP_BEHAVIOR_RESTORE_MISC_ENABLE); | 80 | (1 << WAKEUP_BEHAVIOR_RESTORE_MISC_ENABLE); |
67 | header->realmode_flags = acpi_realmode_flags; | 81 | header->realmode_flags = acpi_realmode_flags; |
diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S index 5e4d8a8a5c40..e1aabdb314c8 100644 --- a/arch/x86/kernel/head_64.S +++ b/arch/x86/kernel/head_64.S | |||
@@ -512,21 +512,6 @@ ENTRY(phys_base) | |||
512 | 512 | ||
513 | #include "../../x86/xen/xen-head.S" | 513 | #include "../../x86/xen/xen-head.S" |
514 | 514 | ||
515 | .section .bss, "aw", @nobits | ||
516 | .align L1_CACHE_BYTES | ||
517 | ENTRY(idt_table) | ||
518 | .skip IDT_ENTRIES * 16 | ||
519 | |||
520 | .align L1_CACHE_BYTES | ||
521 | ENTRY(debug_idt_table) | ||
522 | .skip IDT_ENTRIES * 16 | ||
523 | |||
524 | #ifdef CONFIG_TRACING | ||
525 | .align L1_CACHE_BYTES | ||
526 | ENTRY(trace_idt_table) | ||
527 | .skip IDT_ENTRIES * 16 | ||
528 | #endif | ||
529 | |||
530 | __PAGE_ALIGNED_BSS | 515 | __PAGE_ALIGNED_BSS |
531 | NEXT_PAGE(empty_zero_page) | 516 | NEXT_PAGE(empty_zero_page) |
532 | .skip PAGE_SIZE | 517 | .skip PAGE_SIZE |
diff --git a/arch/x86/kernel/tracepoint.c b/arch/x86/kernel/tracepoint.c index 4e584a8d6edd..1c113db9ed57 100644 --- a/arch/x86/kernel/tracepoint.c +++ b/arch/x86/kernel/tracepoint.c | |||
@@ -12,10 +12,8 @@ atomic_t trace_idt_ctr = ATOMIC_INIT(0); | |||
12 | struct desc_ptr trace_idt_descr = { NR_VECTORS * 16 - 1, | 12 | struct desc_ptr trace_idt_descr = { NR_VECTORS * 16 - 1, |
13 | (unsigned long) trace_idt_table }; | 13 | (unsigned long) trace_idt_table }; |
14 | 14 | ||
15 | #ifndef CONFIG_X86_64 | 15 | /* No need to be aligned, but done to keep all IDTs defined the same way. */ |
16 | gate_desc trace_idt_table[NR_VECTORS] __page_aligned_data | 16 | gate_desc trace_idt_table[NR_VECTORS] __page_aligned_bss; |
17 | = { { { { 0, 0 } } }, }; | ||
18 | #endif | ||
19 | 17 | ||
20 | static int trace_irq_vector_refcount; | 18 | static int trace_irq_vector_refcount; |
21 | static DEFINE_MUTEX(irq_vector_mutex); | 19 | static DEFINE_MUTEX(irq_vector_mutex); |
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c index b0865e88d3cc..1b23a1c92746 100644 --- a/arch/x86/kernel/traps.c +++ b/arch/x86/kernel/traps.c | |||
@@ -63,19 +63,19 @@ | |||
63 | #include <asm/x86_init.h> | 63 | #include <asm/x86_init.h> |
64 | #include <asm/pgalloc.h> | 64 | #include <asm/pgalloc.h> |
65 | #include <asm/proto.h> | 65 | #include <asm/proto.h> |
66 | |||
67 | /* No need to be aligned, but done to keep all IDTs defined the same way. */ | ||
68 | gate_desc debug_idt_table[NR_VECTORS] __page_aligned_bss; | ||
66 | #else | 69 | #else |
67 | #include <asm/processor-flags.h> | 70 | #include <asm/processor-flags.h> |
68 | #include <asm/setup.h> | 71 | #include <asm/setup.h> |
69 | 72 | ||
70 | asmlinkage int system_call(void); | 73 | asmlinkage int system_call(void); |
71 | |||
72 | /* | ||
73 | * The IDT has to be page-aligned to simplify the Pentium | ||
74 | * F0 0F bug workaround. | ||
75 | */ | ||
76 | gate_desc idt_table[NR_VECTORS] __page_aligned_data = { { { { 0, 0 } } }, }; | ||
77 | #endif | 74 | #endif |
78 | 75 | ||
76 | /* Must be page-aligned because the real IDT is used in a fixmap. */ | ||
77 | gate_desc idt_table[NR_VECTORS] __page_aligned_bss; | ||
78 | |||
79 | DECLARE_BITMAP(used_vectors, NR_VECTORS); | 79 | DECLARE_BITMAP(used_vectors, NR_VECTORS); |
80 | EXPORT_SYMBOL_GPL(used_vectors); | 80 | EXPORT_SYMBOL_GPL(used_vectors); |
81 | 81 | ||
diff --git a/arch/x86/platform/ce4100/ce4100.c b/arch/x86/platform/ce4100/ce4100.c index baec704231b3..643b8b5eee86 100644 --- a/arch/x86/platform/ce4100/ce4100.c +++ b/arch/x86/platform/ce4100/ce4100.c | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <linux/module.h> | 14 | #include <linux/module.h> |
15 | #include <linux/serial_reg.h> | 15 | #include <linux/serial_reg.h> |
16 | #include <linux/serial_8250.h> | 16 | #include <linux/serial_8250.h> |
17 | #include <linux/reboot.h> | ||
17 | 18 | ||
18 | #include <asm/ce4100.h> | 19 | #include <asm/ce4100.h> |
19 | #include <asm/prom.h> | 20 | #include <asm/prom.h> |
diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c index c8d5577044bb..90f6ed127096 100644 --- a/arch/x86/platform/efi/efi.c +++ b/arch/x86/platform/efi/efi.c | |||
@@ -931,13 +931,6 @@ void __init efi_enter_virtual_mode(void) | |||
931 | va = efi_ioremap(md->phys_addr, size, | 931 | va = efi_ioremap(md->phys_addr, size, |
932 | md->type, md->attribute); | 932 | md->type, md->attribute); |
933 | 933 | ||
934 | if (!(md->attribute & EFI_MEMORY_RUNTIME)) { | ||
935 | if (!va) | ||
936 | pr_err("ioremap of 0x%llX failed!\n", | ||
937 | (unsigned long long)md->phys_addr); | ||
938 | continue; | ||
939 | } | ||
940 | |||
941 | md->virt_addr = (u64) (unsigned long) va; | 934 | md->virt_addr = (u64) (unsigned long) va; |
942 | 935 | ||
943 | if (!va) { | 936 | if (!va) { |
diff --git a/drivers/firmware/efi/efivars.c b/drivers/firmware/efi/efivars.c index 8bd1bb6dbe47..8a7432a4b413 100644 --- a/drivers/firmware/efi/efivars.c +++ b/drivers/firmware/efi/efivars.c | |||
@@ -583,6 +583,9 @@ int efivars_sysfs_init(void) | |||
583 | struct kobject *parent_kobj = efivars_kobject(); | 583 | struct kobject *parent_kobj = efivars_kobject(); |
584 | int error = 0; | 584 | int error = 0; |
585 | 585 | ||
586 | if (!efi_enabled(EFI_RUNTIME_SERVICES)) | ||
587 | return -ENODEV; | ||
588 | |||
586 | /* No efivars has been registered yet */ | 589 | /* No efivars has been registered yet */ |
587 | if (!parent_kobj) | 590 | if (!parent_kobj) |
588 | return 0; | 591 | return 0; |