Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
runtime_instr.h
Go to the documentation of this file.
1 #ifndef _RUNTIME_INSTR_H
2 #define _RUNTIME_INSTR_H
3 
4 #define S390_RUNTIME_INSTR_START 0x1
5 #define S390_RUNTIME_INSTR_STOP 0x2
6 
11 
12  __u32 valid : 1;
17  __u32 : 3;
22  __u32 : 1;
26  __u32 key : 4;
27  __u32 : 9;
28  __u32 rgs : 3;
29 
30  __u32 mode : 4;
31  __u32 next : 1;
32  __u32 mae : 1;
33  __u32 : 2;
38  __u32 emit : 1;
40  __u32 : 2;
41  __u32 bp_xn : 1;
42  __u32 bp_xt : 1;
43  __u32 bp_ti : 1;
44  __u32 bp_ni : 1;
47 
52 
57 } __packed __aligned(8);
58 
60 
61 static inline void load_runtime_instr_cb(struct runtime_instr_cb *cb)
62 {
63  asm volatile(".insn rsy,0xeb0000000060,0,0,%0" /* LRIC */
64  : : "Q" (*cb));
65 }
66 
67 static inline void store_runtime_instr_cb(struct runtime_instr_cb *cb)
68 {
69  asm volatile(".insn rsy,0xeb0000000061,0,0,%0" /* STRIC */
70  : "=Q" (*cb) : : "cc");
71 }
72 
73 static inline void save_ri_cb(struct runtime_instr_cb *cb_prev)
74 {
75 #ifdef CONFIG_64BIT
76  if (cb_prev)
77  store_runtime_instr_cb(cb_prev);
78 #endif
79 }
80 
81 static inline void restore_ri_cb(struct runtime_instr_cb *cb_next,
82  struct runtime_instr_cb *cb_prev)
83 {
84 #ifdef CONFIG_64BIT
85  if (cb_next)
86  load_runtime_instr_cb(cb_next);
87  else if (cb_prev)
88  load_runtime_instr_cb(&runtime_instr_empty_cb);
89 #endif
90 }
91 
92 #ifdef CONFIG_64BIT
93 extern void exit_thread_runtime_instr(void);
94 #else
95 static inline void exit_thread_runtime_instr(void) { }
96 #endif
97 
98 #endif /* _RUNTIME_INSTR_H */