diff options
Diffstat (limited to 'include/asm-x86_64')
31 files changed, 184 insertions, 523 deletions
diff --git a/include/asm-x86_64/Kbuild b/include/asm-x86_64/Kbuild index ebd7117782a6..89ad1fc27c8b 100644 --- a/include/asm-x86_64/Kbuild +++ b/include/asm-x86_64/Kbuild | |||
@@ -8,7 +8,7 @@ header-y += boot.h | |||
8 | header-y += bootsetup.h | 8 | header-y += bootsetup.h |
9 | header-y += debugreg.h | 9 | header-y += debugreg.h |
10 | header-y += ldt.h | 10 | header-y += ldt.h |
11 | header-y += msr.h | 11 | header-y += msr-index.h |
12 | header-y += prctl.h | 12 | header-y += prctl.h |
13 | header-y += ptrace-abi.h | 13 | header-y += ptrace-abi.h |
14 | header-y += sigcontext32.h | 14 | header-y += sigcontext32.h |
@@ -16,5 +16,7 @@ header-y += ucontext.h | |||
16 | header-y += vsyscall32.h | 16 | header-y += vsyscall32.h |
17 | 17 | ||
18 | unifdef-y += mce.h | 18 | unifdef-y += mce.h |
19 | unifdef-y += msr.h | ||
19 | unifdef-y += mtrr.h | 20 | unifdef-y += mtrr.h |
20 | unifdef-y += vsyscall.h | 21 | unifdef-y += vsyscall.h |
22 | unifdef-y += const.h | ||
diff --git a/include/asm-x86_64/alternative.h b/include/asm-x86_64/alternative.h index a6657b4f3e0e..a09fe85c268e 100644 --- a/include/asm-x86_64/alternative.h +++ b/include/asm-x86_64/alternative.h | |||
@@ -16,6 +16,7 @@ struct alt_instr { | |||
16 | u8 pad[5]; | 16 | u8 pad[5]; |
17 | }; | 17 | }; |
18 | 18 | ||
19 | extern void alternative_instructions(void); | ||
19 | extern void apply_alternatives(struct alt_instr *start, struct alt_instr *end); | 20 | extern void apply_alternatives(struct alt_instr *start, struct alt_instr *end); |
20 | 21 | ||
21 | struct module; | 22 | struct module; |
@@ -141,8 +142,8 @@ void apply_paravirt(struct paravirt_patch *start, struct paravirt_patch *end); | |||
141 | static inline void | 142 | static inline void |
142 | apply_paravirt(struct paravirt_patch *start, struct paravirt_patch *end) | 143 | apply_paravirt(struct paravirt_patch *start, struct paravirt_patch *end) |
143 | {} | 144 | {} |
144 | #define __start_parainstructions NULL | 145 | #define __parainstructions NULL |
145 | #define __stop_parainstructions NULL | 146 | #define __parainstructions_end NULL |
146 | #endif | 147 | #endif |
147 | 148 | ||
148 | #endif /* _X86_64_ALTERNATIVE_H */ | 149 | #endif /* _X86_64_ALTERNATIVE_H */ |
diff --git a/include/asm-x86_64/apic.h b/include/asm-x86_64/apic.h index 7cfb39cbd918..45e9fca1febc 100644 --- a/include/asm-x86_64/apic.h +++ b/include/asm-x86_64/apic.h | |||
@@ -2,6 +2,7 @@ | |||
2 | #define __ASM_APIC_H | 2 | #define __ASM_APIC_H |
3 | 3 | ||
4 | #include <linux/pm.h> | 4 | #include <linux/pm.h> |
5 | #include <linux/delay.h> | ||
5 | #include <asm/fixmap.h> | 6 | #include <asm/fixmap.h> |
6 | #include <asm/apicdef.h> | 7 | #include <asm/apicdef.h> |
7 | #include <asm/system.h> | 8 | #include <asm/system.h> |
@@ -47,11 +48,8 @@ static __inline unsigned int apic_read(unsigned long reg) | |||
47 | return *((volatile unsigned int *)(APIC_BASE+reg)); | 48 | return *((volatile unsigned int *)(APIC_BASE+reg)); |
48 | } | 49 | } |
49 | 50 | ||
50 | static __inline__ void apic_wait_icr_idle(void) | 51 | extern void apic_wait_icr_idle(void); |
51 | { | 52 | extern unsigned int safe_apic_wait_icr_idle(void); |
52 | while (apic_read( APIC_ICR ) & APIC_ICR_BUSY) | ||
53 | cpu_relax(); | ||
54 | } | ||
55 | 53 | ||
56 | static inline void ack_APIC_irq(void) | 54 | static inline void ack_APIC_irq(void) |
57 | { | 55 | { |
@@ -83,7 +81,7 @@ extern void setup_secondary_APIC_clock (void); | |||
83 | extern int APIC_init_uniprocessor (void); | 81 | extern int APIC_init_uniprocessor (void); |
84 | extern void disable_APIC_timer(void); | 82 | extern void disable_APIC_timer(void); |
85 | extern void enable_APIC_timer(void); | 83 | extern void enable_APIC_timer(void); |
86 | extern void clustered_apic_check(void); | 84 | extern void setup_apic_routing(void); |
87 | 85 | ||
88 | extern void setup_APIC_extened_lvt(unsigned char lvt_off, unsigned char vector, | 86 | extern void setup_APIC_extened_lvt(unsigned char lvt_off, unsigned char vector, |
89 | unsigned char msg_type, unsigned char mask); | 87 | unsigned char msg_type, unsigned char mask); |
diff --git a/include/asm-x86_64/bugs.h b/include/asm-x86_64/bugs.h index d86c5dd689fa..b33dc04d8f42 100644 --- a/include/asm-x86_64/bugs.h +++ b/include/asm-x86_64/bugs.h | |||
@@ -1,28 +1,6 @@ | |||
1 | /* | 1 | #ifndef _ASM_X86_64_BUGS_H |
2 | * include/asm-x86_64/bugs.h | 2 | #define _ASM_X86_64_BUGS_H |
3 | * | ||
4 | * Copyright (C) 1994 Linus Torvalds | ||
5 | * Copyright (C) 2000 SuSE | ||
6 | * | ||
7 | * This is included by init/main.c to check for architecture-dependent bugs. | ||
8 | * | ||
9 | * Needs: | ||
10 | * void check_bugs(void); | ||
11 | */ | ||
12 | 3 | ||
13 | #include <asm/processor.h> | 4 | void check_bugs(void); |
14 | #include <asm/i387.h> | ||
15 | #include <asm/msr.h> | ||
16 | #include <asm/pda.h> | ||
17 | 5 | ||
18 | extern void alternative_instructions(void); | 6 | #endif /* _ASM_X86_64_BUGS_H */ |
19 | |||
20 | static void __init check_bugs(void) | ||
21 | { | ||
22 | identify_cpu(&boot_cpu_data); | ||
23 | #if !defined(CONFIG_SMP) | ||
24 | printk("CPU: "); | ||
25 | print_cpu_info(&boot_cpu_data); | ||
26 | #endif | ||
27 | alternative_instructions(); | ||
28 | } | ||
diff --git a/include/asm-x86_64/const.h b/include/asm-x86_64/const.h new file mode 100644 index 000000000000..54fb08f3db9b --- /dev/null +++ b/include/asm-x86_64/const.h | |||
@@ -0,0 +1,20 @@ | |||
1 | /* const.h: Macros for dealing with constants. */ | ||
2 | |||
3 | #ifndef _X86_64_CONST_H | ||
4 | #define _X86_64_CONST_H | ||
5 | |||
6 | /* Some constant macros are used in both assembler and | ||
7 | * C code. Therefore we cannot annotate them always with | ||
8 | * 'UL' and other type specificers unilaterally. We | ||
9 | * use the following macros to deal with this. | ||
10 | */ | ||
11 | |||
12 | #ifdef __ASSEMBLY__ | ||
13 | #define _AC(X,Y) X | ||
14 | #else | ||
15 | #define __AC(X,Y) (X##Y) | ||
16 | #define _AC(X,Y) __AC(X,Y) | ||
17 | #endif | ||
18 | |||
19 | |||
20 | #endif /* !(_X86_64_CONST_H) */ | ||
diff --git a/include/asm-x86_64/desc.h b/include/asm-x86_64/desc.h index 913d6ac00033..ac991b5ca0fd 100644 --- a/include/asm-x86_64/desc.h +++ b/include/asm-x86_64/desc.h | |||
@@ -107,16 +107,6 @@ static inline void set_ldt_desc(unsigned cpu, void *addr, int size) | |||
107 | DESC_LDT, size * 8 - 1); | 107 | DESC_LDT, size * 8 - 1); |
108 | } | 108 | } |
109 | 109 | ||
110 | static inline void set_seg_base(unsigned cpu, int entry, void *base) | ||
111 | { | ||
112 | struct desc_struct *d = &cpu_gdt(cpu)[entry]; | ||
113 | u32 addr = (u32)(u64)base; | ||
114 | BUG_ON((u64)base >> 32); | ||
115 | d->base0 = addr & 0xffff; | ||
116 | d->base1 = (addr >> 16) & 0xff; | ||
117 | d->base2 = (addr >> 24) & 0xff; | ||
118 | } | ||
119 | |||
120 | #define LDT_entry_a(info) \ | 110 | #define LDT_entry_a(info) \ |
121 | ((((info)->base_addr & 0x0000ffff) << 16) | ((info)->limit & 0x0ffff)) | 111 | ((((info)->base_addr & 0x0000ffff) << 16) | ((info)->limit & 0x0ffff)) |
122 | /* Don't allow setting of the lm bit. It is useless anyways because | 112 | /* Don't allow setting of the lm bit. It is useless anyways because |
@@ -145,16 +135,13 @@ static inline void set_seg_base(unsigned cpu, int entry, void *base) | |||
145 | (info)->useable == 0 && \ | 135 | (info)->useable == 0 && \ |
146 | (info)->lm == 0) | 136 | (info)->lm == 0) |
147 | 137 | ||
148 | #if TLS_SIZE != 24 | ||
149 | # error update this code. | ||
150 | #endif | ||
151 | |||
152 | static inline void load_TLS(struct thread_struct *t, unsigned int cpu) | 138 | static inline void load_TLS(struct thread_struct *t, unsigned int cpu) |
153 | { | 139 | { |
140 | unsigned int i; | ||
154 | u64 *gdt = (u64 *)(cpu_gdt(cpu) + GDT_ENTRY_TLS_MIN); | 141 | u64 *gdt = (u64 *)(cpu_gdt(cpu) + GDT_ENTRY_TLS_MIN); |
155 | gdt[0] = t->tls_array[0]; | 142 | |
156 | gdt[1] = t->tls_array[1]; | 143 | for (i = 0; i < GDT_ENTRY_TLS_ENTRIES; i++) |
157 | gdt[2] = t->tls_array[2]; | 144 | gdt[i] = t->tls_array[i]; |
158 | } | 145 | } |
159 | 146 | ||
160 | /* | 147 | /* |
diff --git a/include/asm-x86_64/dma-mapping.h b/include/asm-x86_64/dma-mapping.h index d2af227f06d0..6897e2a436e5 100644 --- a/include/asm-x86_64/dma-mapping.h +++ b/include/asm-x86_64/dma-mapping.h | |||
@@ -52,7 +52,7 @@ struct dma_mapping_ops { | |||
52 | }; | 52 | }; |
53 | 53 | ||
54 | extern dma_addr_t bad_dma_address; | 54 | extern dma_addr_t bad_dma_address; |
55 | extern struct dma_mapping_ops* dma_ops; | 55 | extern const struct dma_mapping_ops* dma_ops; |
56 | extern int iommu_merge; | 56 | extern int iommu_merge; |
57 | 57 | ||
58 | static inline int dma_mapping_error(dma_addr_t dma_addr) | 58 | static inline int dma_mapping_error(dma_addr_t dma_addr) |
diff --git a/include/asm-x86_64/fixmap.h b/include/asm-x86_64/fixmap.h index 1b620db5b9e3..e90e1677531b 100644 --- a/include/asm-x86_64/fixmap.h +++ b/include/asm-x86_64/fixmap.h | |||
@@ -15,7 +15,6 @@ | |||
15 | #include <asm/apicdef.h> | 15 | #include <asm/apicdef.h> |
16 | #include <asm/page.h> | 16 | #include <asm/page.h> |
17 | #include <asm/vsyscall.h> | 17 | #include <asm/vsyscall.h> |
18 | #include <asm/vsyscall32.h> | ||
19 | 18 | ||
20 | /* | 19 | /* |
21 | * Here we define all the compile-time 'special' virtual | 20 | * Here we define all the compile-time 'special' virtual |
diff --git a/include/asm-x86_64/genapic.h b/include/asm-x86_64/genapic.h index b80f4bb5f273..d7e516ccbaa4 100644 --- a/include/asm-x86_64/genapic.h +++ b/include/asm-x86_64/genapic.h | |||
@@ -29,7 +29,9 @@ struct genapic { | |||
29 | unsigned int (*phys_pkg_id)(int index_msb); | 29 | unsigned int (*phys_pkg_id)(int index_msb); |
30 | }; | 30 | }; |
31 | 31 | ||
32 | extern struct genapic *genapic; | ||
32 | 33 | ||
33 | extern struct genapic *genapic, *genapic_force, apic_flat; | 34 | extern struct genapic apic_flat; |
35 | extern struct genapic apic_physflat; | ||
34 | 36 | ||
35 | #endif | 37 | #endif |
diff --git a/include/asm-x86_64/ipi.h b/include/asm-x86_64/ipi.h index 2a5c162b7d92..a7c75ea408a8 100644 --- a/include/asm-x86_64/ipi.h +++ b/include/asm-x86_64/ipi.h | |||
@@ -18,10 +18,8 @@ | |||
18 | * Subject to the GNU Public License, v.2 | 18 | * Subject to the GNU Public License, v.2 |
19 | */ | 19 | */ |
20 | 20 | ||
21 | #include <asm/fixmap.h> | ||
22 | #include <asm/hw_irq.h> | 21 | #include <asm/hw_irq.h> |
23 | #include <asm/apicdef.h> | 22 | #include <asm/apic.h> |
24 | #include <asm/genapic.h> | ||
25 | 23 | ||
26 | /* | 24 | /* |
27 | * the following functions deal with sending IPIs between CPUs. | 25 | * the following functions deal with sending IPIs between CPUs. |
@@ -76,10 +74,42 @@ static inline void __send_IPI_shortcut(unsigned int shortcut, int vector, unsign | |||
76 | apic_write(APIC_ICR, cfg); | 74 | apic_write(APIC_ICR, cfg); |
77 | } | 75 | } |
78 | 76 | ||
77 | /* | ||
78 | * This is used to send an IPI with no shorthand notation (the destination is | ||
79 | * specified in bits 56 to 63 of the ICR). | ||
80 | */ | ||
81 | static inline void __send_IPI_dest_field(unsigned int mask, int vector, unsigned int dest) | ||
82 | { | ||
83 | unsigned long cfg; | ||
84 | |||
85 | /* | ||
86 | * Wait for idle. | ||
87 | */ | ||
88 | if (unlikely(vector == NMI_VECTOR)) | ||
89 | safe_apic_wait_icr_idle(); | ||
90 | else | ||
91 | apic_wait_icr_idle(); | ||
92 | |||
93 | /* | ||
94 | * prepare target chip field | ||
95 | */ | ||
96 | cfg = __prepare_ICR2(mask); | ||
97 | apic_write(APIC_ICR2, cfg); | ||
98 | |||
99 | /* | ||
100 | * program the ICR | ||
101 | */ | ||
102 | cfg = __prepare_ICR(0, vector, dest); | ||
103 | |||
104 | /* | ||
105 | * Send the IPI. The write to APIC_ICR fires this off. | ||
106 | */ | ||
107 | apic_write(APIC_ICR, cfg); | ||
108 | } | ||
79 | 109 | ||
80 | static inline void send_IPI_mask_sequence(cpumask_t mask, int vector) | 110 | static inline void send_IPI_mask_sequence(cpumask_t mask, int vector) |
81 | { | 111 | { |
82 | unsigned long cfg, flags; | 112 | unsigned long flags; |
83 | unsigned long query_cpu; | 113 | unsigned long query_cpu; |
84 | 114 | ||
85 | /* | 115 | /* |
@@ -88,28 +118,9 @@ static inline void send_IPI_mask_sequence(cpumask_t mask, int vector) | |||
88 | * - mbligh | 118 | * - mbligh |
89 | */ | 119 | */ |
90 | local_irq_save(flags); | 120 | local_irq_save(flags); |
91 | |||
92 | for_each_cpu_mask(query_cpu, mask) { | 121 | for_each_cpu_mask(query_cpu, mask) { |
93 | /* | 122 | __send_IPI_dest_field(x86_cpu_to_apicid[query_cpu], |
94 | * Wait for idle. | 123 | vector, APIC_DEST_PHYSICAL); |
95 | */ | ||
96 | apic_wait_icr_idle(); | ||
97 | |||
98 | /* | ||
99 | * prepare target chip field | ||
100 | */ | ||
101 | cfg = __prepare_ICR2(x86_cpu_to_apicid[query_cpu]); | ||
102 | apic_write(APIC_ICR2, cfg); | ||
103 | |||
104 | /* | ||
105 | * program the ICR | ||
106 | */ | ||
107 | cfg = __prepare_ICR(0, vector, APIC_DEST_PHYSICAL); | ||
108 | |||
109 | /* | ||
110 | * Send the IPI. The write to APIC_ICR fires this off. | ||
111 | */ | ||
112 | apic_write(APIC_ICR, cfg); | ||
113 | } | 124 | } |
114 | local_irq_restore(flags); | 125 | local_irq_restore(flags); |
115 | } | 126 | } |
diff --git a/include/asm-x86_64/irqflags.h b/include/asm-x86_64/irqflags.h index cce6937e87c0..86e70fe23659 100644 --- a/include/asm-x86_64/irqflags.h +++ b/include/asm-x86_64/irqflags.h | |||
@@ -9,6 +9,7 @@ | |||
9 | */ | 9 | */ |
10 | #ifndef _ASM_IRQFLAGS_H | 10 | #ifndef _ASM_IRQFLAGS_H |
11 | #define _ASM_IRQFLAGS_H | 11 | #define _ASM_IRQFLAGS_H |
12 | #include <asm/processor-flags.h> | ||
12 | 13 | ||
13 | #ifndef __ASSEMBLY__ | 14 | #ifndef __ASSEMBLY__ |
14 | /* | 15 | /* |
@@ -53,19 +54,19 @@ static inline void raw_local_irq_disable(void) | |||
53 | { | 54 | { |
54 | unsigned long flags = __raw_local_save_flags(); | 55 | unsigned long flags = __raw_local_save_flags(); |
55 | 56 | ||
56 | raw_local_irq_restore((flags & ~(1 << 9)) | (1 << 18)); | 57 | raw_local_irq_restore((flags & ~X86_EFLAGS_IF) | X86_EFLAGS_AC); |
57 | } | 58 | } |
58 | 59 | ||
59 | static inline void raw_local_irq_enable(void) | 60 | static inline void raw_local_irq_enable(void) |
60 | { | 61 | { |
61 | unsigned long flags = __raw_local_save_flags(); | 62 | unsigned long flags = __raw_local_save_flags(); |
62 | 63 | ||
63 | raw_local_irq_restore((flags | (1 << 9)) & ~(1 << 18)); | 64 | raw_local_irq_restore((flags | X86_EFLAGS_IF) & (~X86_EFLAGS_AC)); |
64 | } | 65 | } |
65 | 66 | ||
66 | static inline int raw_irqs_disabled_flags(unsigned long flags) | 67 | static inline int raw_irqs_disabled_flags(unsigned long flags) |
67 | { | 68 | { |
68 | return !(flags & (1<<9)) || (flags & (1 << 18)); | 69 | return !(flags & X86_EFLAGS_IF) || (flags & X86_EFLAGS_AC); |
69 | } | 70 | } |
70 | 71 | ||
71 | #else /* CONFIG_X86_VSMP */ | 72 | #else /* CONFIG_X86_VSMP */ |
@@ -82,7 +83,7 @@ static inline void raw_local_irq_enable(void) | |||
82 | 83 | ||
83 | static inline int raw_irqs_disabled_flags(unsigned long flags) | 84 | static inline int raw_irqs_disabled_flags(unsigned long flags) |
84 | { | 85 | { |
85 | return !(flags & (1 << 9)); | 86 | return !(flags & X86_EFLAGS_IF); |
86 | } | 87 | } |
87 | 88 | ||
88 | #endif | 89 | #endif |
diff --git a/include/asm-x86_64/mmu_context.h b/include/asm-x86_64/mmu_context.h index af03b9f852d6..0cce83a78378 100644 --- a/include/asm-x86_64/mmu_context.h +++ b/include/asm-x86_64/mmu_context.h | |||
@@ -7,6 +7,7 @@ | |||
7 | #include <asm/pda.h> | 7 | #include <asm/pda.h> |
8 | #include <asm/pgtable.h> | 8 | #include <asm/pgtable.h> |
9 | #include <asm/tlbflush.h> | 9 | #include <asm/tlbflush.h> |
10 | #include <asm-generic/mm_hooks.h> | ||
10 | 11 | ||
11 | /* | 12 | /* |
12 | * possibly do the LDT unload here? | 13 | * possibly do the LDT unload here? |
diff --git a/include/asm-x86_64/mmzone.h b/include/asm-x86_64/mmzone.h index fb558fb1d211..19a89377b123 100644 --- a/include/asm-x86_64/mmzone.h +++ b/include/asm-x86_64/mmzone.h | |||
@@ -49,7 +49,7 @@ extern int pfn_valid(unsigned long pfn); | |||
49 | 49 | ||
50 | #ifdef CONFIG_NUMA_EMU | 50 | #ifdef CONFIG_NUMA_EMU |
51 | #define FAKE_NODE_MIN_SIZE (64*1024*1024) | 51 | #define FAKE_NODE_MIN_SIZE (64*1024*1024) |
52 | #define FAKE_NODE_MIN_HASH_MASK (~(FAKE_NODE_MIN_SIZE - 1ul)) | 52 | #define FAKE_NODE_MIN_HASH_MASK (~(FAKE_NODE_MIN_SIZE - 1uL)) |
53 | #endif | 53 | #endif |
54 | 54 | ||
55 | #endif | 55 | #endif |
diff --git a/include/asm-x86_64/msr-index.h b/include/asm-x86_64/msr-index.h new file mode 100644 index 000000000000..d77a63f1ddf2 --- /dev/null +++ b/include/asm-x86_64/msr-index.h | |||
@@ -0,0 +1 @@ | |||
#include <asm-i386/msr-index.h> | |||
diff --git a/include/asm-x86_64/msr.h b/include/asm-x86_64/msr.h index 902f9a58617e..a524f0325673 100644 --- a/include/asm-x86_64/msr.h +++ b/include/asm-x86_64/msr.h | |||
@@ -1,6 +1,8 @@ | |||
1 | #ifndef X86_64_MSR_H | 1 | #ifndef X86_64_MSR_H |
2 | #define X86_64_MSR_H 1 | 2 | #define X86_64_MSR_H 1 |
3 | 3 | ||
4 | #include <asm/msr-index.h> | ||
5 | |||
4 | #ifndef __ASSEMBLY__ | 6 | #ifndef __ASSEMBLY__ |
5 | /* | 7 | /* |
6 | * Access to machine-specific registers (available on 586 and better only) | 8 | * Access to machine-specific registers (available on 586 and better only) |
@@ -157,9 +159,6 @@ static inline unsigned int cpuid_edx(unsigned int op) | |||
157 | return edx; | 159 | return edx; |
158 | } | 160 | } |
159 | 161 | ||
160 | #define MSR_IA32_UCODE_WRITE 0x79 | ||
161 | #define MSR_IA32_UCODE_REV 0x8b | ||
162 | |||
163 | #ifdef CONFIG_SMP | 162 | #ifdef CONFIG_SMP |
164 | void rdmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h); | 163 | void rdmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h); |
165 | void wrmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h); | 164 | void wrmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h); |
@@ -172,269 +171,6 @@ static inline void wrmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h) | |||
172 | { | 171 | { |
173 | wrmsr(msr_no, l, h); | 172 | wrmsr(msr_no, l, h); |
174 | } | 173 | } |
175 | #endif /* CONFIG_SMP */ | 174 | #endif /* CONFIG_SMP */ |
176 | 175 | #endif /* __ASSEMBLY__ */ | |
177 | #endif | 176 | #endif /* X86_64_MSR_H */ |
178 | |||
179 | /* AMD/K8 specific MSRs */ | ||
180 | #define MSR_EFER 0xc0000080 /* extended feature register */ | ||
181 | #define MSR_STAR 0xc0000081 /* legacy mode SYSCALL target */ | ||
182 | #define MSR_LSTAR 0xc0000082 /* long mode SYSCALL target */ | ||
183 | #define MSR_CSTAR 0xc0000083 /* compatibility mode SYSCALL target */ | ||
184 | #define MSR_SYSCALL_MASK 0xc0000084 /* EFLAGS mask for syscall */ | ||
185 | #define MSR_FS_BASE 0xc0000100 /* 64bit FS base */ | ||
186 | #define MSR_GS_BASE 0xc0000101 /* 64bit GS base */ | ||
187 | #define MSR_KERNEL_GS_BASE 0xc0000102 /* SwapGS GS shadow (or USER_GS from kernel) */ | ||
188 | /* EFER bits: */ | ||
189 | #define _EFER_SCE 0 /* SYSCALL/SYSRET */ | ||
190 | #define _EFER_LME 8 /* Long mode enable */ | ||
191 | #define _EFER_LMA 10 /* Long mode active (read-only) */ | ||
192 | #define _EFER_NX 11 /* No execute enable */ | ||
193 | |||
194 | #define EFER_SCE (1<<_EFER_SCE) | ||
195 | #define EFER_LME (1<<_EFER_LME) | ||
196 | #define EFER_LMA (1<<_EFER_LMA) | ||
197 | #define EFER_NX (1<<_EFER_NX) | ||
198 | |||
199 | /* Intel MSRs. Some also available on other CPUs */ | ||
200 | #define MSR_IA32_TSC 0x10 | ||
201 | #define MSR_IA32_PLATFORM_ID 0x17 | ||
202 | |||
203 | #define MSR_IA32_PERFCTR0 0xc1 | ||
204 | #define MSR_IA32_PERFCTR1 0xc2 | ||
205 | #define MSR_FSB_FREQ 0xcd | ||
206 | |||
207 | #define MSR_MTRRcap 0x0fe | ||
208 | #define MSR_IA32_BBL_CR_CTL 0x119 | ||
209 | |||
210 | #define MSR_IA32_SYSENTER_CS 0x174 | ||
211 | #define MSR_IA32_SYSENTER_ESP 0x175 | ||
212 | #define MSR_IA32_SYSENTER_EIP 0x176 | ||
213 | |||
214 | #define MSR_IA32_MCG_CAP 0x179 | ||
215 | #define MSR_IA32_MCG_STATUS 0x17a | ||
216 | #define MSR_IA32_MCG_CTL 0x17b | ||
217 | |||
218 | #define MSR_IA32_EVNTSEL0 0x186 | ||
219 | #define MSR_IA32_EVNTSEL1 0x187 | ||
220 | |||
221 | #define MSR_IA32_DEBUGCTLMSR 0x1d9 | ||
222 | #define MSR_IA32_LASTBRANCHFROMIP 0x1db | ||
223 | #define MSR_IA32_LASTBRANCHTOIP 0x1dc | ||
224 | #define MSR_IA32_LASTINTFROMIP 0x1dd | ||
225 | #define MSR_IA32_LASTINTTOIP 0x1de | ||
226 | |||
227 | #define MSR_IA32_PEBS_ENABLE 0x3f1 | ||
228 | #define MSR_IA32_DS_AREA 0x600 | ||
229 | #define MSR_IA32_PERF_CAPABILITIES 0x345 | ||
230 | |||
231 | #define MSR_MTRRfix64K_00000 0x250 | ||
232 | #define MSR_MTRRfix16K_80000 0x258 | ||
233 | #define MSR_MTRRfix16K_A0000 0x259 | ||
234 | #define MSR_MTRRfix4K_C0000 0x268 | ||
235 | #define MSR_MTRRfix4K_C8000 0x269 | ||
236 | #define MSR_MTRRfix4K_D0000 0x26a | ||
237 | #define MSR_MTRRfix4K_D8000 0x26b | ||
238 | #define MSR_MTRRfix4K_E0000 0x26c | ||
239 | #define MSR_MTRRfix4K_E8000 0x26d | ||
240 | #define MSR_MTRRfix4K_F0000 0x26e | ||
241 | #define MSR_MTRRfix4K_F8000 0x26f | ||
242 | #define MSR_MTRRdefType 0x2ff | ||
243 | |||
244 | #define MSR_IA32_MC0_CTL 0x400 | ||
245 | #define MSR_IA32_MC0_STATUS 0x401 | ||
246 | #define MSR_IA32_MC0_ADDR 0x402 | ||
247 | #define MSR_IA32_MC0_MISC 0x403 | ||
248 | |||
249 | #define MSR_P6_PERFCTR0 0xc1 | ||
250 | #define MSR_P6_PERFCTR1 0xc2 | ||
251 | #define MSR_P6_EVNTSEL0 0x186 | ||
252 | #define MSR_P6_EVNTSEL1 0x187 | ||
253 | |||
254 | /* K7/K8 MSRs. Not complete. See the architecture manual for a more complete list. */ | ||
255 | #define MSR_K7_EVNTSEL0 0xC0010000 | ||
256 | #define MSR_K7_PERFCTR0 0xC0010004 | ||
257 | #define MSR_K7_EVNTSEL1 0xC0010001 | ||
258 | #define MSR_K7_PERFCTR1 0xC0010005 | ||
259 | #define MSR_K7_EVNTSEL2 0xC0010002 | ||
260 | #define MSR_K7_PERFCTR2 0xC0010006 | ||
261 | #define MSR_K7_EVNTSEL3 0xC0010003 | ||
262 | #define MSR_K7_PERFCTR3 0xC0010007 | ||
263 | #define MSR_K8_TOP_MEM1 0xC001001A | ||
264 | #define MSR_K8_TOP_MEM2 0xC001001D | ||
265 | #define MSR_K8_SYSCFG 0xC0010010 | ||
266 | #define MSR_K8_HWCR 0xC0010015 | ||
267 | |||
268 | /* K6 MSRs */ | ||
269 | #define MSR_K6_EFER 0xC0000080 | ||
270 | #define MSR_K6_STAR 0xC0000081 | ||
271 | #define MSR_K6_WHCR 0xC0000082 | ||
272 | #define MSR_K6_UWCCR 0xC0000085 | ||
273 | #define MSR_K6_PSOR 0xC0000087 | ||
274 | #define MSR_K6_PFIR 0xC0000088 | ||
275 | |||
276 | /* Centaur-Hauls/IDT defined MSRs. */ | ||
277 | #define MSR_IDT_FCR1 0x107 | ||
278 | #define MSR_IDT_FCR2 0x108 | ||
279 | #define MSR_IDT_FCR3 0x109 | ||
280 | #define MSR_IDT_FCR4 0x10a | ||
281 | |||
282 | #define MSR_IDT_MCR0 0x110 | ||
283 | #define MSR_IDT_MCR1 0x111 | ||
284 | #define MSR_IDT_MCR2 0x112 | ||
285 | #define MSR_IDT_MCR3 0x113 | ||
286 | #define MSR_IDT_MCR4 0x114 | ||
287 | #define MSR_IDT_MCR5 0x115 | ||
288 | #define MSR_IDT_MCR6 0x116 | ||
289 | #define MSR_IDT_MCR7 0x117 | ||
290 | #define MSR_IDT_MCR_CTRL 0x120 | ||
291 | |||
292 | /* VIA Cyrix defined MSRs*/ | ||
293 | #define MSR_VIA_FCR 0x1107 | ||
294 | #define MSR_VIA_LONGHAUL 0x110a | ||
295 | #define MSR_VIA_RNG 0x110b | ||
296 | #define MSR_VIA_BCR2 0x1147 | ||
297 | |||
298 | /* Intel defined MSRs. */ | ||
299 | #define MSR_IA32_P5_MC_ADDR 0 | ||
300 | #define MSR_IA32_P5_MC_TYPE 1 | ||
301 | #define MSR_IA32_PLATFORM_ID 0x17 | ||
302 | #define MSR_IA32_EBL_CR_POWERON 0x2a | ||
303 | |||
304 | #define MSR_IA32_APICBASE 0x1b | ||
305 | #define MSR_IA32_APICBASE_BSP (1<<8) | ||
306 | #define MSR_IA32_APICBASE_ENABLE (1<<11) | ||
307 | #define MSR_IA32_APICBASE_BASE (0xfffff<<12) | ||
308 | |||
309 | /* P4/Xeon+ specific */ | ||
310 | #define MSR_IA32_MCG_EAX 0x180 | ||
311 | #define MSR_IA32_MCG_EBX 0x181 | ||
312 | #define MSR_IA32_MCG_ECX 0x182 | ||
313 | #define MSR_IA32_MCG_EDX 0x183 | ||
314 | #define MSR_IA32_MCG_ESI 0x184 | ||
315 | #define MSR_IA32_MCG_EDI 0x185 | ||
316 | #define MSR_IA32_MCG_EBP 0x186 | ||
317 | #define MSR_IA32_MCG_ESP 0x187 | ||
318 | #define MSR_IA32_MCG_EFLAGS 0x188 | ||
319 | #define MSR_IA32_MCG_EIP 0x189 | ||
320 | #define MSR_IA32_MCG_RESERVED 0x18A | ||
321 | |||
322 | #define MSR_P6_EVNTSEL0 0x186 | ||
323 | #define MSR_P6_EVNTSEL1 0x187 | ||
324 | |||
325 | #define MSR_IA32_PERF_STATUS 0x198 | ||
326 | #define MSR_IA32_PERF_CTL 0x199 | ||
327 | |||
328 | #define MSR_IA32_MPERF 0xE7 | ||
329 | #define MSR_IA32_APERF 0xE8 | ||
330 | |||
331 | #define MSR_IA32_THERM_CONTROL 0x19a | ||
332 | #define MSR_IA32_THERM_INTERRUPT 0x19b | ||
333 | #define MSR_IA32_THERM_STATUS 0x19c | ||
334 | #define MSR_IA32_MISC_ENABLE 0x1a0 | ||
335 | |||
336 | #define MSR_IA32_DEBUGCTLMSR 0x1d9 | ||
337 | #define MSR_IA32_LASTBRANCHFROMIP 0x1db | ||
338 | #define MSR_IA32_LASTBRANCHTOIP 0x1dc | ||
339 | #define MSR_IA32_LASTINTFROMIP 0x1dd | ||
340 | #define MSR_IA32_LASTINTTOIP 0x1de | ||
341 | |||
342 | #define MSR_IA32_MC0_CTL 0x400 | ||
343 | #define MSR_IA32_MC0_STATUS 0x401 | ||
344 | #define MSR_IA32_MC0_ADDR 0x402 | ||
345 | #define MSR_IA32_MC0_MISC 0x403 | ||
346 | |||
347 | /* Pentium IV performance counter MSRs */ | ||
348 | #define MSR_P4_BPU_PERFCTR0 0x300 | ||
349 | #define MSR_P4_BPU_PERFCTR1 0x301 | ||
350 | #define MSR_P4_BPU_PERFCTR2 0x302 | ||
351 | #define MSR_P4_BPU_PERFCTR3 0x303 | ||
352 | #define MSR_P4_MS_PERFCTR0 0x304 | ||
353 | #define MSR_P4_MS_PERFCTR1 0x305 | ||
354 | #define MSR_P4_MS_PERFCTR2 0x306 | ||
355 | #define MSR_P4_MS_PERFCTR3 0x307 | ||
356 | #define MSR_P4_FLAME_PERFCTR0 0x308 | ||
357 | #define MSR_P4_FLAME_PERFCTR1 0x309 | ||
358 | #define MSR_P4_FLAME_PERFCTR2 0x30a | ||
359 | #define MSR_P4_FLAME_PERFCTR3 0x30b | ||
360 | #define MSR_P4_IQ_PERFCTR0 0x30c | ||
361 | #define MSR_P4_IQ_PERFCTR1 0x30d | ||
362 | #define MSR_P4_IQ_PERFCTR2 0x30e | ||
363 | #define MSR_P4_IQ_PERFCTR3 0x30f | ||
364 | #define MSR_P4_IQ_PERFCTR4 0x310 | ||
365 | #define MSR_P4_IQ_PERFCTR5 0x311 | ||
366 | #define MSR_P4_BPU_CCCR0 0x360 | ||
367 | #define MSR_P4_BPU_CCCR1 0x361 | ||
368 | #define MSR_P4_BPU_CCCR2 0x362 | ||
369 | #define MSR_P4_BPU_CCCR3 0x363 | ||
370 | #define MSR_P4_MS_CCCR0 0x364 | ||
371 | #define MSR_P4_MS_CCCR1 0x365 | ||
372 | #define MSR_P4_MS_CCCR2 0x366 | ||
373 | #define MSR_P4_MS_CCCR3 0x367 | ||
374 | #define MSR_P4_FLAME_CCCR0 0x368 | ||
375 | #define MSR_P4_FLAME_CCCR1 0x369 | ||
376 | #define MSR_P4_FLAME_CCCR2 0x36a | ||
377 | #define MSR_P4_FLAME_CCCR3 0x36b | ||
378 | #define MSR_P4_IQ_CCCR0 0x36c | ||
379 | #define MSR_P4_IQ_CCCR1 0x36d | ||
380 | #define MSR_P4_IQ_CCCR2 0x36e | ||
381 | #define MSR_P4_IQ_CCCR3 0x36f | ||
382 | #define MSR_P4_IQ_CCCR4 0x370 | ||
383 | #define MSR_P4_IQ_CCCR5 0x371 | ||
384 | #define MSR_P4_ALF_ESCR0 0x3ca | ||
385 | #define MSR_P4_ALF_ESCR1 0x3cb | ||
386 | #define MSR_P4_BPU_ESCR0 0x3b2 | ||
387 | #define MSR_P4_BPU_ESCR1 0x3b3 | ||
388 | #define MSR_P4_BSU_ESCR0 0x3a0 | ||
389 | #define MSR_P4_BSU_ESCR1 0x3a1 | ||
390 | #define MSR_P4_CRU_ESCR0 0x3b8 | ||
391 | #define MSR_P4_CRU_ESCR1 0x3b9 | ||
392 | #define MSR_P4_CRU_ESCR2 0x3cc | ||
393 | #define MSR_P4_CRU_ESCR3 0x3cd | ||
394 | #define MSR_P4_CRU_ESCR4 0x3e0 | ||
395 | #define MSR_P4_CRU_ESCR5 0x3e1 | ||
396 | #define MSR_P4_DAC_ESCR0 0x3a8 | ||
397 | #define MSR_P4_DAC_ESCR1 0x3a9 | ||
398 | #define MSR_P4_FIRM_ESCR0 0x3a4 | ||
399 | #define MSR_P4_FIRM_ESCR1 0x3a5 | ||
400 | #define MSR_P4_FLAME_ESCR0 0x3a6 | ||
401 | #define MSR_P4_FLAME_ESCR1 0x3a7 | ||
402 | #define MSR_P4_FSB_ESCR0 0x3a2 | ||
403 | #define MSR_P4_FSB_ESCR1 0x3a3 | ||
404 | #define MSR_P4_IQ_ESCR0 0x3ba | ||
405 | #define MSR_P4_IQ_ESCR1 0x3bb | ||
406 | #define MSR_P4_IS_ESCR0 0x3b4 | ||
407 | #define MSR_P4_IS_ESCR1 0x3b5 | ||
408 | #define MSR_P4_ITLB_ESCR0 0x3b6 | ||
409 | #define MSR_P4_ITLB_ESCR1 0x3b7 | ||
410 | #define MSR_P4_IX_ESCR0 0x3c8 | ||
411 | #define MSR_P4_IX_ESCR1 0x3c9 | ||
412 | #define MSR_P4_MOB_ESCR0 0x3aa | ||
413 | #define MSR_P4_MOB_ESCR1 0x3ab | ||
414 | #define MSR_P4_MS_ESCR0 0x3c0 | ||
415 | #define MSR_P4_MS_ESCR1 0x3c1 | ||
416 | #define MSR_P4_PMH_ESCR0 0x3ac | ||
417 | #define MSR_P4_PMH_ESCR1 0x3ad | ||
418 | #define MSR_P4_RAT_ESCR0 0x3bc | ||
419 | #define MSR_P4_RAT_ESCR1 0x3bd | ||
420 | #define MSR_P4_SAAT_ESCR0 0x3ae | ||
421 | #define MSR_P4_SAAT_ESCR1 0x3af | ||
422 | #define MSR_P4_SSU_ESCR0 0x3be | ||
423 | #define MSR_P4_SSU_ESCR1 0x3bf /* guess: not defined in manual */ | ||
424 | #define MSR_P4_TBPU_ESCR0 0x3c2 | ||
425 | #define MSR_P4_TBPU_ESCR1 0x3c3 | ||
426 | #define MSR_P4_TC_ESCR0 0x3c4 | ||
427 | #define MSR_P4_TC_ESCR1 0x3c5 | ||
428 | #define MSR_P4_U2L_ESCR0 0x3b0 | ||
429 | #define MSR_P4_U2L_ESCR1 0x3b1 | ||
430 | |||
431 | /* Intel Core-based CPU performance counters */ | ||
432 | #define MSR_CORE_PERF_FIXED_CTR0 0x309 | ||
433 | #define MSR_CORE_PERF_FIXED_CTR1 0x30a | ||
434 | #define MSR_CORE_PERF_FIXED_CTR2 0x30b | ||
435 | #define MSR_CORE_PERF_FIXED_CTR_CTRL 0x38d | ||
436 | #define MSR_CORE_PERF_GLOBAL_STATUS 0x38e | ||
437 | #define MSR_CORE_PERF_GLOBAL_CTRL 0x38f | ||
438 | #define MSR_CORE_PERF_GLOBAL_OVF_CTRL 0x390 | ||
439 | |||
440 | #endif | ||
diff --git a/include/asm-x86_64/mtrr.h b/include/asm-x86_64/mtrr.h index d6135b2549bf..b557c486bef8 100644 --- a/include/asm-x86_64/mtrr.h +++ b/include/asm-x86_64/mtrr.h | |||
@@ -135,6 +135,18 @@ struct mtrr_gentry32 | |||
135 | 135 | ||
136 | #endif /* CONFIG_COMPAT */ | 136 | #endif /* CONFIG_COMPAT */ |
137 | 137 | ||
138 | #ifdef CONFIG_MTRR | ||
139 | extern void mtrr_ap_init(void); | ||
140 | extern void mtrr_bp_init(void); | ||
141 | extern void mtrr_save_fixed_ranges(void *); | ||
142 | extern void mtrr_save_state(void); | ||
143 | #else | ||
144 | #define mtrr_ap_init() do {} while (0) | ||
145 | #define mtrr_bp_init() do {} while (0) | ||
146 | #define mtrr_save_fixed_ranges(arg) do {} while (0) | ||
147 | #define mtrr_save_state() do {} while (0) | ||
148 | #endif | ||
149 | |||
138 | #endif /* __KERNEL__ */ | 150 | #endif /* __KERNEL__ */ |
139 | 151 | ||
140 | #endif /* _LINUX_MTRR_H */ | 152 | #endif /* _LINUX_MTRR_H */ |
diff --git a/include/asm-x86_64/nmi.h b/include/asm-x86_64/nmi.h index 72375e7d32a8..d0a7f53b1497 100644 --- a/include/asm-x86_64/nmi.h +++ b/include/asm-x86_64/nmi.h | |||
@@ -80,4 +80,13 @@ extern int unknown_nmi_panic; | |||
80 | void __trigger_all_cpu_backtrace(void); | 80 | void __trigger_all_cpu_backtrace(void); |
81 | #define trigger_all_cpu_backtrace() __trigger_all_cpu_backtrace() | 81 | #define trigger_all_cpu_backtrace() __trigger_all_cpu_backtrace() |
82 | 82 | ||
83 | |||
84 | void lapic_watchdog_stop(void); | ||
85 | int lapic_watchdog_init(unsigned nmi_hz); | ||
86 | int lapic_wd_event(unsigned nmi_hz); | ||
87 | unsigned lapic_adjust_nmi_hz(unsigned hz); | ||
88 | int lapic_watchdog_ok(void); | ||
89 | void disable_lapic_nmi_watchdog(void); | ||
90 | void enable_lapic_nmi_watchdog(void); | ||
91 | |||
83 | #endif /* ASM_NMI_H */ | 92 | #endif /* ASM_NMI_H */ |
diff --git a/include/asm-x86_64/page.h b/include/asm-x86_64/page.h index 10f346165cab..b17fc16ec2eb 100644 --- a/include/asm-x86_64/page.h +++ b/include/asm-x86_64/page.h | |||
@@ -1,14 +1,11 @@ | |||
1 | #ifndef _X86_64_PAGE_H | 1 | #ifndef _X86_64_PAGE_H |
2 | #define _X86_64_PAGE_H | 2 | #define _X86_64_PAGE_H |
3 | 3 | ||
4 | #include <asm/const.h> | ||
4 | 5 | ||
5 | /* PAGE_SHIFT determines the page size */ | 6 | /* PAGE_SHIFT determines the page size */ |
6 | #define PAGE_SHIFT 12 | 7 | #define PAGE_SHIFT 12 |
7 | #ifdef __ASSEMBLY__ | 8 | #define PAGE_SIZE (_AC(1,UL) << PAGE_SHIFT) |
8 | #define PAGE_SIZE (0x1 << PAGE_SHIFT) | ||
9 | #else | ||
10 | #define PAGE_SIZE (1UL << PAGE_SHIFT) | ||
11 | #endif | ||
12 | #define PAGE_MASK (~(PAGE_SIZE-1)) | 9 | #define PAGE_MASK (~(PAGE_SIZE-1)) |
13 | #define PHYSICAL_PAGE_MASK (~(PAGE_SIZE-1) & __PHYSICAL_MASK) | 10 | #define PHYSICAL_PAGE_MASK (~(PAGE_SIZE-1) & __PHYSICAL_MASK) |
14 | 11 | ||
@@ -33,10 +30,10 @@ | |||
33 | #define N_EXCEPTION_STACKS 5 /* hw limit: 7 */ | 30 | #define N_EXCEPTION_STACKS 5 /* hw limit: 7 */ |
34 | 31 | ||
35 | #define LARGE_PAGE_MASK (~(LARGE_PAGE_SIZE-1)) | 32 | #define LARGE_PAGE_MASK (~(LARGE_PAGE_SIZE-1)) |
36 | #define LARGE_PAGE_SIZE (1UL << PMD_SHIFT) | 33 | #define LARGE_PAGE_SIZE (_AC(1,UL) << PMD_SHIFT) |
37 | 34 | ||
38 | #define HPAGE_SHIFT PMD_SHIFT | 35 | #define HPAGE_SHIFT PMD_SHIFT |
39 | #define HPAGE_SIZE ((1UL) << HPAGE_SHIFT) | 36 | #define HPAGE_SIZE (_AC(1,UL) << HPAGE_SHIFT) |
40 | #define HPAGE_MASK (~(HPAGE_SIZE - 1)) | 37 | #define HPAGE_MASK (~(HPAGE_SIZE - 1)) |
41 | #define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT) | 38 | #define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT) |
42 | 39 | ||
@@ -64,6 +61,8 @@ typedef struct { unsigned long pgd; } pgd_t; | |||
64 | 61 | ||
65 | typedef struct { unsigned long pgprot; } pgprot_t; | 62 | typedef struct { unsigned long pgprot; } pgprot_t; |
66 | 63 | ||
64 | extern unsigned long phys_base; | ||
65 | |||
67 | #define pte_val(x) ((x).pte) | 66 | #define pte_val(x) ((x).pte) |
68 | #define pmd_val(x) ((x).pmd) | 67 | #define pmd_val(x) ((x).pmd) |
69 | #define pud_val(x) ((x).pud) | 68 | #define pud_val(x) ((x).pud) |
@@ -76,29 +75,25 @@ typedef struct { unsigned long pgprot; } pgprot_t; | |||
76 | #define __pgd(x) ((pgd_t) { (x) } ) | 75 | #define __pgd(x) ((pgd_t) { (x) } ) |
77 | #define __pgprot(x) ((pgprot_t) { (x) } ) | 76 | #define __pgprot(x) ((pgprot_t) { (x) } ) |
78 | 77 | ||
79 | #define __PHYSICAL_START ((unsigned long)CONFIG_PHYSICAL_START) | 78 | #endif /* !__ASSEMBLY__ */ |
80 | #define __START_KERNEL (__START_KERNEL_map + __PHYSICAL_START) | ||
81 | #define __START_KERNEL_map 0xffffffff80000000UL | ||
82 | #define __PAGE_OFFSET 0xffff810000000000UL | ||
83 | 79 | ||
84 | #else | ||
85 | #define __PHYSICAL_START CONFIG_PHYSICAL_START | 80 | #define __PHYSICAL_START CONFIG_PHYSICAL_START |
81 | #define __KERNEL_ALIGN 0x200000 | ||
86 | #define __START_KERNEL (__START_KERNEL_map + __PHYSICAL_START) | 82 | #define __START_KERNEL (__START_KERNEL_map + __PHYSICAL_START) |
87 | #define __START_KERNEL_map 0xffffffff80000000 | 83 | #define __START_KERNEL_map 0xffffffff80000000 |
88 | #define __PAGE_OFFSET 0xffff810000000000 | 84 | #define __PAGE_OFFSET 0xffff810000000000 |
89 | #endif /* !__ASSEMBLY__ */ | ||
90 | 85 | ||
91 | /* to align the pointer to the (next) page boundary */ | 86 | /* to align the pointer to the (next) page boundary */ |
92 | #define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK) | 87 | #define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK) |
93 | 88 | ||
94 | /* See Documentation/x86_64/mm.txt for a description of the memory map. */ | 89 | /* See Documentation/x86_64/mm.txt for a description of the memory map. */ |
95 | #define __PHYSICAL_MASK_SHIFT 46 | 90 | #define __PHYSICAL_MASK_SHIFT 46 |
96 | #define __PHYSICAL_MASK ((1UL << __PHYSICAL_MASK_SHIFT) - 1) | 91 | #define __PHYSICAL_MASK ((_AC(1,UL) << __PHYSICAL_MASK_SHIFT) - 1) |
97 | #define __VIRTUAL_MASK_SHIFT 48 | 92 | #define __VIRTUAL_MASK_SHIFT 48 |
98 | #define __VIRTUAL_MASK ((1UL << __VIRTUAL_MASK_SHIFT) - 1) | 93 | #define __VIRTUAL_MASK ((_AC(1,UL) << __VIRTUAL_MASK_SHIFT) - 1) |
99 | 94 | ||
100 | #define KERNEL_TEXT_SIZE (40UL*1024*1024) | 95 | #define KERNEL_TEXT_SIZE (40*1024*1024) |
101 | #define KERNEL_TEXT_START 0xffffffff80000000UL | 96 | #define KERNEL_TEXT_START 0xffffffff80000000 |
102 | 97 | ||
103 | #ifndef __ASSEMBLY__ | 98 | #ifndef __ASSEMBLY__ |
104 | 99 | ||
@@ -106,21 +101,19 @@ typedef struct { unsigned long pgprot; } pgprot_t; | |||
106 | 101 | ||
107 | #endif /* __ASSEMBLY__ */ | 102 | #endif /* __ASSEMBLY__ */ |
108 | 103 | ||
109 | #define PAGE_OFFSET ((unsigned long)__PAGE_OFFSET) | 104 | #define PAGE_OFFSET __PAGE_OFFSET |
110 | 105 | ||
111 | /* Note: __pa(&symbol_visible_to_c) should be always replaced with __pa_symbol. | 106 | /* Note: __pa(&symbol_visible_to_c) should be always replaced with __pa_symbol. |
112 | Otherwise you risk miscompilation. */ | 107 | Otherwise you risk miscompilation. */ |
113 | #define __pa(x) (((unsigned long)(x)>=__START_KERNEL_map)?(unsigned long)(x) - (unsigned long)__START_KERNEL_map:(unsigned long)(x) - PAGE_OFFSET) | 108 | #define __pa(x) ((unsigned long)(x) - PAGE_OFFSET) |
114 | /* __pa_symbol should be used for C visible symbols. | 109 | /* __pa_symbol should be used for C visible symbols. |
115 | This seems to be the official gcc blessed way to do such arithmetic. */ | 110 | This seems to be the official gcc blessed way to do such arithmetic. */ |
116 | #define __pa_symbol(x) \ | 111 | #define __pa_symbol(x) \ |
117 | ({unsigned long v; \ | 112 | ({unsigned long v; \ |
118 | asm("" : "=r" (v) : "0" (x)); \ | 113 | asm("" : "=r" (v) : "0" (x)); \ |
119 | __pa(v); }) | 114 | ((v - __START_KERNEL_map) + phys_base); }) |
120 | 115 | ||
121 | #define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET)) | 116 | #define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET)) |
122 | #define __boot_va(x) __va(x) | ||
123 | #define __boot_pa(x) __pa(x) | ||
124 | #ifdef CONFIG_FLATMEM | 117 | #ifdef CONFIG_FLATMEM |
125 | #define pfn_valid(pfn) ((pfn) < end_pfn) | 118 | #define pfn_valid(pfn) ((pfn) < end_pfn) |
126 | #endif | 119 | #endif |
diff --git a/include/asm-x86_64/percpu.h b/include/asm-x86_64/percpu.h index 5ed0ef340842..c6fbb67eac90 100644 --- a/include/asm-x86_64/percpu.h +++ b/include/asm-x86_64/percpu.h | |||
@@ -11,16 +11,6 @@ | |||
11 | 11 | ||
12 | #include <asm/pda.h> | 12 | #include <asm/pda.h> |
13 | 13 | ||
14 | #ifdef CONFIG_MODULES | ||
15 | # define PERCPU_MODULE_RESERVE 8192 | ||
16 | #else | ||
17 | # define PERCPU_MODULE_RESERVE 0 | ||
18 | #endif | ||
19 | |||
20 | #define PERCPU_ENOUGH_ROOM \ | ||
21 | (ALIGN(__per_cpu_end - __per_cpu_start, SMP_CACHE_BYTES) + \ | ||
22 | PERCPU_MODULE_RESERVE) | ||
23 | |||
24 | #define __per_cpu_offset(cpu) (cpu_pda(cpu)->data_offset) | 14 | #define __per_cpu_offset(cpu) (cpu_pda(cpu)->data_offset) |
25 | #define __my_cpu_offset() read_pda(data_offset) | 15 | #define __my_cpu_offset() read_pda(data_offset) |
26 | 16 | ||
diff --git a/include/asm-x86_64/pgalloc.h b/include/asm-x86_64/pgalloc.h index 4e28b6060a5e..8bb564687860 100644 --- a/include/asm-x86_64/pgalloc.h +++ b/include/asm-x86_64/pgalloc.h | |||
@@ -1,7 +1,6 @@ | |||
1 | #ifndef _X86_64_PGALLOC_H | 1 | #ifndef _X86_64_PGALLOC_H |
2 | #define _X86_64_PGALLOC_H | 2 | #define _X86_64_PGALLOC_H |
3 | 3 | ||
4 | #include <asm/fixmap.h> | ||
5 | #include <asm/pda.h> | 4 | #include <asm/pda.h> |
6 | #include <linux/threads.h> | 5 | #include <linux/threads.h> |
7 | #include <linux/mm.h> | 6 | #include <linux/mm.h> |
@@ -45,24 +44,16 @@ static inline void pgd_list_add(pgd_t *pgd) | |||
45 | struct page *page = virt_to_page(pgd); | 44 | struct page *page = virt_to_page(pgd); |
46 | 45 | ||
47 | spin_lock(&pgd_lock); | 46 | spin_lock(&pgd_lock); |
48 | page->index = (pgoff_t)pgd_list; | 47 | list_add(&page->lru, &pgd_list); |
49 | if (pgd_list) | ||
50 | pgd_list->private = (unsigned long)&page->index; | ||
51 | pgd_list = page; | ||
52 | page->private = (unsigned long)&pgd_list; | ||
53 | spin_unlock(&pgd_lock); | 48 | spin_unlock(&pgd_lock); |
54 | } | 49 | } |
55 | 50 | ||
56 | static inline void pgd_list_del(pgd_t *pgd) | 51 | static inline void pgd_list_del(pgd_t *pgd) |
57 | { | 52 | { |
58 | struct page *next, **pprev, *page = virt_to_page(pgd); | 53 | struct page *page = virt_to_page(pgd); |
59 | 54 | ||
60 | spin_lock(&pgd_lock); | 55 | spin_lock(&pgd_lock); |
61 | next = (struct page *)page->index; | 56 | list_del(&page->lru); |
62 | pprev = (struct page **)page->private; | ||
63 | *pprev = next; | ||
64 | if (next) | ||
65 | next->private = (unsigned long)pprev; | ||
66 | spin_unlock(&pgd_lock); | 57 | spin_unlock(&pgd_lock); |
67 | } | 58 | } |
68 | 59 | ||
diff --git a/include/asm-x86_64/pgtable.h b/include/asm-x86_64/pgtable.h index 730bd6028416..599993f6ba84 100644 --- a/include/asm-x86_64/pgtable.h +++ b/include/asm-x86_64/pgtable.h | |||
@@ -1,25 +1,25 @@ | |||
1 | #ifndef _X86_64_PGTABLE_H | 1 | #ifndef _X86_64_PGTABLE_H |
2 | #define _X86_64_PGTABLE_H | 2 | #define _X86_64_PGTABLE_H |
3 | 3 | ||
4 | #include <asm/const.h> | ||
5 | #ifndef __ASSEMBLY__ | ||
6 | |||
4 | /* | 7 | /* |
5 | * This file contains the functions and defines necessary to modify and use | 8 | * This file contains the functions and defines necessary to modify and use |
6 | * the x86-64 page table tree. | 9 | * the x86-64 page table tree. |
7 | */ | 10 | */ |
8 | #include <asm/processor.h> | 11 | #include <asm/processor.h> |
9 | #include <asm/fixmap.h> | ||
10 | #include <asm/bitops.h> | 12 | #include <asm/bitops.h> |
11 | #include <linux/threads.h> | 13 | #include <linux/threads.h> |
12 | #include <asm/pda.h> | 14 | #include <asm/pda.h> |
13 | 15 | ||
14 | extern pud_t level3_kernel_pgt[512]; | 16 | extern pud_t level3_kernel_pgt[512]; |
15 | extern pud_t level3_physmem_pgt[512]; | ||
16 | extern pud_t level3_ident_pgt[512]; | 17 | extern pud_t level3_ident_pgt[512]; |
17 | extern pmd_t level2_kernel_pgt[512]; | 18 | extern pmd_t level2_kernel_pgt[512]; |
18 | extern pgd_t init_level4_pgt[]; | 19 | extern pgd_t init_level4_pgt[]; |
19 | extern pgd_t boot_level4_pgt[]; | ||
20 | extern unsigned long __supported_pte_mask; | 20 | extern unsigned long __supported_pte_mask; |
21 | 21 | ||
22 | #define swapper_pg_dir init_level4_pgt | 22 | #define swapper_pg_dir ((pgd_t *)NULL) |
23 | 23 | ||
24 | extern void paging_init(void); | 24 | extern void paging_init(void); |
25 | extern void clear_kernel_mapping(unsigned long addr, unsigned long size); | 25 | extern void clear_kernel_mapping(unsigned long addr, unsigned long size); |
@@ -29,7 +29,9 @@ extern void clear_kernel_mapping(unsigned long addr, unsigned long size); | |||
29 | * for zero-mapped memory areas etc.. | 29 | * for zero-mapped memory areas etc.. |
30 | */ | 30 | */ |
31 | extern unsigned long empty_zero_page[PAGE_SIZE/sizeof(unsigned long)]; | 31 | extern unsigned long empty_zero_page[PAGE_SIZE/sizeof(unsigned long)]; |
32 | #define ZERO_PAGE(vaddr) (virt_to_page(empty_zero_page)) | 32 | #define ZERO_PAGE(vaddr) (pfn_to_page(__pa_symbol(&empty_zero_page) >> PAGE_SHIFT)) |
33 | |||
34 | #endif /* !__ASSEMBLY__ */ | ||
33 | 35 | ||
34 | /* | 36 | /* |
35 | * PGDIR_SHIFT determines what a top-level page table entry can map | 37 | * PGDIR_SHIFT determines what a top-level page table entry can map |
@@ -55,6 +57,8 @@ extern unsigned long empty_zero_page[PAGE_SIZE/sizeof(unsigned long)]; | |||
55 | */ | 57 | */ |
56 | #define PTRS_PER_PTE 512 | 58 | #define PTRS_PER_PTE 512 |
57 | 59 | ||
60 | #ifndef __ASSEMBLY__ | ||
61 | |||
58 | #define pte_ERROR(e) \ | 62 | #define pte_ERROR(e) \ |
59 | printk("%s:%d: bad pte %p(%016lx).\n", __FILE__, __LINE__, &(e), pte_val(e)) | 63 | printk("%s:%d: bad pte %p(%016lx).\n", __FILE__, __LINE__, &(e), pte_val(e)) |
60 | #define pmd_ERROR(e) \ | 64 | #define pmd_ERROR(e) \ |
@@ -118,22 +122,23 @@ static inline pte_t ptep_get_and_clear_full(struct mm_struct *mm, unsigned long | |||
118 | 122 | ||
119 | #define pte_pgprot(a) (__pgprot((a).pte & ~PHYSICAL_PAGE_MASK)) | 123 | #define pte_pgprot(a) (__pgprot((a).pte & ~PHYSICAL_PAGE_MASK)) |
120 | 124 | ||
121 | #define PMD_SIZE (1UL << PMD_SHIFT) | 125 | #endif /* !__ASSEMBLY__ */ |
126 | |||
127 | #define PMD_SIZE (_AC(1,UL) << PMD_SHIFT) | ||
122 | #define PMD_MASK (~(PMD_SIZE-1)) | 128 | #define PMD_MASK (~(PMD_SIZE-1)) |
123 | #define PUD_SIZE (1UL << PUD_SHIFT) | 129 | #define PUD_SIZE (_AC(1,UL) << PUD_SHIFT) |
124 | #define PUD_MASK (~(PUD_SIZE-1)) | 130 | #define PUD_MASK (~(PUD_SIZE-1)) |
125 | #define PGDIR_SIZE (1UL << PGDIR_SHIFT) | 131 | #define PGDIR_SIZE (_AC(1,UL) << PGDIR_SHIFT) |
126 | #define PGDIR_MASK (~(PGDIR_SIZE-1)) | 132 | #define PGDIR_MASK (~(PGDIR_SIZE-1)) |
127 | 133 | ||
128 | #define USER_PTRS_PER_PGD ((TASK_SIZE-1)/PGDIR_SIZE+1) | 134 | #define USER_PTRS_PER_PGD ((TASK_SIZE-1)/PGDIR_SIZE+1) |
129 | #define FIRST_USER_ADDRESS 0 | 135 | #define FIRST_USER_ADDRESS 0 |
130 | 136 | ||
131 | #ifndef __ASSEMBLY__ | 137 | #define MAXMEM 0x3fffffffffff |
132 | #define MAXMEM 0x3fffffffffffUL | 138 | #define VMALLOC_START 0xffffc20000000000 |
133 | #define VMALLOC_START 0xffffc20000000000UL | 139 | #define VMALLOC_END 0xffffe1ffffffffff |
134 | #define VMALLOC_END 0xffffe1ffffffffffUL | 140 | #define MODULES_VADDR 0xffffffff88000000 |
135 | #define MODULES_VADDR 0xffffffff88000000UL | 141 | #define MODULES_END 0xfffffffffff00000 |
136 | #define MODULES_END 0xfffffffffff00000UL | ||
137 | #define MODULES_LEN (MODULES_END - MODULES_VADDR) | 142 | #define MODULES_LEN (MODULES_END - MODULES_VADDR) |
138 | 143 | ||
139 | #define _PAGE_BIT_PRESENT 0 | 144 | #define _PAGE_BIT_PRESENT 0 |
@@ -159,7 +164,7 @@ static inline pte_t ptep_get_and_clear_full(struct mm_struct *mm, unsigned long | |||
159 | #define _PAGE_GLOBAL 0x100 /* Global TLB entry */ | 164 | #define _PAGE_GLOBAL 0x100 /* Global TLB entry */ |
160 | 165 | ||
161 | #define _PAGE_PROTNONE 0x080 /* If not present */ | 166 | #define _PAGE_PROTNONE 0x080 /* If not present */ |
162 | #define _PAGE_NX (1UL<<_PAGE_BIT_NX) | 167 | #define _PAGE_NX (_AC(1,UL)<<_PAGE_BIT_NX) |
163 | 168 | ||
164 | #define _PAGE_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED | _PAGE_DIRTY) | 169 | #define _PAGE_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED | _PAGE_DIRTY) |
165 | #define _KERNPG_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | _PAGE_DIRTY) | 170 | #define _KERNPG_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | _PAGE_DIRTY) |
@@ -221,6 +226,8 @@ static inline pte_t ptep_get_and_clear_full(struct mm_struct *mm, unsigned long | |||
221 | #define __S110 PAGE_SHARED_EXEC | 226 | #define __S110 PAGE_SHARED_EXEC |
222 | #define __S111 PAGE_SHARED_EXEC | 227 | #define __S111 PAGE_SHARED_EXEC |
223 | 228 | ||
229 | #ifndef __ASSEMBLY__ | ||
230 | |||
224 | static inline unsigned long pgd_bad(pgd_t pgd) | 231 | static inline unsigned long pgd_bad(pgd_t pgd) |
225 | { | 232 | { |
226 | return pgd_val(pgd) & ~(PTE_MASK | _KERNPG_TABLE | _PAGE_USER); | 233 | return pgd_val(pgd) & ~(PTE_MASK | _KERNPG_TABLE | _PAGE_USER); |
@@ -403,11 +410,9 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | |||
403 | #define __swp_entry_to_pte(x) ((pte_t) { (x).val }) | 410 | #define __swp_entry_to_pte(x) ((pte_t) { (x).val }) |
404 | 411 | ||
405 | extern spinlock_t pgd_lock; | 412 | extern spinlock_t pgd_lock; |
406 | extern struct page *pgd_list; | 413 | extern struct list_head pgd_list; |
407 | void vmalloc_sync_all(void); | 414 | void vmalloc_sync_all(void); |
408 | 415 | ||
409 | #endif /* !__ASSEMBLY__ */ | ||
410 | |||
411 | extern int kern_addr_valid(unsigned long addr); | 416 | extern int kern_addr_valid(unsigned long addr); |
412 | 417 | ||
413 | #define io_remap_pfn_range(vma, vaddr, pfn, size, prot) \ | 418 | #define io_remap_pfn_range(vma, vaddr, pfn, size, prot) \ |
@@ -437,5 +442,6 @@ extern int kern_addr_valid(unsigned long addr); | |||
437 | #define __HAVE_ARCH_PTEP_SET_WRPROTECT | 442 | #define __HAVE_ARCH_PTEP_SET_WRPROTECT |
438 | #define __HAVE_ARCH_PTE_SAME | 443 | #define __HAVE_ARCH_PTE_SAME |
439 | #include <asm-generic/pgtable.h> | 444 | #include <asm-generic/pgtable.h> |
445 | #endif /* !__ASSEMBLY__ */ | ||
440 | 446 | ||
441 | #endif /* _X86_64_PGTABLE_H */ | 447 | #endif /* _X86_64_PGTABLE_H */ |
diff --git a/include/asm-x86_64/processor-flags.h b/include/asm-x86_64/processor-flags.h new file mode 100644 index 000000000000..ec99a57b2c6a --- /dev/null +++ b/include/asm-x86_64/processor-flags.h | |||
@@ -0,0 +1 @@ | |||
#include <asm-i386/processor-flags.h> | |||
diff --git a/include/asm-x86_64/processor.h b/include/asm-x86_64/processor.h index 76552d72804c..461ffe4c1fcc 100644 --- a/include/asm-x86_64/processor.h +++ b/include/asm-x86_64/processor.h | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <asm/percpu.h> | 20 | #include <asm/percpu.h> |
21 | #include <linux/personality.h> | 21 | #include <linux/personality.h> |
22 | #include <linux/cpumask.h> | 22 | #include <linux/cpumask.h> |
23 | #include <asm/processor-flags.h> | ||
23 | 24 | ||
24 | #define TF_MASK 0x00000100 | 25 | #define TF_MASK 0x00000100 |
25 | #define IF_MASK 0x00000200 | 26 | #define IF_MASK 0x00000200 |
@@ -103,42 +104,6 @@ extern unsigned int init_intel_cacheinfo(struct cpuinfo_x86 *c); | |||
103 | extern unsigned short num_cache_leaves; | 104 | extern unsigned short num_cache_leaves; |
104 | 105 | ||
105 | /* | 106 | /* |
106 | * EFLAGS bits | ||
107 | */ | ||
108 | #define X86_EFLAGS_CF 0x00000001 /* Carry Flag */ | ||
109 | #define X86_EFLAGS_PF 0x00000004 /* Parity Flag */ | ||
110 | #define X86_EFLAGS_AF 0x00000010 /* Auxillary carry Flag */ | ||
111 | #define X86_EFLAGS_ZF 0x00000040 /* Zero Flag */ | ||
112 | #define X86_EFLAGS_SF 0x00000080 /* Sign Flag */ | ||
113 | #define X86_EFLAGS_TF 0x00000100 /* Trap Flag */ | ||
114 | #define X86_EFLAGS_IF 0x00000200 /* Interrupt Flag */ | ||
115 | #define X86_EFLAGS_DF 0x00000400 /* Direction Flag */ | ||
116 | #define X86_EFLAGS_OF 0x00000800 /* Overflow Flag */ | ||
117 | #define X86_EFLAGS_IOPL 0x00003000 /* IOPL mask */ | ||
118 | #define X86_EFLAGS_NT 0x00004000 /* Nested Task */ | ||
119 | #define X86_EFLAGS_RF 0x00010000 /* Resume Flag */ | ||
120 | #define X86_EFLAGS_VM 0x00020000 /* Virtual Mode */ | ||
121 | #define X86_EFLAGS_AC 0x00040000 /* Alignment Check */ | ||
122 | #define X86_EFLAGS_VIF 0x00080000 /* Virtual Interrupt Flag */ | ||
123 | #define X86_EFLAGS_VIP 0x00100000 /* Virtual Interrupt Pending */ | ||
124 | #define X86_EFLAGS_ID 0x00200000 /* CPUID detection flag */ | ||
125 | |||
126 | /* | ||
127 | * Intel CPU features in CR4 | ||
128 | */ | ||
129 | #define X86_CR4_VME 0x0001 /* enable vm86 extensions */ | ||
130 | #define X86_CR4_PVI 0x0002 /* virtual interrupts flag enable */ | ||
131 | #define X86_CR4_TSD 0x0004 /* disable time stamp at ipl 3 */ | ||
132 | #define X86_CR4_DE 0x0008 /* enable debugging extensions */ | ||
133 | #define X86_CR4_PSE 0x0010 /* enable page size extensions */ | ||
134 | #define X86_CR4_PAE 0x0020 /* enable physical address extensions */ | ||
135 | #define X86_CR4_MCE 0x0040 /* Machine check enable */ | ||
136 | #define X86_CR4_PGE 0x0080 /* enable global pages */ | ||
137 | #define X86_CR4_PCE 0x0100 /* enable performance counters at ipl 3 */ | ||
138 | #define X86_CR4_OSFXSR 0x0200 /* enable fast FPU save and restore */ | ||
139 | #define X86_CR4_OSXMMEXCPT 0x0400 /* enable unmasked SSE exceptions */ | ||
140 | |||
141 | /* | ||
142 | * Save the cr4 feature set we're using (ie | 107 | * Save the cr4 feature set we're using (ie |
143 | * Pentium 4MB enable and PPro Global page | 108 | * Pentium 4MB enable and PPro Global page |
144 | * enable), so that any CPU's that boot up | 109 | * enable), so that any CPU's that boot up |
@@ -201,7 +166,7 @@ struct i387_fxsave_struct { | |||
201 | u32 mxcsr; | 166 | u32 mxcsr; |
202 | u32 mxcsr_mask; | 167 | u32 mxcsr_mask; |
203 | u32 st_space[32]; /* 8*16 bytes for each FP-reg = 128 bytes */ | 168 | u32 st_space[32]; /* 8*16 bytes for each FP-reg = 128 bytes */ |
204 | u32 xmm_space[64]; /* 16*16 bytes for each XMM-reg = 128 bytes */ | 169 | u32 xmm_space[64]; /* 16*16 bytes for each XMM-reg = 256 bytes */ |
205 | u32 padding[24]; | 170 | u32 padding[24]; |
206 | } __attribute__ ((aligned (16))); | 171 | } __attribute__ ((aligned (16))); |
207 | 172 | ||
@@ -427,22 +392,6 @@ static inline void prefetchw(void *x) | |||
427 | #define cpu_relax() rep_nop() | 392 | #define cpu_relax() rep_nop() |
428 | 393 | ||
429 | /* | 394 | /* |
430 | * NSC/Cyrix CPU configuration register indexes | ||
431 | */ | ||
432 | #define CX86_CCR0 0xc0 | ||
433 | #define CX86_CCR1 0xc1 | ||
434 | #define CX86_CCR2 0xc2 | ||
435 | #define CX86_CCR3 0xc3 | ||
436 | #define CX86_CCR4 0xe8 | ||
437 | #define CX86_CCR5 0xe9 | ||
438 | #define CX86_CCR6 0xea | ||
439 | #define CX86_CCR7 0xeb | ||
440 | #define CX86_DIR0 0xfe | ||
441 | #define CX86_DIR1 0xff | ||
442 | #define CX86_ARR_BASE 0xc4 | ||
443 | #define CX86_RCR_BASE 0xdc | ||
444 | |||
445 | /* | ||
446 | * NSC/Cyrix CPU indexed register access macros | 395 | * NSC/Cyrix CPU indexed register access macros |
447 | */ | 396 | */ |
448 | 397 | ||
diff --git a/include/asm-x86_64/proto.h b/include/asm-x86_64/proto.h index b6e65a699f2a..85255db1e82d 100644 --- a/include/asm-x86_64/proto.h +++ b/include/asm-x86_64/proto.h | |||
@@ -11,18 +11,9 @@ struct pt_regs; | |||
11 | extern void start_kernel(void); | 11 | extern void start_kernel(void); |
12 | extern void pda_init(int); | 12 | extern void pda_init(int); |
13 | 13 | ||
14 | extern void zap_low_mappings(int cpu); | ||
15 | |||
16 | extern void early_idt_handler(void); | 14 | extern void early_idt_handler(void); |
17 | 15 | ||
18 | extern void mcheck_init(struct cpuinfo_x86 *c); | 16 | extern void mcheck_init(struct cpuinfo_x86 *c); |
19 | #ifdef CONFIG_MTRR | ||
20 | extern void mtrr_ap_init(void); | ||
21 | extern void mtrr_bp_init(void); | ||
22 | #else | ||
23 | #define mtrr_ap_init() do {} while (0) | ||
24 | #define mtrr_bp_init() do {} while (0) | ||
25 | #endif | ||
26 | extern void init_memory_mapping(unsigned long start, unsigned long end); | 17 | extern void init_memory_mapping(unsigned long start, unsigned long end); |
27 | 18 | ||
28 | extern void system_call(void); | 19 | extern void system_call(void); |
@@ -82,7 +73,6 @@ extern void syscall32_cpu_init(void); | |||
82 | extern void setup_node_bootmem(int nodeid, unsigned long start, unsigned long end); | 73 | extern void setup_node_bootmem(int nodeid, unsigned long start, unsigned long end); |
83 | 74 | ||
84 | extern void early_quirks(void); | 75 | extern void early_quirks(void); |
85 | extern void quirk_intel_irqbalance(void); | ||
86 | extern void check_efer(void); | 76 | extern void check_efer(void); |
87 | 77 | ||
88 | extern int unhandled_signal(struct task_struct *tsk, int sig); | 78 | extern int unhandled_signal(struct task_struct *tsk, int sig); |
@@ -93,6 +83,7 @@ extern unsigned long table_start, table_end; | |||
93 | 83 | ||
94 | extern int exception_trace; | 84 | extern int exception_trace; |
95 | extern unsigned cpu_khz; | 85 | extern unsigned cpu_khz; |
86 | extern unsigned tsc_khz; | ||
96 | 87 | ||
97 | extern void no_iommu_init(void); | 88 | extern void no_iommu_init(void); |
98 | extern int force_iommu, no_iommu; | 89 | extern int force_iommu, no_iommu; |
@@ -121,8 +112,12 @@ extern int gsi_irq_sharing(int gsi); | |||
121 | 112 | ||
122 | extern void smp_local_timer_interrupt(void); | 113 | extern void smp_local_timer_interrupt(void); |
123 | 114 | ||
115 | extern int force_mwait; | ||
116 | |||
124 | long do_arch_prctl(struct task_struct *task, int code, unsigned long addr); | 117 | long do_arch_prctl(struct task_struct *task, int code, unsigned long addr); |
125 | 118 | ||
119 | void i8254_timer_resume(void); | ||
120 | |||
126 | #define round_up(x,y) (((x) + (y) - 1) & ~((y)-1)) | 121 | #define round_up(x,y) (((x) + (y) - 1) & ~((y)-1)) |
127 | #define round_down(x,y) ((x) & ~((y)-1)) | 122 | #define round_down(x,y) ((x) & ~((y)-1)) |
128 | 123 | ||
diff --git a/include/asm-x86_64/segment.h b/include/asm-x86_64/segment.h index 334ddcdd8f92..adf2bf1e187c 100644 --- a/include/asm-x86_64/segment.h +++ b/include/asm-x86_64/segment.h | |||
@@ -6,7 +6,7 @@ | |||
6 | #define __KERNEL_CS 0x10 | 6 | #define __KERNEL_CS 0x10 |
7 | #define __KERNEL_DS 0x18 | 7 | #define __KERNEL_DS 0x18 |
8 | 8 | ||
9 | #define __KERNEL32_CS 0x38 | 9 | #define __KERNEL32_CS 0x08 |
10 | 10 | ||
11 | /* | 11 | /* |
12 | * we cannot use the same code segment descriptor for user and kernel | 12 | * we cannot use the same code segment descriptor for user and kernel |
diff --git a/include/asm-x86_64/smp.h b/include/asm-x86_64/smp.h index de592a408c07..d5704421456b 100644 --- a/include/asm-x86_64/smp.h +++ b/include/asm-x86_64/smp.h | |||
@@ -10,10 +10,9 @@ | |||
10 | #include <linux/init.h> | 10 | #include <linux/init.h> |
11 | extern int disable_apic; | 11 | extern int disable_apic; |
12 | 12 | ||
13 | #include <asm/fixmap.h> | ||
14 | #include <asm/mpspec.h> | 13 | #include <asm/mpspec.h> |
15 | #include <asm/io_apic.h> | ||
16 | #include <asm/apic.h> | 14 | #include <asm/apic.h> |
15 | #include <asm/io_apic.h> | ||
17 | #include <asm/thread_info.h> | 16 | #include <asm/thread_info.h> |
18 | 17 | ||
19 | #ifdef CONFIG_SMP | 18 | #ifdef CONFIG_SMP |
@@ -38,7 +37,6 @@ extern void lock_ipi_call_lock(void); | |||
38 | extern void unlock_ipi_call_lock(void); | 37 | extern void unlock_ipi_call_lock(void); |
39 | extern int smp_num_siblings; | 38 | extern int smp_num_siblings; |
40 | extern void smp_send_reschedule(int cpu); | 39 | extern void smp_send_reschedule(int cpu); |
41 | void smp_stop_cpu(void); | ||
42 | 40 | ||
43 | extern cpumask_t cpu_sibling_map[NR_CPUS]; | 41 | extern cpumask_t cpu_sibling_map[NR_CPUS]; |
44 | extern cpumask_t cpu_core_map[NR_CPUS]; | 42 | extern cpumask_t cpu_core_map[NR_CPUS]; |
diff --git a/include/asm-x86_64/suspend.h b/include/asm-x86_64/suspend.h index bc7f81715e5e..9c3f8de90d2d 100644 --- a/include/asm-x86_64/suspend.h +++ b/include/asm-x86_64/suspend.h | |||
@@ -17,6 +17,7 @@ struct saved_context { | |||
17 | u16 ds, es, fs, gs, ss; | 17 | u16 ds, es, fs, gs, ss; |
18 | unsigned long gs_base, gs_kernel_base, fs_base; | 18 | unsigned long gs_base, gs_kernel_base, fs_base; |
19 | unsigned long cr0, cr2, cr3, cr4, cr8; | 19 | unsigned long cr0, cr2, cr3, cr4, cr8; |
20 | unsigned long efer; | ||
20 | u16 gdt_pad; | 21 | u16 gdt_pad; |
21 | u16 gdt_limit; | 22 | u16 gdt_limit; |
22 | unsigned long gdt_base; | 23 | unsigned long gdt_base; |
@@ -44,12 +45,12 @@ extern unsigned long saved_context_eflags; | |||
44 | extern void fix_processor_context(void); | 45 | extern void fix_processor_context(void); |
45 | 46 | ||
46 | #ifdef CONFIG_ACPI_SLEEP | 47 | #ifdef CONFIG_ACPI_SLEEP |
47 | extern unsigned long saved_eip; | 48 | extern unsigned long saved_rip; |
48 | extern unsigned long saved_esp; | 49 | extern unsigned long saved_rsp; |
49 | extern unsigned long saved_ebp; | 50 | extern unsigned long saved_rbp; |
50 | extern unsigned long saved_ebx; | 51 | extern unsigned long saved_rbx; |
51 | extern unsigned long saved_esi; | 52 | extern unsigned long saved_rsi; |
52 | extern unsigned long saved_edi; | 53 | extern unsigned long saved_rdi; |
53 | 54 | ||
54 | /* routines for saving/restoring kernel state */ | 55 | /* routines for saving/restoring kernel state */ |
55 | extern int acpi_save_state_mem(void); | 56 | extern int acpi_save_state_mem(void); |
diff --git a/include/asm-x86_64/system.h b/include/asm-x86_64/system.h index bd376bc8c4ab..213b7fe5d998 100644 --- a/include/asm-x86_64/system.h +++ b/include/asm-x86_64/system.h | |||
@@ -89,6 +89,11 @@ static inline unsigned long read_cr3(void) | |||
89 | return cr3; | 89 | return cr3; |
90 | } | 90 | } |
91 | 91 | ||
92 | static inline void write_cr3(unsigned long val) | ||
93 | { | ||
94 | asm volatile("movq %0,%%cr3" :: "r" (val) : "memory"); | ||
95 | } | ||
96 | |||
92 | static inline unsigned long read_cr4(void) | 97 | static inline unsigned long read_cr4(void) |
93 | { | 98 | { |
94 | unsigned long cr4; | 99 | unsigned long cr4; |
@@ -98,7 +103,7 @@ static inline unsigned long read_cr4(void) | |||
98 | 103 | ||
99 | static inline void write_cr4(unsigned long val) | 104 | static inline void write_cr4(unsigned long val) |
100 | { | 105 | { |
101 | asm volatile("movq %0,%%cr4" :: "r" (val)); | 106 | asm volatile("movq %0,%%cr4" :: "r" (val) : "memory"); |
102 | } | 107 | } |
103 | 108 | ||
104 | #define stts() write_cr0(8 | read_cr0()) | 109 | #define stts() write_cr0(8 | read_cr0()) |
diff --git a/include/asm-x86_64/timex.h b/include/asm-x86_64/timex.h index 8c6808a3fba4..f6527e1b6c1c 100644 --- a/include/asm-x86_64/timex.h +++ b/include/asm-x86_64/timex.h | |||
@@ -27,6 +27,6 @@ extern int read_current_timer(unsigned long *timer_value); | |||
27 | #define NS_SCALE 10 /* 2^10, carefully chosen */ | 27 | #define NS_SCALE 10 /* 2^10, carefully chosen */ |
28 | #define US_SCALE 32 /* 2^32, arbitralrily chosen */ | 28 | #define US_SCALE 32 /* 2^32, arbitralrily chosen */ |
29 | 29 | ||
30 | extern void mark_tsc_unstable(void); | 30 | extern void mark_tsc_unstable(char *msg); |
31 | extern void set_cyc2ns_scale(unsigned long khz); | 31 | extern void set_cyc2ns_scale(unsigned long khz); |
32 | #endif | 32 | #endif |
diff --git a/include/asm-x86_64/tlbflush.h b/include/asm-x86_64/tlbflush.h index 983bd296c81a..512401b8725f 100644 --- a/include/asm-x86_64/tlbflush.h +++ b/include/asm-x86_64/tlbflush.h | |||
@@ -3,41 +3,18 @@ | |||
3 | 3 | ||
4 | #include <linux/mm.h> | 4 | #include <linux/mm.h> |
5 | #include <asm/processor.h> | 5 | #include <asm/processor.h> |
6 | 6 | #include <asm/system.h> | |
7 | static inline unsigned long get_cr3(void) | ||
8 | { | ||
9 | unsigned long cr3; | ||
10 | asm volatile("mov %%cr3,%0" : "=r" (cr3)); | ||
11 | return cr3; | ||
12 | } | ||
13 | |||
14 | static inline void set_cr3(unsigned long cr3) | ||
15 | { | ||
16 | asm volatile("mov %0,%%cr3" :: "r" (cr3) : "memory"); | ||
17 | } | ||
18 | 7 | ||
19 | static inline void __flush_tlb(void) | 8 | static inline void __flush_tlb(void) |
20 | { | 9 | { |
21 | set_cr3(get_cr3()); | 10 | write_cr3(read_cr3()); |
22 | } | ||
23 | |||
24 | static inline unsigned long get_cr4(void) | ||
25 | { | ||
26 | unsigned long cr4; | ||
27 | asm volatile("mov %%cr4,%0" : "=r" (cr4)); | ||
28 | return cr4; | ||
29 | } | ||
30 | |||
31 | static inline void set_cr4(unsigned long cr4) | ||
32 | { | ||
33 | asm volatile("mov %0,%%cr4" :: "r" (cr4) : "memory"); | ||
34 | } | 11 | } |
35 | 12 | ||
36 | static inline void __flush_tlb_all(void) | 13 | static inline void __flush_tlb_all(void) |
37 | { | 14 | { |
38 | unsigned long cr4 = get_cr4(); | 15 | unsigned long cr4 = read_cr4(); |
39 | set_cr4(cr4 & ~X86_CR4_PGE); /* clear PGE */ | 16 | write_cr4(cr4 & ~X86_CR4_PGE); /* clear PGE */ |
40 | set_cr4(cr4); /* write old PGE again and flush TLBs */ | 17 | write_cr4(cr4); /* write old PGE again and flush TLBs */ |
41 | } | 18 | } |
42 | 19 | ||
43 | #define __flush_tlb_one(addr) \ | 20 | #define __flush_tlb_one(addr) \ |
diff --git a/include/asm-x86_64/unistd.h b/include/asm-x86_64/unistd.h index c5f596e71faa..26e23e01c54a 100644 --- a/include/asm-x86_64/unistd.h +++ b/include/asm-x86_64/unistd.h | |||
@@ -620,8 +620,6 @@ __SYSCALL(__NR_vmsplice, sys_vmsplice) | |||
620 | #define __NR_move_pages 279 | 620 | #define __NR_move_pages 279 |
621 | __SYSCALL(__NR_move_pages, sys_move_pages) | 621 | __SYSCALL(__NR_move_pages, sys_move_pages) |
622 | 622 | ||
623 | #define __NR_syscall_max __NR_move_pages | ||
624 | |||
625 | #ifndef __NO_STUBS | 623 | #ifndef __NO_STUBS |
626 | #define __ARCH_WANT_OLD_READDIR | 624 | #define __ARCH_WANT_OLD_READDIR |
627 | #define __ARCH_WANT_OLD_STAT | 625 | #define __ARCH_WANT_OLD_STAT |
@@ -655,7 +653,6 @@ __SYSCALL(__NR_move_pages, sys_move_pages) | |||
655 | #include <asm/ptrace.h> | 653 | #include <asm/ptrace.h> |
656 | 654 | ||
657 | asmlinkage long sys_iopl(unsigned int level, struct pt_regs *regs); | 655 | asmlinkage long sys_iopl(unsigned int level, struct pt_regs *regs); |
658 | asmlinkage long sys_ioperm(unsigned long from, unsigned long num, int turn_on); | ||
659 | struct sigaction; | 656 | struct sigaction; |
660 | asmlinkage long sys_rt_sigaction(int sig, | 657 | asmlinkage long sys_rt_sigaction(int sig, |
661 | const struct sigaction __user *act, | 658 | const struct sigaction __user *act, |