diff options
Diffstat (limited to 'include/asm-i386')
-rw-r--r-- | include/asm-i386/system.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/include/asm-i386/system.h b/include/asm-i386/system.h index 772f85da1206..88b4d5c6f37a 100644 --- a/include/asm-i386/system.h +++ b/include/asm-i386/system.h | |||
@@ -140,6 +140,19 @@ static inline unsigned long _get_base(char * addr) | |||
140 | :"=r" (__dummy)); \ | 140 | :"=r" (__dummy)); \ |
141 | __dummy; \ | 141 | __dummy; \ |
142 | }) | 142 | }) |
143 | |||
144 | #define read_cr4_safe() ({ \ | ||
145 | unsigned int __dummy; \ | ||
146 | /* This could fault if %cr4 does not exist */ \ | ||
147 | __asm__("1: movl %%cr4, %0 \n" \ | ||
148 | "2: \n" \ | ||
149 | ".section __ex_table,\"a\" \n" \ | ||
150 | ".long 1b,2b \n" \ | ||
151 | ".previous \n" \ | ||
152 | : "=r" (__dummy): "0" (0)); \ | ||
153 | __dummy; \ | ||
154 | }) | ||
155 | |||
143 | #define write_cr4(x) \ | 156 | #define write_cr4(x) \ |
144 | __asm__ __volatile__("movl %0,%%cr4": :"r" (x)); | 157 | __asm__ __volatile__("movl %0,%%cr4": :"r" (x)); |
145 | #define stts() write_cr0(8 | read_cr0()) | 158 | #define stts() write_cr0(8 | read_cr0()) |