diff options
Diffstat (limited to 'arch')
30 files changed, 177 insertions, 113 deletions
diff --git a/arch/arm/mach-davinci/psc.c b/arch/arm/mach-davinci/psc.c index 720c48b9ee04..aa2fc375a325 100644 --- a/arch/arm/mach-davinci/psc.c +++ b/arch/arm/mach-davinci/psc.c | |||
@@ -70,9 +70,6 @@ void davinci_psc_config(unsigned int domain, unsigned int id, char enable) | |||
70 | { | 70 | { |
71 | u32 epcpr, ptcmd, ptstat, pdstat, pdctl1, mdstat, mdctl, mdstat_mask; | 71 | u32 epcpr, ptcmd, ptstat, pdstat, pdctl1, mdstat, mdctl, mdstat_mask; |
72 | 72 | ||
73 | if (id < 0) | ||
74 | return; | ||
75 | |||
76 | mdctl = davinci_readl(DAVINCI_PWR_SLEEP_CNTRL_BASE + MDCTL + 4 * id); | 73 | mdctl = davinci_readl(DAVINCI_PWR_SLEEP_CNTRL_BASE + MDCTL + 4 * id); |
77 | if (enable) | 74 | if (enable) |
78 | mdctl |= 0x00000003; /* Enable Module */ | 75 | mdctl |= 0x00000003; /* Enable Module */ |
diff --git a/arch/arm/mach-sa1100/include/mach/jornada720.h b/arch/arm/mach-sa1100/include/mach/jornada720.h index bc120850d313..cc6b4bfcecf6 100644 --- a/arch/arm/mach-sa1100/include/mach/jornada720.h +++ b/arch/arm/mach-sa1100/include/mach/jornada720.h | |||
@@ -1,10 +1,10 @@ | |||
1 | /* | 1 | /* |
2 | * arch/arm/mach-sa1100/include/mach/jornada720.h | 2 | * arch/arm/mach-sa1100/include/mach/jornada720.h |
3 | * | 3 | * |
4 | * This file contains SSP/MCU communication definitions for HP Jornada 710/720/728 | 4 | * SSP/MCU communication definitions for HP Jornada 710/720/728 |
5 | * | 5 | * |
6 | * Copyright (C) 2007 Kristoffer Ericson <Kristoffer.Ericson@gmail.com> | 6 | * Copyright 2007,2008 Kristoffer Ericson <Kristoffer.Ericson@gmail.com> |
7 | * Copyright (C) 2000 John Ankcorn <jca@lcs.mit.edu> | 7 | * Copyright 2000 John Ankcorn <jca@lcs.mit.edu> |
8 | * | 8 | * |
9 | * This program is free software; you can redistribute it and/or modify | 9 | * This program is free software; you can redistribute it and/or modify |
10 | * it under the terms of the GNU General Public License version 2 as | 10 | * it under the terms of the GNU General Public License version 2 as |
@@ -25,3 +25,8 @@ | |||
25 | #define PWMOFF 0xDF | 25 | #define PWMOFF 0xDF |
26 | #define TXDUMMY 0x11 | 26 | #define TXDUMMY 0x11 |
27 | #define ERRORCODE 0x00 | 27 | #define ERRORCODE 0x00 |
28 | |||
29 | extern void jornada_ssp_start(void); | ||
30 | extern void jornada_ssp_end(void); | ||
31 | extern int jornada_ssp_inout(u8 byte); | ||
32 | extern int jornada_ssp_byte(u8 byte); | ||
diff --git a/arch/arm/mach-sa1100/jornada720_ssp.c b/arch/arm/mach-sa1100/jornada720_ssp.c index 06ea7abd9170..28cf36967977 100644 --- a/arch/arm/mach-sa1100/jornada720_ssp.c +++ b/arch/arm/mach-sa1100/jornada720_ssp.c | |||
@@ -21,8 +21,8 @@ | |||
21 | #include <linux/slab.h> | 21 | #include <linux/slab.h> |
22 | 22 | ||
23 | #include <mach/hardware.h> | 23 | #include <mach/hardware.h> |
24 | #include <asm/hardware/ssp.h> | ||
25 | #include <mach/jornada720.h> | 24 | #include <mach/jornada720.h> |
25 | #include <asm/hardware/ssp.h> | ||
26 | 26 | ||
27 | static DEFINE_SPINLOCK(jornada_ssp_lock); | 27 | static DEFINE_SPINLOCK(jornada_ssp_lock); |
28 | static unsigned long jornada_ssp_flags; | 28 | static unsigned long jornada_ssp_flags; |
@@ -109,12 +109,12 @@ EXPORT_SYMBOL(jornada_ssp_inout); | |||
109 | * jornada_ssp_start - enable mcu | 109 | * jornada_ssp_start - enable mcu |
110 | * | 110 | * |
111 | */ | 111 | */ |
112 | int jornada_ssp_start() | 112 | void jornada_ssp_start(void) |
113 | { | 113 | { |
114 | spin_lock_irqsave(&jornada_ssp_lock, jornada_ssp_flags); | 114 | spin_lock_irqsave(&jornada_ssp_lock, jornada_ssp_flags); |
115 | GPCR = GPIO_GPIO25; | 115 | GPCR = GPIO_GPIO25; |
116 | udelay(50); | 116 | udelay(50); |
117 | return 0; | 117 | return; |
118 | }; | 118 | }; |
119 | EXPORT_SYMBOL(jornada_ssp_start); | 119 | EXPORT_SYMBOL(jornada_ssp_start); |
120 | 120 | ||
@@ -122,11 +122,11 @@ EXPORT_SYMBOL(jornada_ssp_start); | |||
122 | * jornada_ssp_end - disable mcu and turn off lock | 122 | * jornada_ssp_end - disable mcu and turn off lock |
123 | * | 123 | * |
124 | */ | 124 | */ |
125 | int jornada_ssp_end() | 125 | void jornada_ssp_end(void) |
126 | { | 126 | { |
127 | GPSR = GPIO_GPIO25; | 127 | GPSR = GPIO_GPIO25; |
128 | spin_unlock_irqrestore(&jornada_ssp_lock, jornada_ssp_flags); | 128 | spin_unlock_irqrestore(&jornada_ssp_lock, jornada_ssp_flags); |
129 | return 0; | 129 | return; |
130 | }; | 130 | }; |
131 | EXPORT_SYMBOL(jornada_ssp_end); | 131 | EXPORT_SYMBOL(jornada_ssp_end); |
132 | 132 | ||
diff --git a/arch/arm/plat-omap/devices.c b/arch/arm/plat-omap/devices.c index bc1cf30c83e0..01da719a7453 100644 --- a/arch/arm/plat-omap/devices.c +++ b/arch/arm/plat-omap/devices.c | |||
@@ -316,19 +316,6 @@ static inline void omap_init_mmc_conf(const struct omap_mmc_config *mmc_conf) | |||
316 | omap_cfg_reg(MMC_DAT3); | 316 | omap_cfg_reg(MMC_DAT3); |
317 | } | 317 | } |
318 | } | 318 | } |
319 | #if defined(CONFIG_ARCH_OMAP2420) | ||
320 | if (mmc_conf->mmc[0].internal_clock) { | ||
321 | /* | ||
322 | * Use internal loop-back in MMC/SDIO | ||
323 | * Module Input Clock selection | ||
324 | */ | ||
325 | if (cpu_is_omap24xx()) { | ||
326 | u32 v = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0); | ||
327 | v |= (1 << 24); /* not used in 243x */ | ||
328 | omap_ctrl_writel(v, OMAP2_CONTROL_DEVCONF0); | ||
329 | } | ||
330 | } | ||
331 | #endif | ||
332 | } | 319 | } |
333 | 320 | ||
334 | #ifdef CONFIG_ARCH_OMAP16XX | 321 | #ifdef CONFIG_ARCH_OMAP16XX |
diff --git a/arch/avr32/boards/atstk1000/atstk1002.c b/arch/avr32/boards/atstk1000/atstk1002.c index ee4c292683e1..dfc3443e23aa 100644 --- a/arch/avr32/boards/atstk1000/atstk1002.c +++ b/arch/avr32/boards/atstk1000/atstk1002.c | |||
@@ -325,7 +325,7 @@ static int __init atstk1002_init(void) | |||
325 | #ifdef CONFIG_BOARD_ATSTK100X_SPI1 | 325 | #ifdef CONFIG_BOARD_ATSTK100X_SPI1 |
326 | at32_add_device_spi(1, spi1_board_info, ARRAY_SIZE(spi1_board_info)); | 326 | at32_add_device_spi(1, spi1_board_info, ARRAY_SIZE(spi1_board_info)); |
327 | #endif | 327 | #endif |
328 | #ifndef CONFIG_BOARD_ATSTK1002_SW2_CUSTOM | 328 | #ifndef CONFIG_BOARD_ATSTK100X_SW2_CUSTOM |
329 | at32_add_device_mci(0, MCI_PDATA); | 329 | at32_add_device_mci(0, MCI_PDATA); |
330 | #endif | 330 | #endif |
331 | #ifdef CONFIG_BOARD_ATSTK1002_SW5_CUSTOM | 331 | #ifdef CONFIG_BOARD_ATSTK1002_SW5_CUSTOM |
diff --git a/arch/avr32/boot/images/.gitignore b/arch/avr32/boot/images/.gitignore new file mode 100644 index 000000000000..64ea9d0141d2 --- /dev/null +++ b/arch/avr32/boot/images/.gitignore | |||
@@ -0,0 +1,4 @@ | |||
1 | uImage | ||
2 | uImage.srec | ||
3 | vmlinux.cso | ||
4 | sfdwarf.log | ||
diff --git a/arch/avr32/kernel/.gitignore b/arch/avr32/kernel/.gitignore new file mode 100644 index 000000000000..c5f676c3c224 --- /dev/null +++ b/arch/avr32/kernel/.gitignore | |||
@@ -0,0 +1 @@ | |||
vmlinux.lds | |||
diff --git a/arch/avr32/kernel/avr32_ksyms.c b/arch/avr32/kernel/avr32_ksyms.c index 84a7d44edc67..11e310c567a9 100644 --- a/arch/avr32/kernel/avr32_ksyms.c +++ b/arch/avr32/kernel/avr32_ksyms.c | |||
@@ -58,6 +58,7 @@ EXPORT_SYMBOL(find_first_zero_bit); | |||
58 | EXPORT_SYMBOL(find_next_zero_bit); | 58 | EXPORT_SYMBOL(find_next_zero_bit); |
59 | EXPORT_SYMBOL(find_first_bit); | 59 | EXPORT_SYMBOL(find_first_bit); |
60 | EXPORT_SYMBOL(find_next_bit); | 60 | EXPORT_SYMBOL(find_next_bit); |
61 | EXPORT_SYMBOL(generic_find_next_le_bit); | ||
61 | EXPORT_SYMBOL(generic_find_next_zero_le_bit); | 62 | EXPORT_SYMBOL(generic_find_next_zero_le_bit); |
62 | 63 | ||
63 | /* I/O primitives (lib/io-*.S) */ | 64 | /* I/O primitives (lib/io-*.S) */ |
diff --git a/arch/avr32/kernel/syscall-stubs.S b/arch/avr32/kernel/syscall-stubs.S index 890286a1e62b..673178e235f3 100644 --- a/arch/avr32/kernel/syscall-stubs.S +++ b/arch/avr32/kernel/syscall-stubs.S | |||
@@ -109,3 +109,12 @@ __sys_epoll_pwait: | |||
109 | rcall sys_epoll_pwait | 109 | rcall sys_epoll_pwait |
110 | sub sp, -4 | 110 | sub sp, -4 |
111 | popm pc | 111 | popm pc |
112 | |||
113 | .global __sys_sync_file_range | ||
114 | .type __sys_sync_file_range,@function | ||
115 | __sys_sync_file_range: | ||
116 | pushm lr | ||
117 | st.w --sp, ARG6 | ||
118 | rcall sys_sync_file_range | ||
119 | sub sp, -4 | ||
120 | popm pc | ||
diff --git a/arch/avr32/kernel/syscall_table.S b/arch/avr32/kernel/syscall_table.S index 478bda4c4a09..7ee0057613b3 100644 --- a/arch/avr32/kernel/syscall_table.S +++ b/arch/avr32/kernel/syscall_table.S | |||
@@ -275,7 +275,7 @@ sys_call_table: | |||
275 | .long sys_set_robust_list | 275 | .long sys_set_robust_list |
276 | .long sys_get_robust_list /* 260 */ | 276 | .long sys_get_robust_list /* 260 */ |
277 | .long __sys_splice | 277 | .long __sys_splice |
278 | .long sys_sync_file_range | 278 | .long __sys_sync_file_range |
279 | .long sys_tee | 279 | .long sys_tee |
280 | .long sys_vmsplice | 280 | .long sys_vmsplice |
281 | .long __sys_epoll_pwait /* 265 */ | 281 | .long __sys_epoll_pwait /* 265 */ |
diff --git a/arch/avr32/kernel/traps.c b/arch/avr32/kernel/traps.c index b835c4c01368..0d987373bc01 100644 --- a/arch/avr32/kernel/traps.c +++ b/arch/avr32/kernel/traps.c | |||
@@ -116,15 +116,15 @@ asmlinkage void do_nmi(unsigned long ecr, struct pt_regs *regs) | |||
116 | switch (ret) { | 116 | switch (ret) { |
117 | case NOTIFY_OK: | 117 | case NOTIFY_OK: |
118 | case NOTIFY_STOP: | 118 | case NOTIFY_STOP: |
119 | return; | 119 | break; |
120 | case NOTIFY_BAD: | 120 | case NOTIFY_BAD: |
121 | die("Fatal Non-Maskable Interrupt", regs, SIGINT); | 121 | die("Fatal Non-Maskable Interrupt", regs, SIGINT); |
122 | default: | 122 | default: |
123 | printk(KERN_ALERT "Got NMI, but nobody cared. Disabling...\n"); | ||
124 | nmi_disable(); | ||
123 | break; | 125 | break; |
124 | } | 126 | } |
125 | 127 | nmi_exit(); | |
126 | printk(KERN_ALERT "Got NMI, but nobody cared. Disabling...\n"); | ||
127 | nmi_disable(); | ||
128 | } | 128 | } |
129 | 129 | ||
130 | asmlinkage void do_critical_exception(unsigned long ecr, struct pt_regs *regs) | 130 | asmlinkage void do_critical_exception(unsigned long ecr, struct pt_regs *regs) |
diff --git a/arch/avr32/lib/findbit.S b/arch/avr32/lib/findbit.S index c6b91dee857c..997b33b2288a 100644 --- a/arch/avr32/lib/findbit.S +++ b/arch/avr32/lib/findbit.S | |||
@@ -123,6 +123,36 @@ ENTRY(find_next_bit) | |||
123 | brgt 1b | 123 | brgt 1b |
124 | retal r11 | 124 | retal r11 |
125 | 125 | ||
126 | ENTRY(generic_find_next_le_bit) | ||
127 | lsr r8, r10, 5 | ||
128 | sub r9, r11, r10 | ||
129 | retle r11 | ||
130 | |||
131 | lsl r8, 2 | ||
132 | add r12, r8 | ||
133 | andl r10, 31, COH | ||
134 | breq 1f | ||
135 | |||
136 | /* offset is not word-aligned. Handle the first (32 - r10) bits */ | ||
137 | ldswp.w r8, r12[0] | ||
138 | sub r12, -4 | ||
139 | lsr r8, r8, r10 | ||
140 | brne .L_found | ||
141 | |||
142 | /* r9 = r9 - (32 - r10) = r9 + r10 - 32 */ | ||
143 | add r9, r10 | ||
144 | sub r9, 32 | ||
145 | retle r11 | ||
146 | |||
147 | /* Main loop. offset must be word-aligned */ | ||
148 | 1: ldswp.w r8, r12[0] | ||
149 | cp.w r8, 0 | ||
150 | brne .L_found | ||
151 | sub r12, -4 | ||
152 | sub r9, 32 | ||
153 | brgt 1b | ||
154 | retal r11 | ||
155 | |||
126 | ENTRY(generic_find_next_zero_le_bit) | 156 | ENTRY(generic_find_next_zero_le_bit) |
127 | lsr r8, r10, 5 | 157 | lsr r8, r10, 5 |
128 | sub r9, r11, r10 | 158 | sub r9, r11, r10 |
diff --git a/arch/ia64/kvm/kvm-ia64.c b/arch/ia64/kvm/kvm-ia64.c index 7a37d06376be..cd0d1a7284b7 100644 --- a/arch/ia64/kvm/kvm-ia64.c +++ b/arch/ia64/kvm/kvm-ia64.c | |||
@@ -38,6 +38,7 @@ | |||
38 | #include <asm/cacheflush.h> | 38 | #include <asm/cacheflush.h> |
39 | #include <asm/div64.h> | 39 | #include <asm/div64.h> |
40 | #include <asm/tlb.h> | 40 | #include <asm/tlb.h> |
41 | #include <asm/elf.h> | ||
41 | 42 | ||
42 | #include "misc.h" | 43 | #include "misc.h" |
43 | #include "vti.h" | 44 | #include "vti.h" |
@@ -61,12 +62,6 @@ struct kvm_stats_debugfs_item debugfs_entries[] = { | |||
61 | { NULL } | 62 | { NULL } |
62 | }; | 63 | }; |
63 | 64 | ||
64 | |||
65 | struct fdesc{ | ||
66 | unsigned long ip; | ||
67 | unsigned long gp; | ||
68 | }; | ||
69 | |||
70 | static void kvm_flush_icache(unsigned long start, unsigned long len) | 65 | static void kvm_flush_icache(unsigned long start, unsigned long len) |
71 | { | 66 | { |
72 | int l; | 67 | int l; |
diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c index 335a6ae3d594..11c92dc53791 100644 --- a/arch/mips/kernel/cpu-probe.c +++ b/arch/mips/kernel/cpu-probe.c | |||
@@ -45,18 +45,7 @@ static void r39xx_wait(void) | |||
45 | local_irq_enable(); | 45 | local_irq_enable(); |
46 | } | 46 | } |
47 | 47 | ||
48 | /* | 48 | extern void r4k_wait(void); |
49 | * There is a race when WAIT instruction executed with interrupt | ||
50 | * enabled. | ||
51 | * But it is implementation-dependent wheter the pipelie restarts when | ||
52 | * a non-enabled interrupt is requested. | ||
53 | */ | ||
54 | static void r4k_wait(void) | ||
55 | { | ||
56 | __asm__(" .set mips3 \n" | ||
57 | " wait \n" | ||
58 | " .set mips0 \n"); | ||
59 | } | ||
60 | 49 | ||
61 | /* | 50 | /* |
62 | * This variant is preferable as it allows testing need_resched and going to | 51 | * This variant is preferable as it allows testing need_resched and going to |
@@ -128,7 +117,7 @@ static int __init wait_disable(char *s) | |||
128 | 117 | ||
129 | __setup("nowait", wait_disable); | 118 | __setup("nowait", wait_disable); |
130 | 119 | ||
131 | static inline void check_wait(void) | 120 | void __init check_wait(void) |
132 | { | 121 | { |
133 | struct cpuinfo_mips *c = ¤t_cpu_data; | 122 | struct cpuinfo_mips *c = ¤t_cpu_data; |
134 | 123 | ||
@@ -242,7 +231,6 @@ static inline void check_errata(void) | |||
242 | 231 | ||
243 | void __init check_bugs32(void) | 232 | void __init check_bugs32(void) |
244 | { | 233 | { |
245 | check_wait(); | ||
246 | check_errata(); | 234 | check_errata(); |
247 | } | 235 | } |
248 | 236 | ||
diff --git a/arch/mips/kernel/genex.S b/arch/mips/kernel/genex.S index c6ada98ee042..f886dd7f708e 100644 --- a/arch/mips/kernel/genex.S +++ b/arch/mips/kernel/genex.S | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <asm/stackframe.h> | 20 | #include <asm/stackframe.h> |
21 | #include <asm/war.h> | 21 | #include <asm/war.h> |
22 | #include <asm/page.h> | 22 | #include <asm/page.h> |
23 | #include <asm/thread_info.h> | ||
23 | 24 | ||
24 | #define PANIC_PIC(msg) \ | 25 | #define PANIC_PIC(msg) \ |
25 | .set push; \ | 26 | .set push; \ |
@@ -126,7 +127,42 @@ handle_vcei: | |||
126 | 127 | ||
127 | __FINIT | 128 | __FINIT |
128 | 129 | ||
130 | .align 5 /* 32 byte rollback region */ | ||
131 | LEAF(r4k_wait) | ||
132 | .set push | ||
133 | .set noreorder | ||
134 | /* start of rollback region */ | ||
135 | LONG_L t0, TI_FLAGS($28) | ||
136 | nop | ||
137 | andi t0, _TIF_NEED_RESCHED | ||
138 | bnez t0, 1f | ||
139 | nop | ||
140 | nop | ||
141 | nop | ||
142 | .set mips3 | ||
143 | wait | ||
144 | /* end of rollback region (the region size must be power of two) */ | ||
145 | .set pop | ||
146 | 1: | ||
147 | jr ra | ||
148 | END(r4k_wait) | ||
149 | |||
150 | .macro BUILD_ROLLBACK_PROLOGUE handler | ||
151 | FEXPORT(rollback_\handler) | ||
152 | .set push | ||
153 | .set noat | ||
154 | MFC0 k0, CP0_EPC | ||
155 | PTR_LA k1, r4k_wait | ||
156 | ori k0, 0x1f /* 32 byte rollback region */ | ||
157 | xori k0, 0x1f | ||
158 | bne k0, k1, 9f | ||
159 | MTC0 k0, CP0_EPC | ||
160 | 9: | ||
161 | .set pop | ||
162 | .endm | ||
163 | |||
129 | .align 5 | 164 | .align 5 |
165 | BUILD_ROLLBACK_PROLOGUE handle_int | ||
130 | NESTED(handle_int, PT_SIZE, sp) | 166 | NESTED(handle_int, PT_SIZE, sp) |
131 | #ifdef CONFIG_TRACE_IRQFLAGS | 167 | #ifdef CONFIG_TRACE_IRQFLAGS |
132 | /* | 168 | /* |
@@ -201,6 +237,7 @@ NESTED(except_vec_ejtag_debug, 0, sp) | |||
201 | * This prototype is copied to ebase + n*IntCtl.VS and patched | 237 | * This prototype is copied to ebase + n*IntCtl.VS and patched |
202 | * to invoke the handler | 238 | * to invoke the handler |
203 | */ | 239 | */ |
240 | BUILD_ROLLBACK_PROLOGUE except_vec_vi | ||
204 | NESTED(except_vec_vi, 0, sp) | 241 | NESTED(except_vec_vi, 0, sp) |
205 | SAVE_SOME | 242 | SAVE_SOME |
206 | SAVE_AT | 243 | SAVE_AT |
diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c index b16facd9ea8e..ce7684335a41 100644 --- a/arch/mips/kernel/process.c +++ b/arch/mips/kernel/process.c | |||
@@ -148,6 +148,8 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long usp, | |||
148 | clear_tsk_thread_flag(p, TIF_USEDFPU); | 148 | clear_tsk_thread_flag(p, TIF_USEDFPU); |
149 | 149 | ||
150 | #ifdef CONFIG_MIPS_MT_FPAFF | 150 | #ifdef CONFIG_MIPS_MT_FPAFF |
151 | clear_tsk_thread_flag(p, TIF_FPUBOUND); | ||
152 | |||
151 | /* | 153 | /* |
152 | * FPU affinity support is cleaner if we track the | 154 | * FPU affinity support is cleaner if we track the |
153 | * user-visible CPU affinity from the very beginning. | 155 | * user-visible CPU affinity from the very beginning. |
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c index 6bee29097a56..5fd0cd020af5 100644 --- a/arch/mips/kernel/traps.c +++ b/arch/mips/kernel/traps.c | |||
@@ -46,6 +46,9 @@ | |||
46 | #include <asm/types.h> | 46 | #include <asm/types.h> |
47 | #include <asm/stacktrace.h> | 47 | #include <asm/stacktrace.h> |
48 | 48 | ||
49 | extern void check_wait(void); | ||
50 | extern asmlinkage void r4k_wait(void); | ||
51 | extern asmlinkage void rollback_handle_int(void); | ||
49 | extern asmlinkage void handle_int(void); | 52 | extern asmlinkage void handle_int(void); |
50 | extern asmlinkage void handle_tlbm(void); | 53 | extern asmlinkage void handle_tlbm(void); |
51 | extern asmlinkage void handle_tlbl(void); | 54 | extern asmlinkage void handle_tlbl(void); |
@@ -1251,6 +1254,9 @@ static void *set_vi_srs_handler(int n, vi_handler_t addr, int srs) | |||
1251 | 1254 | ||
1252 | extern char except_vec_vi, except_vec_vi_lui; | 1255 | extern char except_vec_vi, except_vec_vi_lui; |
1253 | extern char except_vec_vi_ori, except_vec_vi_end; | 1256 | extern char except_vec_vi_ori, except_vec_vi_end; |
1257 | extern char rollback_except_vec_vi; | ||
1258 | char *vec_start = (cpu_wait == r4k_wait) ? | ||
1259 | &rollback_except_vec_vi : &except_vec_vi; | ||
1254 | #ifdef CONFIG_MIPS_MT_SMTC | 1260 | #ifdef CONFIG_MIPS_MT_SMTC |
1255 | /* | 1261 | /* |
1256 | * We need to provide the SMTC vectored interrupt handler | 1262 | * We need to provide the SMTC vectored interrupt handler |
@@ -1258,11 +1264,11 @@ static void *set_vi_srs_handler(int n, vi_handler_t addr, int srs) | |||
1258 | * Status.IM bit to be masked before going there. | 1264 | * Status.IM bit to be masked before going there. |
1259 | */ | 1265 | */ |
1260 | extern char except_vec_vi_mori; | 1266 | extern char except_vec_vi_mori; |
1261 | const int mori_offset = &except_vec_vi_mori - &except_vec_vi; | 1267 | const int mori_offset = &except_vec_vi_mori - vec_start; |
1262 | #endif /* CONFIG_MIPS_MT_SMTC */ | 1268 | #endif /* CONFIG_MIPS_MT_SMTC */ |
1263 | const int handler_len = &except_vec_vi_end - &except_vec_vi; | 1269 | const int handler_len = &except_vec_vi_end - vec_start; |
1264 | const int lui_offset = &except_vec_vi_lui - &except_vec_vi; | 1270 | const int lui_offset = &except_vec_vi_lui - vec_start; |
1265 | const int ori_offset = &except_vec_vi_ori - &except_vec_vi; | 1271 | const int ori_offset = &except_vec_vi_ori - vec_start; |
1266 | 1272 | ||
1267 | if (handler_len > VECTORSPACING) { | 1273 | if (handler_len > VECTORSPACING) { |
1268 | /* | 1274 | /* |
@@ -1272,7 +1278,7 @@ static void *set_vi_srs_handler(int n, vi_handler_t addr, int srs) | |||
1272 | panic("VECTORSPACING too small"); | 1278 | panic("VECTORSPACING too small"); |
1273 | } | 1279 | } |
1274 | 1280 | ||
1275 | memcpy(b, &except_vec_vi, handler_len); | 1281 | memcpy(b, vec_start, handler_len); |
1276 | #ifdef CONFIG_MIPS_MT_SMTC | 1282 | #ifdef CONFIG_MIPS_MT_SMTC |
1277 | BUG_ON(n > 7); /* Vector index %d exceeds SMTC maximum. */ | 1283 | BUG_ON(n > 7); /* Vector index %d exceeds SMTC maximum. */ |
1278 | 1284 | ||
@@ -1554,6 +1560,10 @@ void __init trap_init(void) | |||
1554 | extern char except_vec3_generic, except_vec3_r4000; | 1560 | extern char except_vec3_generic, except_vec3_r4000; |
1555 | extern char except_vec4; | 1561 | extern char except_vec4; |
1556 | unsigned long i; | 1562 | unsigned long i; |
1563 | int rollback; | ||
1564 | |||
1565 | check_wait(); | ||
1566 | rollback = (cpu_wait == r4k_wait); | ||
1557 | 1567 | ||
1558 | #if defined(CONFIG_KGDB) | 1568 | #if defined(CONFIG_KGDB) |
1559 | if (kgdb_early_setup) | 1569 | if (kgdb_early_setup) |
@@ -1618,7 +1628,7 @@ void __init trap_init(void) | |||
1618 | if (board_be_init) | 1628 | if (board_be_init) |
1619 | board_be_init(); | 1629 | board_be_init(); |
1620 | 1630 | ||
1621 | set_except_vector(0, handle_int); | 1631 | set_except_vector(0, rollback ? rollback_handle_int : handle_int); |
1622 | set_except_vector(1, handle_tlbm); | 1632 | set_except_vector(1, handle_tlbm); |
1623 | set_except_vector(2, handle_tlbl); | 1633 | set_except_vector(2, handle_tlbl); |
1624 | set_except_vector(3, handle_tlbs); | 1634 | set_except_vector(3, handle_tlbs); |
diff --git a/arch/mips/kernel/vmlinux.lds.S b/arch/mips/kernel/vmlinux.lds.S index b5470ceb418b..afb119f35682 100644 --- a/arch/mips/kernel/vmlinux.lds.S +++ b/arch/mips/kernel/vmlinux.lds.S | |||
@@ -36,6 +36,7 @@ SECTIONS | |||
36 | SCHED_TEXT | 36 | SCHED_TEXT |
37 | LOCK_TEXT | 37 | LOCK_TEXT |
38 | KPROBES_TEXT | 38 | KPROBES_TEXT |
39 | *(.text.*) | ||
39 | *(.fixup) | 40 | *(.fixup) |
40 | *(.gnu.warning) | 41 | *(.gnu.warning) |
41 | } :text = 0 | 42 | } :text = 0 |
diff --git a/arch/mips/lib/csum_partial.S b/arch/mips/lib/csum_partial.S index 8d7784122c14..edac9892c51a 100644 --- a/arch/mips/lib/csum_partial.S +++ b/arch/mips/lib/csum_partial.S | |||
@@ -39,12 +39,14 @@ | |||
39 | #ifdef USE_DOUBLE | 39 | #ifdef USE_DOUBLE |
40 | 40 | ||
41 | #define LOAD ld | 41 | #define LOAD ld |
42 | #define LOAD32 lwu | ||
42 | #define ADD daddu | 43 | #define ADD daddu |
43 | #define NBYTES 8 | 44 | #define NBYTES 8 |
44 | 45 | ||
45 | #else | 46 | #else |
46 | 47 | ||
47 | #define LOAD lw | 48 | #define LOAD lw |
49 | #define LOAD32 lw | ||
48 | #define ADD addu | 50 | #define ADD addu |
49 | #define NBYTES 4 | 51 | #define NBYTES 4 |
50 | 52 | ||
@@ -60,6 +62,14 @@ | |||
60 | ADD sum, v1; \ | 62 | ADD sum, v1; \ |
61 | .set pop | 63 | .set pop |
62 | 64 | ||
65 | #define ADDC32(sum,reg) \ | ||
66 | .set push; \ | ||
67 | .set noat; \ | ||
68 | addu sum, reg; \ | ||
69 | sltu v1, sum, reg; \ | ||
70 | addu sum, v1; \ | ||
71 | .set pop | ||
72 | |||
63 | #define CSUM_BIGCHUNK1(src, offset, sum, _t0, _t1, _t2, _t3) \ | 73 | #define CSUM_BIGCHUNK1(src, offset, sum, _t0, _t1, _t2, _t3) \ |
64 | LOAD _t0, (offset + UNIT(0))(src); \ | 74 | LOAD _t0, (offset + UNIT(0))(src); \ |
65 | LOAD _t1, (offset + UNIT(1))(src); \ | 75 | LOAD _t1, (offset + UNIT(1))(src); \ |
@@ -132,7 +142,7 @@ LEAF(csum_partial) | |||
132 | beqz t8, .Lqword_align | 142 | beqz t8, .Lqword_align |
133 | andi t8, src, 0x8 | 143 | andi t8, src, 0x8 |
134 | 144 | ||
135 | lw t0, 0x00(src) | 145 | LOAD32 t0, 0x00(src) |
136 | LONG_SUBU a1, a1, 0x4 | 146 | LONG_SUBU a1, a1, 0x4 |
137 | ADDC(sum, t0) | 147 | ADDC(sum, t0) |
138 | PTR_ADDU src, src, 0x4 | 148 | PTR_ADDU src, src, 0x4 |
@@ -211,7 +221,7 @@ LEAF(csum_partial) | |||
211 | LONG_SRL t8, t8, 0x2 | 221 | LONG_SRL t8, t8, 0x2 |
212 | 222 | ||
213 | .Lend_words: | 223 | .Lend_words: |
214 | lw t0, (src) | 224 | LOAD32 t0, (src) |
215 | LONG_SUBU t8, t8, 0x1 | 225 | LONG_SUBU t8, t8, 0x1 |
216 | ADDC(sum, t0) | 226 | ADDC(sum, t0) |
217 | .set reorder /* DADDI_WAR */ | 227 | .set reorder /* DADDI_WAR */ |
@@ -230,6 +240,9 @@ LEAF(csum_partial) | |||
230 | /* Still a full word to go */ | 240 | /* Still a full word to go */ |
231 | ulw t1, (src) | 241 | ulw t1, (src) |
232 | PTR_ADDIU src, 4 | 242 | PTR_ADDIU src, 4 |
243 | #ifdef USE_DOUBLE | ||
244 | dsll t1, t1, 32 /* clear lower 32bit */ | ||
245 | #endif | ||
233 | ADDC(sum, t1) | 246 | ADDC(sum, t1) |
234 | 247 | ||
235 | 1: move t1, zero | 248 | 1: move t1, zero |
@@ -280,7 +293,7 @@ LEAF(csum_partial) | |||
280 | 1: | 293 | 1: |
281 | .set reorder | 294 | .set reorder |
282 | /* Add the passed partial csum. */ | 295 | /* Add the passed partial csum. */ |
283 | ADDC(sum, a2) | 296 | ADDC32(sum, a2) |
284 | jr ra | 297 | jr ra |
285 | .set noreorder | 298 | .set noreorder |
286 | END(csum_partial) | 299 | END(csum_partial) |
@@ -681,7 +694,7 @@ EXC( sb t0, NBYTES-2(dst), .Ls_exc) | |||
681 | .set pop | 694 | .set pop |
682 | 1: | 695 | 1: |
683 | .set reorder | 696 | .set reorder |
684 | ADDC(sum, psum) | 697 | ADDC32(sum, psum) |
685 | jr ra | 698 | jr ra |
686 | .set noreorder | 699 | .set noreorder |
687 | 700 | ||
diff --git a/arch/mips/vr41xx/common/irq.c b/arch/mips/vr41xx/common/irq.c index cba36a247e32..92dd1a0ca352 100644 --- a/arch/mips/vr41xx/common/irq.c +++ b/arch/mips/vr41xx/common/irq.c | |||
@@ -72,6 +72,7 @@ static void irq_dispatch(unsigned int irq) | |||
72 | cascade = irq_cascade + irq; | 72 | cascade = irq_cascade + irq; |
73 | if (cascade->get_irq != NULL) { | 73 | if (cascade->get_irq != NULL) { |
74 | unsigned int source_irq = irq; | 74 | unsigned int source_irq = irq; |
75 | int ret; | ||
75 | desc = irq_desc + source_irq; | 76 | desc = irq_desc + source_irq; |
76 | if (desc->chip->mask_ack) | 77 | if (desc->chip->mask_ack) |
77 | desc->chip->mask_ack(source_irq); | 78 | desc->chip->mask_ack(source_irq); |
@@ -79,8 +80,9 @@ static void irq_dispatch(unsigned int irq) | |||
79 | desc->chip->mask(source_irq); | 80 | desc->chip->mask(source_irq); |
80 | desc->chip->ack(source_irq); | 81 | desc->chip->ack(source_irq); |
81 | } | 82 | } |
82 | irq = cascade->get_irq(irq); | 83 | ret = cascade->get_irq(irq); |
83 | if (irq < 0) | 84 | irq = ret; |
85 | if (ret < 0) | ||
84 | atomic_inc(&irq_err_count); | 86 | atomic_inc(&irq_err_count); |
85 | else | 87 | else |
86 | irq_dispatch(irq); | 88 | irq_dispatch(irq); |
diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile index 717a3bc1352e..65d1a8454d2c 100644 --- a/arch/powerpc/boot/Makefile +++ b/arch/powerpc/boot/Makefile | |||
@@ -195,7 +195,7 @@ image-$(CONFIG_PPC_CELLEB) += zImage.pseries | |||
195 | image-$(CONFIG_PPC_CHRP) += zImage.chrp | 195 | image-$(CONFIG_PPC_CHRP) += zImage.chrp |
196 | image-$(CONFIG_PPC_EFIKA) += zImage.chrp | 196 | image-$(CONFIG_PPC_EFIKA) += zImage.chrp |
197 | image-$(CONFIG_PPC_PMAC) += zImage.pmac | 197 | image-$(CONFIG_PPC_PMAC) += zImage.pmac |
198 | image-$(CONFIG_PPC_HOLLY) += zImage.holly | 198 | image-$(CONFIG_PPC_HOLLY) += dtbImage.holly |
199 | image-$(CONFIG_PPC_PRPMC2800) += dtbImage.prpmc2800 | 199 | image-$(CONFIG_PPC_PRPMC2800) += dtbImage.prpmc2800 |
200 | image-$(CONFIG_PPC_ISERIES) += zImage.iseries | 200 | image-$(CONFIG_PPC_ISERIES) += zImage.iseries |
201 | image-$(CONFIG_DEFAULT_UIMAGE) += uImage | 201 | image-$(CONFIG_DEFAULT_UIMAGE) += uImage |
diff --git a/arch/powerpc/boot/dts/mpc8610_hpcd.dts b/arch/powerpc/boot/dts/mpc8610_hpcd.dts index 3b3a1062cb25..584a4f184eb2 100644 --- a/arch/powerpc/boot/dts/mpc8610_hpcd.dts +++ b/arch/powerpc/boot/dts/mpc8610_hpcd.dts | |||
@@ -281,7 +281,7 @@ | |||
281 | cell-index = <0>; | 281 | cell-index = <0>; |
282 | reg = <0x0 0x80>; | 282 | reg = <0x0 0x80>; |
283 | interrupt-parent = <&mpic>; | 283 | interrupt-parent = <&mpic>; |
284 | interrupts = <60 2>; | 284 | interrupts = <76 2>; |
285 | }; | 285 | }; |
286 | dma-channel@1 { | 286 | dma-channel@1 { |
287 | compatible = "fsl,mpc8610-dma-channel", | 287 | compatible = "fsl,mpc8610-dma-channel", |
@@ -289,7 +289,7 @@ | |||
289 | cell-index = <1>; | 289 | cell-index = <1>; |
290 | reg = <0x80 0x80>; | 290 | reg = <0x80 0x80>; |
291 | interrupt-parent = <&mpic>; | 291 | interrupt-parent = <&mpic>; |
292 | interrupts = <61 2>; | 292 | interrupts = <77 2>; |
293 | }; | 293 | }; |
294 | dma-channel@2 { | 294 | dma-channel@2 { |
295 | compatible = "fsl,mpc8610-dma-channel", | 295 | compatible = "fsl,mpc8610-dma-channel", |
@@ -297,7 +297,7 @@ | |||
297 | cell-index = <2>; | 297 | cell-index = <2>; |
298 | reg = <0x100 0x80>; | 298 | reg = <0x100 0x80>; |
299 | interrupt-parent = <&mpic>; | 299 | interrupt-parent = <&mpic>; |
300 | interrupts = <62 2>; | 300 | interrupts = <78 2>; |
301 | }; | 301 | }; |
302 | dma-channel@3 { | 302 | dma-channel@3 { |
303 | compatible = "fsl,mpc8610-dma-channel", | 303 | compatible = "fsl,mpc8610-dma-channel", |
@@ -305,7 +305,7 @@ | |||
305 | cell-index = <3>; | 305 | cell-index = <3>; |
306 | reg = <0x180 0x80>; | 306 | reg = <0x180 0x80>; |
307 | interrupt-parent = <&mpic>; | 307 | interrupt-parent = <&mpic>; |
308 | interrupts = <63 2>; | 308 | interrupts = <79 2>; |
309 | }; | 309 | }; |
310 | }; | 310 | }; |
311 | 311 | ||
diff --git a/arch/powerpc/include/asm/elf.h b/arch/powerpc/include/asm/elf.h index 80d1f399ee51..64c6ee22eefd 100644 --- a/arch/powerpc/include/asm/elf.h +++ b/arch/powerpc/include/asm/elf.h | |||
@@ -409,6 +409,13 @@ do { \ | |||
409 | /* Keep this the last entry. */ | 409 | /* Keep this the last entry. */ |
410 | #define R_PPC64_NUM 107 | 410 | #define R_PPC64_NUM 107 |
411 | 411 | ||
412 | /* There's actually a third entry here, but it's unused */ | ||
413 | struct ppc64_opd_entry | ||
414 | { | ||
415 | unsigned long funcaddr; | ||
416 | unsigned long r2; | ||
417 | }; | ||
418 | |||
412 | #ifdef __KERNEL__ | 419 | #ifdef __KERNEL__ |
413 | 420 | ||
414 | #ifdef CONFIG_SPU_BASE | 421 | #ifdef CONFIG_SPU_BASE |
diff --git a/arch/powerpc/include/asm/sections.h b/arch/powerpc/include/asm/sections.h index 7710e9e6660f..07956f3e7844 100644 --- a/arch/powerpc/include/asm/sections.h +++ b/arch/powerpc/include/asm/sections.h | |||
@@ -2,6 +2,8 @@ | |||
2 | #define _ASM_POWERPC_SECTIONS_H | 2 | #define _ASM_POWERPC_SECTIONS_H |
3 | #ifdef __KERNEL__ | 3 | #ifdef __KERNEL__ |
4 | 4 | ||
5 | #include <linux/elf.h> | ||
6 | #include <linux/uaccess.h> | ||
5 | #include <asm-generic/sections.h> | 7 | #include <asm-generic/sections.h> |
6 | 8 | ||
7 | #ifdef __powerpc64__ | 9 | #ifdef __powerpc64__ |
@@ -17,7 +19,15 @@ static inline int in_kernel_text(unsigned long addr) | |||
17 | } | 19 | } |
18 | 20 | ||
19 | #undef dereference_function_descriptor | 21 | #undef dereference_function_descriptor |
20 | void *dereference_function_descriptor(void *); | 22 | static inline void *dereference_function_descriptor(void *ptr) |
23 | { | ||
24 | struct ppc64_opd_entry *desc = ptr; | ||
25 | void *p; | ||
26 | |||
27 | if (!probe_kernel_address(&desc->funcaddr, p)) | ||
28 | ptr = p; | ||
29 | return ptr; | ||
30 | } | ||
21 | 31 | ||
22 | #endif | 32 | #endif |
23 | 33 | ||
diff --git a/arch/powerpc/kernel/module_64.c b/arch/powerpc/kernel/module_64.c index ad79de272ff3..1af2377e4992 100644 --- a/arch/powerpc/kernel/module_64.c +++ b/arch/powerpc/kernel/module_64.c | |||
@@ -21,9 +21,7 @@ | |||
21 | #include <linux/err.h> | 21 | #include <linux/err.h> |
22 | #include <linux/vmalloc.h> | 22 | #include <linux/vmalloc.h> |
23 | #include <linux/bug.h> | 23 | #include <linux/bug.h> |
24 | #include <linux/uaccess.h> | ||
25 | #include <asm/module.h> | 24 | #include <asm/module.h> |
26 | #include <asm/sections.h> | ||
27 | #include <asm/firmware.h> | 25 | #include <asm/firmware.h> |
28 | #include <asm/code-patching.h> | 26 | #include <asm/code-patching.h> |
29 | #include <linux/sort.h> | 27 | #include <linux/sort.h> |
@@ -43,13 +41,6 @@ | |||
43 | #define DEBUGP(fmt , ...) | 41 | #define DEBUGP(fmt , ...) |
44 | #endif | 42 | #endif |
45 | 43 | ||
46 | /* There's actually a third entry here, but it's unused */ | ||
47 | struct ppc64_opd_entry | ||
48 | { | ||
49 | unsigned long funcaddr; | ||
50 | unsigned long r2; | ||
51 | }; | ||
52 | |||
53 | /* Like PPC32, we need little trampolines to do > 24-bit jumps (into | 44 | /* Like PPC32, we need little trampolines to do > 24-bit jumps (into |
54 | the kernel itself). But on PPC64, these need to be used for every | 45 | the kernel itself). But on PPC64, these need to be used for every |
55 | jump, actually, to reset r2 (TOC+0x8000). */ | 46 | jump, actually, to reset r2 (TOC+0x8000). */ |
@@ -452,13 +443,3 @@ int apply_relocate_add(Elf64_Shdr *sechdrs, | |||
452 | 443 | ||
453 | return 0; | 444 | return 0; |
454 | } | 445 | } |
455 | |||
456 | void *dereference_function_descriptor(void *ptr) | ||
457 | { | ||
458 | struct ppc64_opd_entry *desc = ptr; | ||
459 | void *p; | ||
460 | |||
461 | if (!probe_kernel_address(&desc->funcaddr, p)) | ||
462 | ptr = p; | ||
463 | return ptr; | ||
464 | } | ||
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c index 8aab8517642e..4e456bd955bb 100644 --- a/arch/x86/kernel/cpu/common.c +++ b/arch/x86/kernel/cpu/common.c | |||
@@ -344,31 +344,15 @@ static void __init early_cpu_detect(void) | |||
344 | 344 | ||
345 | /* | 345 | /* |
346 | * The NOPL instruction is supposed to exist on all CPUs with | 346 | * The NOPL instruction is supposed to exist on all CPUs with |
347 | * family >= 6, unfortunately, that's not true in practice because | 347 | * family >= 6; unfortunately, that's not true in practice because |
348 | * of early VIA chips and (more importantly) broken virtualizers that | 348 | * of early VIA chips and (more importantly) broken virtualizers that |
349 | * are not easy to detect. Hence, probe for it based on first | 349 | * are not easy to detect. In the latter case it doesn't even *fail* |
350 | * principles. | 350 | * reliably, so probing for it doesn't even work. Disable it completely |
351 | * unless we can find a reliable way to detect all the broken cases. | ||
351 | */ | 352 | */ |
352 | static void __cpuinit detect_nopl(struct cpuinfo_x86 *c) | 353 | static void __cpuinit detect_nopl(struct cpuinfo_x86 *c) |
353 | { | 354 | { |
354 | const u32 nopl_signature = 0x888c53b1; /* Random number */ | ||
355 | u32 has_nopl = nopl_signature; | ||
356 | |||
357 | clear_cpu_cap(c, X86_FEATURE_NOPL); | 355 | clear_cpu_cap(c, X86_FEATURE_NOPL); |
358 | if (c->x86 >= 6) { | ||
359 | asm volatile("\n" | ||
360 | "1: .byte 0x0f,0x1f,0xc0\n" /* nopl %eax */ | ||
361 | "2:\n" | ||
362 | " .section .fixup,\"ax\"\n" | ||
363 | "3: xor %0,%0\n" | ||
364 | " jmp 2b\n" | ||
365 | " .previous\n" | ||
366 | _ASM_EXTABLE(1b,3b) | ||
367 | : "+a" (has_nopl)); | ||
368 | |||
369 | if (has_nopl == nopl_signature) | ||
370 | set_cpu_cap(c, X86_FEATURE_NOPL); | ||
371 | } | ||
372 | } | 356 | } |
373 | 357 | ||
374 | static void __cpuinit generic_identify(struct cpuinfo_x86 *c) | 358 | static void __cpuinit generic_identify(struct cpuinfo_x86 *c) |
diff --git a/arch/x86/kernel/kdebugfs.c b/arch/x86/kernel/kdebugfs.c index f2d43bc75514..ff7d3b0124f1 100644 --- a/arch/x86/kernel/kdebugfs.c +++ b/arch/x86/kernel/kdebugfs.c | |||
@@ -139,6 +139,7 @@ static int __init create_setup_data_nodes(struct dentry *parent) | |||
139 | if (PageHighMem(pg)) { | 139 | if (PageHighMem(pg)) { |
140 | data = ioremap_cache(pa_data, sizeof(*data)); | 140 | data = ioremap_cache(pa_data, sizeof(*data)); |
141 | if (!data) { | 141 | if (!data) { |
142 | kfree(node); | ||
142 | error = -ENXIO; | 143 | error = -ENXIO; |
143 | goto err_dir; | 144 | goto err_dir; |
144 | } | 145 | } |
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index 362d4e7f2d38..9838f2539dfc 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c | |||
@@ -670,6 +670,10 @@ void __init setup_arch(char **cmdline_p) | |||
670 | 670 | ||
671 | parse_early_param(); | 671 | parse_early_param(); |
672 | 672 | ||
673 | #ifdef CONFIG_X86_64 | ||
674 | check_efer(); | ||
675 | #endif | ||
676 | |||
673 | #if defined(CONFIG_VMI) && defined(CONFIG_X86_32) | 677 | #if defined(CONFIG_VMI) && defined(CONFIG_X86_32) |
674 | /* | 678 | /* |
675 | * Must be before kernel pagetables are setup | 679 | * Must be before kernel pagetables are setup |
@@ -738,7 +742,6 @@ void __init setup_arch(char **cmdline_p) | |||
738 | #else | 742 | #else |
739 | num_physpages = max_pfn; | 743 | num_physpages = max_pfn; |
740 | 744 | ||
741 | check_efer(); | ||
742 | 745 | ||
743 | /* How many end-of-memory variables you have, grandma! */ | 746 | /* How many end-of-memory variables you have, grandma! */ |
744 | /* need this before calling reserve_initrd */ | 747 | /* need this before calling reserve_initrd */ |
diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c index d37f29376b0c..60ec1d08ff24 100644 --- a/arch/x86/mm/init_32.c +++ b/arch/x86/mm/init_32.c | |||
@@ -458,11 +458,7 @@ static void __init pagetable_init(void) | |||
458 | { | 458 | { |
459 | pgd_t *pgd_base = swapper_pg_dir; | 459 | pgd_t *pgd_base = swapper_pg_dir; |
460 | 460 | ||
461 | paravirt_pagetable_setup_start(pgd_base); | ||
462 | |||
463 | permanent_kmaps_init(pgd_base); | 461 | permanent_kmaps_init(pgd_base); |
464 | |||
465 | paravirt_pagetable_setup_done(pgd_base); | ||
466 | } | 462 | } |
467 | 463 | ||
468 | #ifdef CONFIG_ACPI_SLEEP | 464 | #ifdef CONFIG_ACPI_SLEEP |
diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c index b6acc3a0af46..d67901083888 100644 --- a/arch/x86/xen/setup.c +++ b/arch/x86/xen/setup.c | |||
@@ -42,7 +42,7 @@ char * __init xen_memory_setup(void) | |||
42 | 42 | ||
43 | e820.nr_map = 0; | 43 | e820.nr_map = 0; |
44 | 44 | ||
45 | e820_add_region(0, PFN_PHYS(max_pfn), E820_RAM); | 45 | e820_add_region(0, PFN_PHYS((u64)max_pfn), E820_RAM); |
46 | 46 | ||
47 | /* | 47 | /* |
48 | * Even though this is normal, usable memory under Xen, reserve | 48 | * Even though this is normal, usable memory under Xen, reserve |