diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-27 19:16:39 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-27 19:16:39 -0500 |
commit | 18a44a7ff1075ce5157ac07cde573aca6b5e9973 (patch) | |
tree | 8b857b12887da983b75bfd0d693df23edb810ba5 | |
parent | 309667e53fcfd8e0b423280b6ea5a648fd92166c (diff) | |
parent | 7c10093692ed2e6f318387d96b829320aa0ca64c (diff) |
Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull more x86 fixes from Peter Anvin:
"Additional x86 fixes. Three of these patches are pure documentation,
two are pretty trivial; the remaining one fixes boot problems on some
non-BIOS machines."
* 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
x86: Make sure we can boot in the case the BDA contains pure garbage
x86, efi: Mark disable_runtime as __initdata
x86, doc: Fix incorrect comment about 64-bit code segment descriptors
doc, kernel-parameters: Document 'console=hvc<n>'
doc, xen: Mention 'earlyprintk=xen' in the documentation.
ACPI: Overriding ACPI tables via initrd only works with an initrd and on X86
-rw-r--r-- | Documentation/kernel-parameters.txt | 5 | ||||
-rw-r--r-- | arch/x86/kernel/head.c | 53 | ||||
-rw-r--r-- | arch/x86/kernel/head_64.S | 4 | ||||
-rw-r--r-- | arch/x86/platform/efi/efi.c | 2 | ||||
-rw-r--r-- | drivers/acpi/Kconfig | 3 |
5 files changed, 44 insertions, 23 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 1da946548772..e567af39ee34 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
@@ -564,6 +564,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted. | |||
564 | UART at the specified I/O port or MMIO address, | 564 | UART at the specified I/O port or MMIO address, |
565 | switching to the matching ttyS device later. The | 565 | switching to the matching ttyS device later. The |
566 | options are the same as for ttyS, above. | 566 | options are the same as for ttyS, above. |
567 | hvc<n> Use the hypervisor console device <n>. This is for | ||
568 | both Xen and PowerPC hypervisors. | ||
567 | 569 | ||
568 | If the device connected to the port is not a TTY but a braille | 570 | If the device connected to the port is not a TTY but a braille |
569 | device, prepend "brl," before the device type, for instance | 571 | device, prepend "brl," before the device type, for instance |
@@ -757,6 +759,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted. | |||
757 | 759 | ||
758 | earlyprintk= [X86,SH,BLACKFIN] | 760 | earlyprintk= [X86,SH,BLACKFIN] |
759 | earlyprintk=vga | 761 | earlyprintk=vga |
762 | earlyprintk=xen | ||
760 | earlyprintk=serial[,ttySn[,baudrate]] | 763 | earlyprintk=serial[,ttySn[,baudrate]] |
761 | earlyprintk=ttySn[,baudrate] | 764 | earlyprintk=ttySn[,baudrate] |
762 | earlyprintk=dbgp[debugController#] | 765 | earlyprintk=dbgp[debugController#] |
@@ -774,6 +777,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted. | |||
774 | The VGA output is eventually overwritten by the real | 777 | The VGA output is eventually overwritten by the real |
775 | console. | 778 | console. |
776 | 779 | ||
780 | The xen output can only be used by Xen PV guests. | ||
781 | |||
777 | ekgdboc= [X86,KGDB] Allow early kernel console debugging | 782 | ekgdboc= [X86,KGDB] Allow early kernel console debugging |
778 | ekgdboc=kbd | 783 | ekgdboc=kbd |
779 | 784 | ||
diff --git a/arch/x86/kernel/head.c b/arch/x86/kernel/head.c index 48d9d4ea1020..992f442ca155 100644 --- a/arch/x86/kernel/head.c +++ b/arch/x86/kernel/head.c | |||
@@ -5,8 +5,6 @@ | |||
5 | #include <asm/setup.h> | 5 | #include <asm/setup.h> |
6 | #include <asm/bios_ebda.h> | 6 | #include <asm/bios_ebda.h> |
7 | 7 | ||
8 | #define BIOS_LOWMEM_KILOBYTES 0x413 | ||
9 | |||
10 | /* | 8 | /* |
11 | * The BIOS places the EBDA/XBDA at the top of conventional | 9 | * The BIOS places the EBDA/XBDA at the top of conventional |
12 | * memory, and usually decreases the reported amount of | 10 | * memory, and usually decreases the reported amount of |
@@ -16,17 +14,30 @@ | |||
16 | * chipset: reserve a page before VGA to prevent PCI prefetch | 14 | * chipset: reserve a page before VGA to prevent PCI prefetch |
17 | * into it (errata #56). Usually the page is reserved anyways, | 15 | * into it (errata #56). Usually the page is reserved anyways, |
18 | * unless you have no PS/2 mouse plugged in. | 16 | * unless you have no PS/2 mouse plugged in. |
17 | * | ||
18 | * This functions is deliberately very conservative. Losing | ||
19 | * memory in the bottom megabyte is rarely a problem, as long | ||
20 | * as we have enough memory to install the trampoline. Using | ||
21 | * memory that is in use by the BIOS or by some DMA device | ||
22 | * the BIOS didn't shut down *is* a big problem. | ||
19 | */ | 23 | */ |
24 | |||
25 | #define BIOS_LOWMEM_KILOBYTES 0x413 | ||
26 | #define LOWMEM_CAP 0x9f000U /* Absolute maximum */ | ||
27 | #define INSANE_CUTOFF 0x20000U /* Less than this = insane */ | ||
28 | |||
20 | void __init reserve_ebda_region(void) | 29 | void __init reserve_ebda_region(void) |
21 | { | 30 | { |
22 | unsigned int lowmem, ebda_addr; | 31 | unsigned int lowmem, ebda_addr; |
23 | 32 | ||
24 | /* To determine the position of the EBDA and the */ | 33 | /* |
25 | /* end of conventional memory, we need to look at */ | 34 | * To determine the position of the EBDA and the |
26 | /* the BIOS data area. In a paravirtual environment */ | 35 | * end of conventional memory, we need to look at |
27 | /* that area is absent. We'll just have to assume */ | 36 | * the BIOS data area. In a paravirtual environment |
28 | /* that the paravirt case can handle memory setup */ | 37 | * that area is absent. We'll just have to assume |
29 | /* correctly, without our help. */ | 38 | * that the paravirt case can handle memory setup |
39 | * correctly, without our help. | ||
40 | */ | ||
30 | if (paravirt_enabled()) | 41 | if (paravirt_enabled()) |
31 | return; | 42 | return; |
32 | 43 | ||
@@ -37,19 +48,23 @@ void __init reserve_ebda_region(void) | |||
37 | /* start of EBDA area */ | 48 | /* start of EBDA area */ |
38 | ebda_addr = get_bios_ebda(); | 49 | ebda_addr = get_bios_ebda(); |
39 | 50 | ||
40 | /* Fixup: bios puts an EBDA in the top 64K segment */ | 51 | /* |
41 | /* of conventional memory, but does not adjust lowmem. */ | 52 | * Note: some old Dells seem to need 4k EBDA without |
42 | if ((lowmem - ebda_addr) <= 0x10000) | 53 | * reporting so, so just consider the memory above 0x9f000 |
43 | lowmem = ebda_addr; | 54 | * to be off limits (bugzilla 2990). |
55 | */ | ||
56 | |||
57 | /* If the EBDA address is below 128K, assume it is bogus */ | ||
58 | if (ebda_addr < INSANE_CUTOFF) | ||
59 | ebda_addr = LOWMEM_CAP; | ||
44 | 60 | ||
45 | /* Fixup: bios does not report an EBDA at all. */ | 61 | /* If lowmem is less than 128K, assume it is bogus */ |
46 | /* Some old Dells seem to need 4k anyhow (bugzilla 2990) */ | 62 | if (lowmem < INSANE_CUTOFF) |
47 | if ((ebda_addr == 0) && (lowmem >= 0x9f000)) | 63 | lowmem = LOWMEM_CAP; |
48 | lowmem = 0x9f000; | ||
49 | 64 | ||
50 | /* Paranoia: should never happen, but... */ | 65 | /* Use the lower of the lowmem and EBDA markers as the cutoff */ |
51 | if ((lowmem == 0) || (lowmem >= 0x100000)) | 66 | lowmem = min(lowmem, ebda_addr); |
52 | lowmem = 0x9f000; | 67 | lowmem = min(lowmem, LOWMEM_CAP); /* Absolute cap */ |
53 | 68 | ||
54 | /* reserve all memory between lowmem and the 1MB mark */ | 69 | /* reserve all memory between lowmem and the 1MB mark */ |
55 | memblock_reserve(lowmem, 0x100000 - lowmem); | 70 | memblock_reserve(lowmem, 0x100000 - lowmem); |
diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S index b7de3b25adb5..6859e9626442 100644 --- a/arch/x86/kernel/head_64.S +++ b/arch/x86/kernel/head_64.S | |||
@@ -48,7 +48,7 @@ L3_START_KERNEL = pud_index(__START_KERNEL_map) | |||
48 | .globl startup_64 | 48 | .globl startup_64 |
49 | startup_64: | 49 | startup_64: |
50 | /* | 50 | /* |
51 | * At this point the CPU runs in 64bit mode CS.L = 1 CS.D = 1, | 51 | * At this point the CPU runs in 64bit mode CS.L = 1 CS.D = 0, |
52 | * and someone has loaded an identity mapped page table | 52 | * and someone has loaded an identity mapped page table |
53 | * for us. These identity mapped page tables map all of the | 53 | * for us. These identity mapped page tables map all of the |
54 | * kernel pages and possibly all of memory. | 54 | * kernel pages and possibly all of memory. |
@@ -159,7 +159,7 @@ startup_64: | |||
159 | jmp 1f | 159 | jmp 1f |
160 | ENTRY(secondary_startup_64) | 160 | ENTRY(secondary_startup_64) |
161 | /* | 161 | /* |
162 | * At this point the CPU runs in 64bit mode CS.L = 1 CS.D = 1, | 162 | * At this point the CPU runs in 64bit mode CS.L = 1 CS.D = 0, |
163 | * and someone has loaded a mapped page table. | 163 | * and someone has loaded a mapped page table. |
164 | * | 164 | * |
165 | * %rsi holds a physical pointer to real_mode_data. | 165 | * %rsi holds a physical pointer to real_mode_data. |
diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c index 2f81db40d7ca..5ae99f9160d9 100644 --- a/arch/x86/platform/efi/efi.c +++ b/arch/x86/platform/efi/efi.c | |||
@@ -85,7 +85,7 @@ int efi_enabled(int facility) | |||
85 | } | 85 | } |
86 | EXPORT_SYMBOL(efi_enabled); | 86 | EXPORT_SYMBOL(efi_enabled); |
87 | 87 | ||
88 | static bool disable_runtime = false; | 88 | static bool __initdata disable_runtime = false; |
89 | static int __init setup_noefi(char *arg) | 89 | static int __init setup_noefi(char *arg) |
90 | { | 90 | { |
91 | disable_runtime = true; | 91 | disable_runtime = true; |
diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig index 320006019e68..92ed9692c47e 100644 --- a/drivers/acpi/Kconfig +++ b/drivers/acpi/Kconfig | |||
@@ -266,7 +266,8 @@ config ACPI_CUSTOM_DSDT | |||
266 | default ACPI_CUSTOM_DSDT_FILE != "" | 266 | default ACPI_CUSTOM_DSDT_FILE != "" |
267 | 267 | ||
268 | config ACPI_INITRD_TABLE_OVERRIDE | 268 | config ACPI_INITRD_TABLE_OVERRIDE |
269 | bool "ACPI tables can be passed via uncompressed cpio in initrd" | 269 | bool "ACPI tables override via initrd" |
270 | depends on BLK_DEV_INITRD && X86 | ||
270 | default n | 271 | default n |
271 | help | 272 | help |
272 | This option provides functionality to override arbitrary ACPI tables | 273 | This option provides functionality to override arbitrary ACPI tables |