Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9e3d6331 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull two powerpc fixes from Ben Herrenschmidt:
 "Here's a pair of powerpc fixes for 3.15 which are also going to
  stable.

  One's a fix for building with newer binutils (the problem currently
  only affects the BookE kernels but the affected macro might come back
  into use on BookS platforms at any time).  Unfortunately, the binutils
  maintainer did a backward incompatible change to a construct that we
  use so we have to add Makefile check.

  The other one is a fix for CPUs getting stuck in kexec when running
  single threaded.  Since we routinely use kexec on power (including in
  our newer bootloaders), I deemed that important enough"

* 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc:
  powerpc, kexec: Fix "Processor X is stuck" issue during kexec from ST mode
  powerpc: Fix 64 bit builds with binutils 2.24
parents cd79bde2 011e4b02
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -150,7 +150,9 @@ endif

CFLAGS-$(CONFIG_TUNE_CELL) += $(call cc-option,-mtune=cell)

KBUILD_CPPFLAGS	+= -Iarch/$(ARCH)
asinstr := $(call as-instr,lis 9$(comma)foo@high,-DHAVE_AS_ATHIGH=1)

KBUILD_CPPFLAGS	+= -Iarch/$(ARCH) $(asinstr)
KBUILD_AFLAGS	+= -Iarch/$(ARCH)
KBUILD_CFLAGS	+= -msoft-float -pipe -Iarch/$(ARCH) $(CFLAGS-y)
CPP		= $(CC) -E $(KBUILD_CFLAGS)
+6 −1
Original line number Diff line number Diff line
@@ -318,11 +318,16 @@ GLUE(.,name):
	addi	reg,reg,(name - 0b)@l;

#ifdef __powerpc64__
#ifdef HAVE_AS_ATHIGH
#define __AS_ATHIGH high
#else
#define __AS_ATHIGH h
#endif
#define LOAD_REG_IMMEDIATE(reg,expr)		\
	lis     reg,(expr)@highest;		\
	ori     reg,reg,(expr)@higher;	\
	rldicr  reg,reg,32,31;		\
	oris    reg,reg,(expr)@h;		\
	oris    reg,reg,(expr)@__AS_ATHIGH;	\
	ori     reg,reg,(expr)@l;

#define LOAD_REG_ADDR(reg,name)			\
+1 −1
Original line number Diff line number Diff line
@@ -237,7 +237,7 @@ static void wake_offline_cpus(void)
		if (!cpu_online(cpu)) {
			printk(KERN_INFO "kexec: Waking offline cpu %d.\n",
			       cpu);
			cpu_up(cpu);
			WARN_ON(cpu_up(cpu));
		}
	}
}
+8 −0
Original line number Diff line number Diff line
@@ -1683,6 +1683,14 @@ int kernel_kexec(void)
		kexec_in_progress = true;
		kernel_restart_prepare(NULL);
		migrate_to_reboot_cpu();

		/*
		 * migrate_to_reboot_cpu() disables CPU hotplug assuming that
		 * no further code needs to use CPU hotplug (which is true in
		 * the reboot case). However, the kexec path depends on using
		 * CPU hotplug again; so re-enable it here.
		 */
		cpu_hotplug_enable();
		printk(KERN_EMERG "Starting new kernel\n");
		machine_shutdown();
	}