summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-02-27 19:16:39 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2013-02-27 19:16:39 -0500
commit18a44a7ff1075ce5157ac07cde573aca6b5e9973 (patch)
tree8b857b12887da983b75bfd0d693df23edb810ba5
parent309667e53fcfd8e0b423280b6ea5a648fd92166c (diff)
parent7c10093692ed2e6f318387d96b829320aa0ca64c (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.txt5
-rw-r--r--arch/x86/kernel/head.c53
-rw-r--r--arch/x86/kernel/head_64.S4
-rw-r--r--arch/x86/platform/efi/efi.c2
-rw-r--r--drivers/acpi/Kconfig3
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
20void __init reserve_ebda_region(void) 29void __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
49startup_64: 49startup_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
160ENTRY(secondary_startup_64) 160ENTRY(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}
86EXPORT_SYMBOL(efi_enabled); 86EXPORT_SYMBOL(efi_enabled);
87 87
88static bool disable_runtime = false; 88static bool __initdata disable_runtime = false;
89static int __init setup_noefi(char *arg) 89static 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
268config ACPI_INITRD_TABLE_OVERRIDE 268config 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