diff options
-rw-r--r-- | arch/x86/kernel/entry_64.S | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S index 6f251a5ee1dc..f6e37de02ba7 100644 --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S | |||
@@ -269,8 +269,11 @@ system_call_fastpath: | |||
269 | * Has incompletely filled pt_regs. | 269 | * Has incompletely filled pt_regs. |
270 | */ | 270 | */ |
271 | LOCKDEP_SYS_EXIT | 271 | LOCKDEP_SYS_EXIT |
272 | /* | ||
273 | * We do not frame this tiny irq-off block with TRACE_IRQS_OFF/ON, | ||
274 | * it is too small to ever cause noticeable irq latency. | ||
275 | */ | ||
272 | DISABLE_INTERRUPTS(CLBR_NONE) | 276 | DISABLE_INTERRUPTS(CLBR_NONE) |
273 | TRACE_IRQS_OFF | ||
274 | 277 | ||
275 | /* | 278 | /* |
276 | * We must check ti flags with interrupts (or at least preemption) | 279 | * We must check ti flags with interrupts (or at least preemption) |
@@ -284,10 +287,7 @@ system_call_fastpath: | |||
284 | jnz int_ret_from_sys_call_irqs_off /* Go to the slow path */ | 287 | jnz int_ret_from_sys_call_irqs_off /* Go to the slow path */ |
285 | 288 | ||
286 | CFI_REMEMBER_STATE | 289 | CFI_REMEMBER_STATE |
287 | /* | 290 | |
288 | * sysretq will re-enable interrupts: | ||
289 | */ | ||
290 | TRACE_IRQS_ON | ||
291 | RESTORE_C_REGS_EXCEPT_RCX_R11 | 291 | RESTORE_C_REGS_EXCEPT_RCX_R11 |
292 | movq RIP(%rsp),%rcx | 292 | movq RIP(%rsp),%rcx |
293 | CFI_REGISTER rip,rcx | 293 | CFI_REGISTER rip,rcx |
@@ -298,6 +298,7 @@ system_call_fastpath: | |||
298 | * 64bit SYSRET restores rip from rcx, | 298 | * 64bit SYSRET restores rip from rcx, |
299 | * rflags from r11 (but RF and VM bits are forced to 0), | 299 | * rflags from r11 (but RF and VM bits are forced to 0), |
300 | * cs and ss are loaded from MSRs. | 300 | * cs and ss are loaded from MSRs. |
301 | * Restoration of rflags re-enables interrupts. | ||
301 | */ | 302 | */ |
302 | USERGS_SYSRET64 | 303 | USERGS_SYSRET64 |
303 | 304 | ||
@@ -346,8 +347,8 @@ tracesys_phase2: | |||
346 | */ | 347 | */ |
347 | GLOBAL(int_ret_from_sys_call) | 348 | GLOBAL(int_ret_from_sys_call) |
348 | DISABLE_INTERRUPTS(CLBR_NONE) | 349 | DISABLE_INTERRUPTS(CLBR_NONE) |
350 | int_ret_from_sys_call_irqs_off: /* jumps come here from the irqs-off SYSRET path */ | ||
349 | TRACE_IRQS_OFF | 351 | TRACE_IRQS_OFF |
350 | int_ret_from_sys_call_irqs_off: | ||
351 | movl $_TIF_ALLWORK_MASK,%edi | 352 | movl $_TIF_ALLWORK_MASK,%edi |
352 | /* edi: mask to check */ | 353 | /* edi: mask to check */ |
353 | GLOBAL(int_with_check) | 354 | GLOBAL(int_with_check) |