Index: arch/ppc/include/asm.h
===================================================================
--- arch/ppc/include/asm.h	(revision c5ae0958a7a30e5fbec3fbd14476375a8f78bc5b)
+++ arch/ppc/include/asm.h	(revision 3de9e5ea4eb09f92326501d4c5c77977cd08ffcb)
@@ -41,6 +41,11 @@
 	pri_t v;
 	__asm__ volatile (
-		"\n"
+		"mfmsr %0\n"
+		"mfmsr %%r31\n"
+		"ori %%r31, %%r31, 1 << 15\n"
+		"mtmsr %%r31\n"
 		: "=r" (v)
+		:
+		: "%r31"
 	);
 	return v;
@@ -55,6 +60,11 @@
 	pri_t v;
 	__asm__ volatile (
-		"\n"
+		"mfmsr %0\n"
+		"mfmsr %%r31\n"
+		"rlwinm %%r31, %%r31, 0, 17, 15\n"
+		"mtmsr %%r31\n"
 		: "=r" (v)
+		:
+		: "%r31"
 	);
 	return v;
@@ -67,6 +77,10 @@
 static inline void cpu_priority_restore(pri_t pri) {
 	__asm__ volatile (
-		"\n"
-		: : "r" (pri)
+		"mfmsr %%r31\n"
+		"rlwimi  %0, %%r31, 0, 17, 15\n"
+		"mtmsr %0\n"
+		: "=r" (pri)
+		: "0" (pri)
+		: "%r31"
 	);
 }
