aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/kernel/entry_64.S13
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 */
347GLOBAL(int_ret_from_sys_call) 348GLOBAL(int_ret_from_sys_call)
348 DISABLE_INTERRUPTS(CLBR_NONE) 349 DISABLE_INTERRUPTS(CLBR_NONE)
350int_ret_from_sys_call_irqs_off: /* jumps come here from the irqs-off SYSRET path */
349 TRACE_IRQS_OFF 351 TRACE_IRQS_OFF
350int_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 */
353GLOBAL(int_with_check) 354GLOBAL(int_with_check)