diff options
Diffstat (limited to 'arch/x86/kernel/alternative.c')
-rw-r--r-- | arch/x86/kernel/alternative.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c index 2589ea4c60ce..80b222ea4cf6 100644 --- a/arch/x86/kernel/alternative.c +++ b/arch/x86/kernel/alternative.c | |||
@@ -244,7 +244,8 @@ static void alternatives_smp_lock(u8 **start, u8 **end, u8 *text, u8 *text_end) | |||
244 | if (*ptr > text_end) | 244 | if (*ptr > text_end) |
245 | continue; | 245 | continue; |
246 | /* turn DS segment override prefix into lock prefix */ | 246 | /* turn DS segment override prefix into lock prefix */ |
247 | text_poke(*ptr, ((unsigned char []){0xf0}), 1); | 247 | if (**ptr == 0x3e) |
248 | text_poke(*ptr, ((unsigned char []){0xf0}), 1); | ||
248 | }; | 249 | }; |
249 | mutex_unlock(&text_mutex); | 250 | mutex_unlock(&text_mutex); |
250 | } | 251 | } |
@@ -263,7 +264,8 @@ static void alternatives_smp_unlock(u8 **start, u8 **end, u8 *text, u8 *text_end | |||
263 | if (*ptr > text_end) | 264 | if (*ptr > text_end) |
264 | continue; | 265 | continue; |
265 | /* turn lock prefix into DS segment override prefix */ | 266 | /* turn lock prefix into DS segment override prefix */ |
266 | text_poke(*ptr, ((unsigned char []){0x3E}), 1); | 267 | if (**ptr == 0xf0) |
268 | text_poke(*ptr, ((unsigned char []){0x3E}), 1); | ||
267 | }; | 269 | }; |
268 | mutex_unlock(&text_mutex); | 270 | mutex_unlock(&text_mutex); |
269 | } | 271 | } |