diff options
Diffstat (limited to 'arch/x86/include')
-rw-r--r-- | arch/x86/include/asm/apic.h | 13 | ||||
-rwxr-xr-x | arch/x86/include/asm/cpu_debug.h | 33 | ||||
-rw-r--r-- | arch/x86/include/asm/dmi.h | 14 | ||||
-rw-r--r-- | arch/x86/include/asm/io_apic.h | 5 | ||||
-rw-r--r-- | arch/x86/include/asm/irq_remapping.h | 2 | ||||
-rw-r--r-- | arch/x86/include/asm/msidef.h | 1 | ||||
-rw-r--r-- | arch/x86/include/asm/page_32_types.h | 5 | ||||
-rw-r--r-- | arch/x86/include/asm/paravirt.h | 19 | ||||
-rw-r--r-- | arch/x86/include/asm/pgtable-2level.h | 7 | ||||
-rw-r--r-- | arch/x86/include/asm/pgtable-3level.h | 17 | ||||
-rw-r--r-- | arch/x86/include/asm/pgtable.h | 2 | ||||
-rw-r--r-- | arch/x86/include/asm/pgtable_32.h | 3 | ||||
-rw-r--r-- | arch/x86/include/asm/sections.h | 7 | ||||
-rw-r--r-- | arch/x86/include/asm/setup.h | 37 |
14 files changed, 97 insertions, 68 deletions
diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h index 394d177d721..00f5962d82d 100644 --- a/arch/x86/include/asm/apic.h +++ b/arch/x86/include/asm/apic.h | |||
@@ -108,6 +108,16 @@ extern void native_apic_icr_write(u32 low, u32 id); | |||
108 | extern u64 native_apic_icr_read(void); | 108 | extern u64 native_apic_icr_read(void); |
109 | 109 | ||
110 | #ifdef CONFIG_X86_X2APIC | 110 | #ifdef CONFIG_X86_X2APIC |
111 | /* | ||
112 | * Make previous memory operations globally visible before | ||
113 | * sending the IPI through x2apic wrmsr. We need a serializing instruction or | ||
114 | * mfence for this. | ||
115 | */ | ||
116 | static inline void x2apic_wrmsr_fence(void) | ||
117 | { | ||
118 | asm volatile("mfence" : : : "memory"); | ||
119 | } | ||
120 | |||
111 | static inline void native_apic_msr_write(u32 reg, u32 v) | 121 | static inline void native_apic_msr_write(u32 reg, u32 v) |
112 | { | 122 | { |
113 | if (reg == APIC_DFR || reg == APIC_ID || reg == APIC_LDR || | 123 | if (reg == APIC_DFR || reg == APIC_ID || reg == APIC_LDR || |
@@ -184,6 +194,9 @@ static inline int x2apic_enabled(void) | |||
184 | { | 194 | { |
185 | return 0; | 195 | return 0; |
186 | } | 196 | } |
197 | |||
198 | #define x2apic 0 | ||
199 | |||
187 | #endif | 200 | #endif |
188 | 201 | ||
189 | extern int get_physical_broadcast(void); | 202 | extern int get_physical_broadcast(void); |
diff --git a/arch/x86/include/asm/cpu_debug.h b/arch/x86/include/asm/cpu_debug.h index 56f1635e461..222802029fa 100755 --- a/arch/x86/include/asm/cpu_debug.h +++ b/arch/x86/include/asm/cpu_debug.h | |||
@@ -33,6 +33,8 @@ enum cpu_debug_bit { | |||
33 | CPU_VMX_BIT, /* VMX */ | 33 | CPU_VMX_BIT, /* VMX */ |
34 | CPU_CALL_BIT, /* System Call */ | 34 | CPU_CALL_BIT, /* System Call */ |
35 | CPU_BASE_BIT, /* BASE Address */ | 35 | CPU_BASE_BIT, /* BASE Address */ |
36 | CPU_VER_BIT, /* Version ID */ | ||
37 | CPU_CONF_BIT, /* Configuration */ | ||
36 | CPU_SMM_BIT, /* System mgmt mode */ | 38 | CPU_SMM_BIT, /* System mgmt mode */ |
37 | CPU_SVM_BIT, /*Secure Virtual Machine*/ | 39 | CPU_SVM_BIT, /*Secure Virtual Machine*/ |
38 | CPU_OSVM_BIT, /* OS-Visible Workaround*/ | 40 | CPU_OSVM_BIT, /* OS-Visible Workaround*/ |
@@ -69,6 +71,8 @@ enum cpu_debug_bit { | |||
69 | #define CPU_VMX (1 << CPU_VMX_BIT) | 71 | #define CPU_VMX (1 << CPU_VMX_BIT) |
70 | #define CPU_CALL (1 << CPU_CALL_BIT) | 72 | #define CPU_CALL (1 << CPU_CALL_BIT) |
71 | #define CPU_BASE (1 << CPU_BASE_BIT) | 73 | #define CPU_BASE (1 << CPU_BASE_BIT) |
74 | #define CPU_VER (1 << CPU_VER_BIT) | ||
75 | #define CPU_CONF (1 << CPU_CONF_BIT) | ||
72 | #define CPU_SMM (1 << CPU_SMM_BIT) | 76 | #define CPU_SMM (1 << CPU_SMM_BIT) |
73 | #define CPU_SVM (1 << CPU_SVM_BIT) | 77 | #define CPU_SVM (1 << CPU_SVM_BIT) |
74 | #define CPU_OSVM (1 << CPU_OSVM_BIT) | 78 | #define CPU_OSVM (1 << CPU_OSVM_BIT) |
@@ -123,10 +127,15 @@ enum cpu_processor_bit { | |||
123 | CPU_INTEL_ATOM_BIT, | 127 | CPU_INTEL_ATOM_BIT, |
124 | CPU_INTEL_XEON_P4_BIT, | 128 | CPU_INTEL_XEON_P4_BIT, |
125 | CPU_INTEL_XEON_MP_BIT, | 129 | CPU_INTEL_XEON_MP_BIT, |
130 | /* AMD */ | ||
131 | CPU_AMD_K6_BIT, | ||
132 | CPU_AMD_K7_BIT, | ||
133 | CPU_AMD_K8_BIT, | ||
134 | CPU_AMD_0F_BIT, | ||
135 | CPU_AMD_10_BIT, | ||
136 | CPU_AMD_11_BIT, | ||
126 | }; | 137 | }; |
127 | 138 | ||
128 | #define CPU_ALL (~0) /* Select all CPUs */ | ||
129 | |||
130 | #define CPU_INTEL_PENTIUM (1 << CPU_INTEL_PENTIUM_BIT) | 139 | #define CPU_INTEL_PENTIUM (1 << CPU_INTEL_PENTIUM_BIT) |
131 | #define CPU_INTEL_P6 (1 << CPU_INTEL_P6_BIT) | 140 | #define CPU_INTEL_P6 (1 << CPU_INTEL_P6_BIT) |
132 | #define CPU_INTEL_PENTIUM_M (1 << CPU_INTEL_PENTIUM_M_BIT) | 141 | #define CPU_INTEL_PENTIUM_M (1 << CPU_INTEL_PENTIUM_M_BIT) |
@@ -156,9 +165,27 @@ enum cpu_processor_bit { | |||
156 | #define CPU_PX_CX_AT (CPU_INTEL_PX | CPU_CX_AT) | 165 | #define CPU_PX_CX_AT (CPU_INTEL_PX | CPU_CX_AT) |
157 | #define CPU_PX_CX_AT_XE (CPU_INTEL_PX | CPU_CX_AT_XE) | 166 | #define CPU_PX_CX_AT_XE (CPU_INTEL_PX | CPU_CX_AT_XE) |
158 | 167 | ||
159 | /* Select all Intel CPUs*/ | 168 | /* Select all supported Intel CPUs */ |
160 | #define CPU_INTEL_ALL (CPU_INTEL_PENTIUM | CPU_PX_CX_AT_XE) | 169 | #define CPU_INTEL_ALL (CPU_INTEL_PENTIUM | CPU_PX_CX_AT_XE) |
161 | 170 | ||
171 | #define CPU_AMD_K6 (1 << CPU_AMD_K6_BIT) | ||
172 | #define CPU_AMD_K7 (1 << CPU_AMD_K7_BIT) | ||
173 | #define CPU_AMD_K8 (1 << CPU_AMD_K8_BIT) | ||
174 | #define CPU_AMD_0F (1 << CPU_AMD_0F_BIT) | ||
175 | #define CPU_AMD_10 (1 << CPU_AMD_10_BIT) | ||
176 | #define CPU_AMD_11 (1 << CPU_AMD_11_BIT) | ||
177 | |||
178 | #define CPU_K10_PLUS (CPU_AMD_10 | CPU_AMD_11) | ||
179 | #define CPU_K0F_PLUS (CPU_AMD_0F | CPU_K10_PLUS) | ||
180 | #define CPU_K8_PLUS (CPU_AMD_K8 | CPU_K0F_PLUS) | ||
181 | #define CPU_K7_PLUS (CPU_AMD_K7 | CPU_K8_PLUS) | ||
182 | |||
183 | /* Select all supported AMD CPUs */ | ||
184 | #define CPU_AMD_ALL (CPU_AMD_K6 | CPU_K7_PLUS) | ||
185 | |||
186 | /* Select all supported CPUs */ | ||
187 | #define CPU_ALL (CPU_INTEL_ALL | CPU_AMD_ALL) | ||
188 | |||
162 | #define MAX_CPU_FILES 512 | 189 | #define MAX_CPU_FILES 512 |
163 | 190 | ||
164 | struct cpu_private { | 191 | struct cpu_private { |
diff --git a/arch/x86/include/asm/dmi.h b/arch/x86/include/asm/dmi.h index bc68212c6bc..aa32f7e6c19 100644 --- a/arch/x86/include/asm/dmi.h +++ b/arch/x86/include/asm/dmi.h | |||
@@ -2,21 +2,11 @@ | |||
2 | #define _ASM_X86_DMI_H | 2 | #define _ASM_X86_DMI_H |
3 | 3 | ||
4 | #include <asm/io.h> | 4 | #include <asm/io.h> |
5 | #include <asm/setup.h> | ||
5 | 6 | ||
6 | #define DMI_MAX_DATA 2048 | ||
7 | |||
8 | extern int dmi_alloc_index; | ||
9 | extern char dmi_alloc_data[DMI_MAX_DATA]; | ||
10 | |||
11 | /* This is so early that there is no good way to allocate dynamic memory. | ||
12 | Allocate data in an BSS array. */ | ||
13 | static inline void *dmi_alloc(unsigned len) | 7 | static inline void *dmi_alloc(unsigned len) |
14 | { | 8 | { |
15 | int idx = dmi_alloc_index; | 9 | return extend_brk(len, sizeof(int)); |
16 | if ((dmi_alloc_index + len) > DMI_MAX_DATA) | ||
17 | return NULL; | ||
18 | dmi_alloc_index += len; | ||
19 | return dmi_alloc_data + idx; | ||
20 | } | 10 | } |
21 | 11 | ||
22 | /* Use early IO mappings for DMI because it's initialized early */ | 12 | /* Use early IO mappings for DMI because it's initialized early */ |
diff --git a/arch/x86/include/asm/io_apic.h b/arch/x86/include/asm/io_apic.h index 59cb4a1317b..373cc2bbcad 100644 --- a/arch/x86/include/asm/io_apic.h +++ b/arch/x86/include/asm/io_apic.h | |||
@@ -162,7 +162,8 @@ extern int (*ioapic_renumber_irq)(int ioapic, int irq); | |||
162 | extern void ioapic_init_mappings(void); | 162 | extern void ioapic_init_mappings(void); |
163 | 163 | ||
164 | #ifdef CONFIG_X86_64 | 164 | #ifdef CONFIG_X86_64 |
165 | extern int save_mask_IO_APIC_setup(void); | 165 | extern int save_IO_APIC_setup(void); |
166 | extern void mask_IO_APIC_setup(void); | ||
166 | extern void restore_IO_APIC_setup(void); | 167 | extern void restore_IO_APIC_setup(void); |
167 | extern void reinit_intr_remapped_IO_APIC(int); | 168 | extern void reinit_intr_remapped_IO_APIC(int); |
168 | #endif | 169 | #endif |
@@ -172,7 +173,7 @@ extern void probe_nr_irqs_gsi(void); | |||
172 | extern int setup_ioapic_entry(int apic, int irq, | 173 | extern int setup_ioapic_entry(int apic, int irq, |
173 | struct IO_APIC_route_entry *entry, | 174 | struct IO_APIC_route_entry *entry, |
174 | unsigned int destination, int trigger, | 175 | unsigned int destination, int trigger, |
175 | int polarity, int vector); | 176 | int polarity, int vector, int pin); |
176 | extern void ioapic_write_entry(int apic, int pin, | 177 | extern void ioapic_write_entry(int apic, int pin, |
177 | struct IO_APIC_route_entry e); | 178 | struct IO_APIC_route_entry e); |
178 | #else /* !CONFIG_X86_IO_APIC */ | 179 | #else /* !CONFIG_X86_IO_APIC */ |
diff --git a/arch/x86/include/asm/irq_remapping.h b/arch/x86/include/asm/irq_remapping.h index 20e1fd588db..0396760fccb 100644 --- a/arch/x86/include/asm/irq_remapping.h +++ b/arch/x86/include/asm/irq_remapping.h | |||
@@ -1,8 +1,6 @@ | |||
1 | #ifndef _ASM_X86_IRQ_REMAPPING_H | 1 | #ifndef _ASM_X86_IRQ_REMAPPING_H |
2 | #define _ASM_X86_IRQ_REMAPPING_H | 2 | #define _ASM_X86_IRQ_REMAPPING_H |
3 | 3 | ||
4 | extern int x2apic; | ||
5 | |||
6 | #define IRTE_DEST(dest) ((x2apic) ? dest : dest << 8) | 4 | #define IRTE_DEST(dest) ((x2apic) ? dest : dest << 8) |
7 | 5 | ||
8 | #endif /* _ASM_X86_IRQ_REMAPPING_H */ | 6 | #endif /* _ASM_X86_IRQ_REMAPPING_H */ |
diff --git a/arch/x86/include/asm/msidef.h b/arch/x86/include/asm/msidef.h index 6706b3006f1..4cc48af23fe 100644 --- a/arch/x86/include/asm/msidef.h +++ b/arch/x86/include/asm/msidef.h | |||
@@ -47,6 +47,7 @@ | |||
47 | #define MSI_ADDR_DEST_ID_MASK 0x00ffff0 | 47 | #define MSI_ADDR_DEST_ID_MASK 0x00ffff0 |
48 | #define MSI_ADDR_DEST_ID(dest) (((dest) << MSI_ADDR_DEST_ID_SHIFT) & \ | 48 | #define MSI_ADDR_DEST_ID(dest) (((dest) << MSI_ADDR_DEST_ID_SHIFT) & \ |
49 | MSI_ADDR_DEST_ID_MASK) | 49 | MSI_ADDR_DEST_ID_MASK) |
50 | #define MSI_ADDR_EXT_DEST_ID(dest) ((dest) & 0xffffff00) | ||
50 | 51 | ||
51 | #define MSI_ADDR_IR_EXT_INT (1 << 4) | 52 | #define MSI_ADDR_IR_EXT_INT (1 << 4) |
52 | #define MSI_ADDR_IR_SHV (1 << 3) | 53 | #define MSI_ADDR_IR_SHV (1 << 3) |
diff --git a/arch/x86/include/asm/page_32_types.h b/arch/x86/include/asm/page_32_types.h index f1e4a79a6e4..0f915ae649a 100644 --- a/arch/x86/include/asm/page_32_types.h +++ b/arch/x86/include/asm/page_32_types.h | |||
@@ -39,6 +39,11 @@ | |||
39 | #define __VIRTUAL_MASK_SHIFT 32 | 39 | #define __VIRTUAL_MASK_SHIFT 32 |
40 | #endif /* CONFIG_X86_PAE */ | 40 | #endif /* CONFIG_X86_PAE */ |
41 | 41 | ||
42 | /* | ||
43 | * Kernel image size is limited to 512 MB (see in arch/x86/kernel/head_32.S) | ||
44 | */ | ||
45 | #define KERNEL_IMAGE_SIZE (512 * 1024 * 1024) | ||
46 | |||
42 | #ifndef __ASSEMBLY__ | 47 | #ifndef __ASSEMBLY__ |
43 | 48 | ||
44 | /* | 49 | /* |
diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h index 0617d5cc971..7727aa8b7dd 100644 --- a/arch/x86/include/asm/paravirt.h +++ b/arch/x86/include/asm/paravirt.h | |||
@@ -317,8 +317,6 @@ struct pv_mmu_ops { | |||
317 | #if PAGETABLE_LEVELS >= 3 | 317 | #if PAGETABLE_LEVELS >= 3 |
318 | #ifdef CONFIG_X86_PAE | 318 | #ifdef CONFIG_X86_PAE |
319 | void (*set_pte_atomic)(pte_t *ptep, pte_t pteval); | 319 | void (*set_pte_atomic)(pte_t *ptep, pte_t pteval); |
320 | void (*set_pte_present)(struct mm_struct *mm, unsigned long addr, | ||
321 | pte_t *ptep, pte_t pte); | ||
322 | void (*pte_clear)(struct mm_struct *mm, unsigned long addr, | 320 | void (*pte_clear)(struct mm_struct *mm, unsigned long addr, |
323 | pte_t *ptep); | 321 | pte_t *ptep); |
324 | void (*pmd_clear)(pmd_t *pmdp); | 322 | void (*pmd_clear)(pmd_t *pmdp); |
@@ -389,7 +387,7 @@ extern struct pv_lock_ops pv_lock_ops; | |||
389 | 387 | ||
390 | #define paravirt_type(op) \ | 388 | #define paravirt_type(op) \ |
391 | [paravirt_typenum] "i" (PARAVIRT_PATCH(op)), \ | 389 | [paravirt_typenum] "i" (PARAVIRT_PATCH(op)), \ |
392 | [paravirt_opptr] "m" (op) | 390 | [paravirt_opptr] "i" (&(op)) |
393 | #define paravirt_clobber(clobber) \ | 391 | #define paravirt_clobber(clobber) \ |
394 | [paravirt_clobber] "i" (clobber) | 392 | [paravirt_clobber] "i" (clobber) |
395 | 393 | ||
@@ -443,7 +441,7 @@ int paravirt_disable_iospace(void); | |||
443 | * offset into the paravirt_patch_template structure, and can therefore be | 441 | * offset into the paravirt_patch_template structure, and can therefore be |
444 | * freely converted back into a structure offset. | 442 | * freely converted back into a structure offset. |
445 | */ | 443 | */ |
446 | #define PARAVIRT_CALL "call *%[paravirt_opptr];" | 444 | #define PARAVIRT_CALL "call *%c[paravirt_opptr];" |
447 | 445 | ||
448 | /* | 446 | /* |
449 | * These macros are intended to wrap calls through one of the paravirt | 447 | * These macros are intended to wrap calls through one of the paravirt |
@@ -1365,13 +1363,6 @@ static inline void set_pte_atomic(pte_t *ptep, pte_t pte) | |||
1365 | pte.pte, pte.pte >> 32); | 1363 | pte.pte, pte.pte >> 32); |
1366 | } | 1364 | } |
1367 | 1365 | ||
1368 | static inline void set_pte_present(struct mm_struct *mm, unsigned long addr, | ||
1369 | pte_t *ptep, pte_t pte) | ||
1370 | { | ||
1371 | /* 5 arg words */ | ||
1372 | pv_mmu_ops.set_pte_present(mm, addr, ptep, pte); | ||
1373 | } | ||
1374 | |||
1375 | static inline void pte_clear(struct mm_struct *mm, unsigned long addr, | 1366 | static inline void pte_clear(struct mm_struct *mm, unsigned long addr, |
1376 | pte_t *ptep) | 1367 | pte_t *ptep) |
1377 | { | 1368 | { |
@@ -1388,12 +1379,6 @@ static inline void set_pte_atomic(pte_t *ptep, pte_t pte) | |||
1388 | set_pte(ptep, pte); | 1379 | set_pte(ptep, pte); |
1389 | } | 1380 | } |
1390 | 1381 | ||
1391 | static inline void set_pte_present(struct mm_struct *mm, unsigned long addr, | ||
1392 | pte_t *ptep, pte_t pte) | ||
1393 | { | ||
1394 | set_pte(ptep, pte); | ||
1395 | } | ||
1396 | |||
1397 | static inline void pte_clear(struct mm_struct *mm, unsigned long addr, | 1382 | static inline void pte_clear(struct mm_struct *mm, unsigned long addr, |
1398 | pte_t *ptep) | 1383 | pte_t *ptep) |
1399 | { | 1384 | { |
diff --git a/arch/x86/include/asm/pgtable-2level.h b/arch/x86/include/asm/pgtable-2level.h index c1774ac9da7..2334982b339 100644 --- a/arch/x86/include/asm/pgtable-2level.h +++ b/arch/x86/include/asm/pgtable-2level.h | |||
@@ -26,13 +26,6 @@ static inline void native_set_pte_atomic(pte_t *ptep, pte_t pte) | |||
26 | native_set_pte(ptep, pte); | 26 | native_set_pte(ptep, pte); |
27 | } | 27 | } |
28 | 28 | ||
29 | static inline void native_set_pte_present(struct mm_struct *mm, | ||
30 | unsigned long addr, | ||
31 | pte_t *ptep, pte_t pte) | ||
32 | { | ||
33 | native_set_pte(ptep, pte); | ||
34 | } | ||
35 | |||
36 | static inline void native_pmd_clear(pmd_t *pmdp) | 29 | static inline void native_pmd_clear(pmd_t *pmdp) |
37 | { | 30 | { |
38 | native_set_pmd(pmdp, __pmd(0)); | 31 | native_set_pmd(pmdp, __pmd(0)); |
diff --git a/arch/x86/include/asm/pgtable-3level.h b/arch/x86/include/asm/pgtable-3level.h index 3f13cdf6115..177b0165ea0 100644 --- a/arch/x86/include/asm/pgtable-3level.h +++ b/arch/x86/include/asm/pgtable-3level.h | |||
@@ -31,23 +31,6 @@ static inline void native_set_pte(pte_t *ptep, pte_t pte) | |||
31 | ptep->pte_low = pte.pte_low; | 31 | ptep->pte_low = pte.pte_low; |
32 | } | 32 | } |
33 | 33 | ||
34 | /* | ||
35 | * Since this is only called on user PTEs, and the page fault handler | ||
36 | * must handle the already racy situation of simultaneous page faults, | ||
37 | * we are justified in merely clearing the PTE present bit, followed | ||
38 | * by a set. The ordering here is important. | ||
39 | */ | ||
40 | static inline void native_set_pte_present(struct mm_struct *mm, | ||
41 | unsigned long addr, | ||
42 | pte_t *ptep, pte_t pte) | ||
43 | { | ||
44 | ptep->pte_low = 0; | ||
45 | smp_wmb(); | ||
46 | ptep->pte_high = pte.pte_high; | ||
47 | smp_wmb(); | ||
48 | ptep->pte_low = pte.pte_low; | ||
49 | } | ||
50 | |||
51 | static inline void native_set_pte_atomic(pte_t *ptep, pte_t pte) | 34 | static inline void native_set_pte_atomic(pte_t *ptep, pte_t pte) |
52 | { | 35 | { |
53 | set_64bit((unsigned long long *)(ptep), native_pte_val(pte)); | 36 | set_64bit((unsigned long long *)(ptep), native_pte_val(pte)); |
diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h index d0812e155f1..29d96d168bc 100644 --- a/arch/x86/include/asm/pgtable.h +++ b/arch/x86/include/asm/pgtable.h | |||
@@ -31,8 +31,6 @@ extern struct list_head pgd_list; | |||
31 | #define set_pte(ptep, pte) native_set_pte(ptep, pte) | 31 | #define set_pte(ptep, pte) native_set_pte(ptep, pte) |
32 | #define set_pte_at(mm, addr, ptep, pte) native_set_pte_at(mm, addr, ptep, pte) | 32 | #define set_pte_at(mm, addr, ptep, pte) native_set_pte_at(mm, addr, ptep, pte) |
33 | 33 | ||
34 | #define set_pte_present(mm, addr, ptep, pte) \ | ||
35 | native_set_pte_present(mm, addr, ptep, pte) | ||
36 | #define set_pte_atomic(ptep, pte) \ | 34 | #define set_pte_atomic(ptep, pte) \ |
37 | native_set_pte_atomic(ptep, pte) | 35 | native_set_pte_atomic(ptep, pte) |
38 | 36 | ||
diff --git a/arch/x86/include/asm/pgtable_32.h b/arch/x86/include/asm/pgtable_32.h index 97612fc7632..31bd120cf2a 100644 --- a/arch/x86/include/asm/pgtable_32.h +++ b/arch/x86/include/asm/pgtable_32.h | |||
@@ -42,9 +42,6 @@ extern void set_pmd_pfn(unsigned long, unsigned long, pgprot_t); | |||
42 | */ | 42 | */ |
43 | #undef TEST_ACCESS_OK | 43 | #undef TEST_ACCESS_OK |
44 | 44 | ||
45 | /* The boot page tables (all created as a single array) */ | ||
46 | extern unsigned long pg0[]; | ||
47 | |||
48 | #ifdef CONFIG_X86_PAE | 45 | #ifdef CONFIG_X86_PAE |
49 | # include <asm/pgtable-3level.h> | 46 | # include <asm/pgtable-3level.h> |
50 | #else | 47 | #else |
diff --git a/arch/x86/include/asm/sections.h b/arch/x86/include/asm/sections.h index 2b8c5160388..1b7ee5d673c 100644 --- a/arch/x86/include/asm/sections.h +++ b/arch/x86/include/asm/sections.h | |||
@@ -1 +1,8 @@ | |||
1 | #ifndef _ASM_X86_SECTIONS_H | ||
2 | #define _ASM_X86_SECTIONS_H | ||
3 | |||
1 | #include <asm-generic/sections.h> | 4 | #include <asm-generic/sections.h> |
5 | |||
6 | extern char __brk_base[], __brk_limit[]; | ||
7 | |||
8 | #endif /* _ASM_X86_SECTIONS_H */ | ||
diff --git a/arch/x86/include/asm/setup.h b/arch/x86/include/asm/setup.h index 05c6f6b11fd..fbf0521eeed 100644 --- a/arch/x86/include/asm/setup.h +++ b/arch/x86/include/asm/setup.h | |||
@@ -100,20 +100,51 @@ extern struct boot_params boot_params; | |||
100 | */ | 100 | */ |
101 | #define LOWMEMSIZE() (0x9f000) | 101 | #define LOWMEMSIZE() (0x9f000) |
102 | 102 | ||
103 | /* exceedingly early brk-like allocator */ | ||
104 | extern unsigned long _brk_end; | ||
105 | void *extend_brk(size_t size, size_t align); | ||
106 | |||
107 | /* | ||
108 | * Reserve space in the brk section. The name must be unique within | ||
109 | * the file, and somewhat descriptive. The size is in bytes. Must be | ||
110 | * used at file scope. | ||
111 | * | ||
112 | * (This uses a temp function to wrap the asm so we can pass it the | ||
113 | * size parameter; otherwise we wouldn't be able to. We can't use a | ||
114 | * "section" attribute on a normal variable because it always ends up | ||
115 | * being @progbits, which ends up allocating space in the vmlinux | ||
116 | * executable.) | ||
117 | */ | ||
118 | #define RESERVE_BRK(name,sz) \ | ||
119 | static void __section(.discard) __used \ | ||
120 | __brk_reservation_fn_##name##__(void) { \ | ||
121 | asm volatile ( \ | ||
122 | ".pushsection .brk_reservation,\"aw\",@nobits;" \ | ||
123 | ".brk." #name ":" \ | ||
124 | " 1:.skip %c0;" \ | ||
125 | " .size .brk." #name ", . - 1b;" \ | ||
126 | " .popsection" \ | ||
127 | : : "i" (sz)); \ | ||
128 | } | ||
129 | |||
103 | #ifdef __i386__ | 130 | #ifdef __i386__ |
104 | 131 | ||
105 | void __init i386_start_kernel(void); | 132 | void __init i386_start_kernel(void); |
106 | extern void probe_roms(void); | 133 | extern void probe_roms(void); |
107 | 134 | ||
108 | extern unsigned long init_pg_tables_start; | ||
109 | extern unsigned long init_pg_tables_end; | ||
110 | |||
111 | #else | 135 | #else |
112 | void __init x86_64_start_kernel(char *real_mode); | 136 | void __init x86_64_start_kernel(char *real_mode); |
113 | void __init x86_64_start_reservations(char *real_mode_data); | 137 | void __init x86_64_start_reservations(char *real_mode_data); |
114 | 138 | ||
115 | #endif /* __i386__ */ | 139 | #endif /* __i386__ */ |
116 | #endif /* _SETUP */ | 140 | #endif /* _SETUP */ |
141 | #else | ||
142 | #define RESERVE_BRK(name,sz) \ | ||
143 | .pushsection .brk_reservation,"aw",@nobits; \ | ||
144 | .brk.name: \ | ||
145 | 1: .skip sz; \ | ||
146 | .size .brk.name,.-1b; \ | ||
147 | .popsection | ||
117 | #endif /* __ASSEMBLY__ */ | 148 | #endif /* __ASSEMBLY__ */ |
118 | #endif /* __KERNEL__ */ | 149 | #endif /* __KERNEL__ */ |
119 | 150 | ||