[S390] EX_TABLE macro.
[firefly-linux-kernel-4.4.55.git] / include / asm-s390 / processor.h
index 4ec652ebb3b1910bb80d80c4926080eb49216244..a3a4e5fd30d70ffc51b685a756b01b69321a0b24 100644 (file)
@@ -191,23 +191,21 @@ extern void show_registers(struct pt_regs *regs);
 extern void show_trace(struct task_struct *task, unsigned long *sp);
 
 unsigned long get_wchan(struct task_struct *p);
-#define __KSTK_PTREGS(tsk) ((struct pt_regs *) \
-        ((unsigned long) tsk->thread_info + THREAD_SIZE - sizeof(struct pt_regs)))
-#define KSTK_EIP(tsk)  (__KSTK_PTREGS(tsk)->psw.addr)
-#define KSTK_ESP(tsk)  (__KSTK_PTREGS(tsk)->gprs[15])
+#define task_pt_regs(tsk) ((struct pt_regs *) \
+        (task_stack_page(tsk) + THREAD_SIZE) - 1)
+#define KSTK_EIP(tsk)  (task_pt_regs(tsk)->psw.addr)
+#define KSTK_ESP(tsk)  (task_pt_regs(tsk)->gprs[15])
 
 /*
  * Give up the time slice of the virtual PU.
  */
-#ifndef __s390x__
-# define cpu_relax()   asm volatile ("diag 0,0,68" : : : "memory")
-#else /* __s390x__ */
-# define cpu_relax() \
-       do { \
-               if (MACHINE_HAS_DIAG44) \
-                       asm volatile ("diag 0,0,68" : : : "memory"); \
-       } while (0)
-#endif /* __s390x__ */
+static inline void cpu_relax(void)
+{
+       if (MACHINE_HAS_DIAG44)
+               asm volatile ("diag 0,0,68" : : : "memory");
+       else
+               barrier();
+}
 
 /*
  * Set PSW to specified value.
@@ -341,4 +339,21 @@ int unregister_idle_notifier(struct notifier_block *nb);
 
 #endif
 
+/*
+ * Helper macro for exception table entries
+ */
+#ifndef __s390x__
+#define EX_TABLE(_fault,_target)                       \
+       ".section __ex_table,\"a\"\n"                   \
+       "       .align 4\n"                             \
+       "       .long  " #_fault "," #_target "\n"      \
+       ".previous\n"
+#else
+#define EX_TABLE(_fault,_target)                       \
+       ".section __ex_table,\"a\"\n"                   \
+       "       .align 8\n"                             \
+       "       .quad  " #_fault "," #_target "\n"      \
+       ".previous\n"
+#endif
+
 #endif                                 /* __ASM_S390_PROCESSOR_H           */