diff options
-rw-r--r-- | arch/powerpc/Makefile | 4 | ||||
-rw-r--r-- | arch/powerpc/include/asm/ppc_asm.h | 7 | ||||
-rw-r--r-- | arch/powerpc/kernel/machine_kexec_64.c | 2 | ||||
-rw-r--r-- | kernel/kexec.c | 8 |
4 files changed, 18 insertions, 3 deletions
diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile index 4c0cedf4e2c7..ce4c68a4a823 100644 --- a/arch/powerpc/Makefile +++ b/arch/powerpc/Makefile | |||
@@ -150,7 +150,9 @@ endif | |||
150 | 150 | ||
151 | CFLAGS-$(CONFIG_TUNE_CELL) += $(call cc-option,-mtune=cell) | 151 | CFLAGS-$(CONFIG_TUNE_CELL) += $(call cc-option,-mtune=cell) |
152 | 152 | ||
153 | KBUILD_CPPFLAGS += -Iarch/$(ARCH) | 153 | asinstr := $(call as-instr,lis 9$(comma)foo@high,-DHAVE_AS_ATHIGH=1) |
154 | |||
155 | KBUILD_CPPFLAGS += -Iarch/$(ARCH) $(asinstr) | ||
154 | KBUILD_AFLAGS += -Iarch/$(ARCH) | 156 | KBUILD_AFLAGS += -Iarch/$(ARCH) |
155 | KBUILD_CFLAGS += -msoft-float -pipe -Iarch/$(ARCH) $(CFLAGS-y) | 157 | KBUILD_CFLAGS += -msoft-float -pipe -Iarch/$(ARCH) $(CFLAGS-y) |
156 | CPP = $(CC) -E $(KBUILD_CFLAGS) | 158 | CPP = $(CC) -E $(KBUILD_CFLAGS) |
diff --git a/arch/powerpc/include/asm/ppc_asm.h b/arch/powerpc/include/asm/ppc_asm.h index 6586a40a46ce..cded7c1278ef 100644 --- a/arch/powerpc/include/asm/ppc_asm.h +++ b/arch/powerpc/include/asm/ppc_asm.h | |||
@@ -318,11 +318,16 @@ n: | |||
318 | addi reg,reg,(name - 0b)@l; | 318 | addi reg,reg,(name - 0b)@l; |
319 | 319 | ||
320 | #ifdef __powerpc64__ | 320 | #ifdef __powerpc64__ |
321 | #ifdef HAVE_AS_ATHIGH | ||
322 | #define __AS_ATHIGH high | ||
323 | #else | ||
324 | #define __AS_ATHIGH h | ||
325 | #endif | ||
321 | #define LOAD_REG_IMMEDIATE(reg,expr) \ | 326 | #define LOAD_REG_IMMEDIATE(reg,expr) \ |
322 | lis reg,(expr)@highest; \ | 327 | lis reg,(expr)@highest; \ |
323 | ori reg,reg,(expr)@higher; \ | 328 | ori reg,reg,(expr)@higher; \ |
324 | rldicr reg,reg,32,31; \ | 329 | rldicr reg,reg,32,31; \ |
325 | oris reg,reg,(expr)@h; \ | 330 | oris reg,reg,(expr)@__AS_ATHIGH; \ |
326 | ori reg,reg,(expr)@l; | 331 | ori reg,reg,(expr)@l; |
327 | 332 | ||
328 | #define LOAD_REG_ADDR(reg,name) \ | 333 | #define LOAD_REG_ADDR(reg,name) \ |
diff --git a/arch/powerpc/kernel/machine_kexec_64.c b/arch/powerpc/kernel/machine_kexec_64.c index 59d229a2a3e0..879b3aacac32 100644 --- a/arch/powerpc/kernel/machine_kexec_64.c +++ b/arch/powerpc/kernel/machine_kexec_64.c | |||
@@ -237,7 +237,7 @@ static void wake_offline_cpus(void) | |||
237 | if (!cpu_online(cpu)) { | 237 | if (!cpu_online(cpu)) { |
238 | printk(KERN_INFO "kexec: Waking offline cpu %d.\n", | 238 | printk(KERN_INFO "kexec: Waking offline cpu %d.\n", |
239 | cpu); | 239 | cpu); |
240 | cpu_up(cpu); | 240 | WARN_ON(cpu_up(cpu)); |
241 | } | 241 | } |
242 | } | 242 | } |
243 | } | 243 | } |
diff --git a/kernel/kexec.c b/kernel/kexec.c index c8380ad203bc..28c57069ef68 100644 --- a/kernel/kexec.c +++ b/kernel/kexec.c | |||
@@ -1683,6 +1683,14 @@ int kernel_kexec(void) | |||
1683 | kexec_in_progress = true; | 1683 | kexec_in_progress = true; |
1684 | kernel_restart_prepare(NULL); | 1684 | kernel_restart_prepare(NULL); |
1685 | migrate_to_reboot_cpu(); | 1685 | migrate_to_reboot_cpu(); |
1686 | |||
1687 | /* | ||
1688 | * migrate_to_reboot_cpu() disables CPU hotplug assuming that | ||
1689 | * no further code needs to use CPU hotplug (which is true in | ||
1690 | * the reboot case). However, the kexec path depends on using | ||
1691 | * CPU hotplug again; so re-enable it here. | ||
1692 | */ | ||
1693 | cpu_hotplug_enable(); | ||
1686 | printk(KERN_EMERG "Starting new kernel\n"); | 1694 | printk(KERN_EMERG "Starting new kernel\n"); |
1687 | machine_shutdown(); | 1695 | machine_shutdown(); |
1688 | } | 1696 | } |