Module Name:    src
Committed By:   maxv
Date:           Sat Jan 27 18:17:57 UTC 2018

Modified Files:
        src/sys/arch/amd64/amd64: vector.S
        src/sys/arch/amd64/include: frameasm.h

Log Message:
Declare and use INTR_RECURSE_ENTRY, an optimized version of INTRENTRY.
When processing deferred interrupts, we are always entering the new
handler in kernel mode, so there is no point performing the userland
checks.

Saves several instructions.


To generate a diff of this commit:
cvs rdiff -u -r1.56 -r1.57 src/sys/arch/amd64/amd64/vector.S
cvs rdiff -u -r1.32 -r1.33 src/sys/arch/amd64/include/frameasm.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/amd64/amd64/vector.S
diff -u src/sys/arch/amd64/amd64/vector.S:1.56 src/sys/arch/amd64/amd64/vector.S:1.57
--- src/sys/arch/amd64/amd64/vector.S:1.56	Sun Jan 21 11:21:40 2018
+++ src/sys/arch/amd64/amd64/vector.S	Sat Jan 27 18:17:57 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: vector.S,v 1.56 2018/01/21 11:21:40 maxv Exp $	*/
+/*	$NetBSD: vector.S,v 1.57 2018/01/27 18:17:57 maxv Exp $	*/
 
 /*
  * Copyright (c) 1998, 2007, 2008 The NetBSD Foundation, Inc.
@@ -113,7 +113,7 @@ IDTVEC(recurse_lapic_ipi)
 	INTR_RECURSE_HWFRAME
 	pushq	$0
 	pushq	$T_ASTFLT
-	INTRENTRY
+	INTR_RECURSE_ENTRY
 	jmp	1f
 IDTVEC_END(recurse_lapic_ipi)
 NENTRY(handle_x2apic_ipi)
@@ -213,7 +213,7 @@ IDTVEC(recurse_lapic_ltimer)
 	INTR_RECURSE_HWFRAME
 	pushq	$0
 	pushq	$T_ASTFLT
-	INTRENTRY
+	INTR_RECURSE_ENTRY
 	jmp	1f
 IDTVEC_END(recurse_lapic_ltimer)
 NENTRY(handle_x2apic_ltimer)
@@ -316,7 +316,7 @@ IDTVEC(recurse_ ## name ## num)						;\
 	INTR_RECURSE_HWFRAME						;\
 	subq	$8,%rsp							;\
 	pushq	$T_ASTFLT		/* trap # for doing ASTs */	;\
-	INTRENTRY							;\
+	INTR_RECURSE_ENTRY						;\
 	jmp	1f							;\
 IDTVEC_END(recurse_ ## name ## num)					;\
 IDTVEC(resume_ ## name ## num)						\
@@ -881,7 +881,7 @@ IDTVEC(recurse_ ## name ## num)						;\
 	INTR_RECURSE_HWFRAME						;\
 	subq	$8,%rsp							;\
 	pushq	$T_ASTFLT		/* trap # for doing ASTs */	;\
-	INTRENTRY							;\
+	INTR_RECURSE_ENTRY						;\
 IDTVEC(resume_ ## name ## num)						\
 	movq	$IREENT_MAGIC,TF_ERR(%rsp)				;\
 	movl	%ebx,%r13d						;\

Index: src/sys/arch/amd64/include/frameasm.h
diff -u src/sys/arch/amd64/include/frameasm.h:1.32 src/sys/arch/amd64/include/frameasm.h:1.33
--- src/sys/arch/amd64/include/frameasm.h:1.32	Sat Jan 27 08:12:27 2018
+++ src/sys/arch/amd64/include/frameasm.h	Sat Jan 27 18:17:57 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: frameasm.h,v 1.32 2018/01/27 08:12:27 maxv Exp $	*/
+/*	$NetBSD: frameasm.h,v 1.33 2018/01/27 18:17:57 maxv Exp $	*/
 
 #ifndef _AMD64_MACHINE_FRAMEASM_H
 #define _AMD64_MACHINE_FRAMEASM_H
@@ -174,6 +174,11 @@ usertrap				; \
  	XEN_ONLY2(andb	$0xfc,(%rsp);)	  \
 	pushq	%r13			;
 
+#define INTR_RECURSE_ENTRY \
+	subq	$TF_REGSIZE,%rsp	; \
+	INTR_SAVE_GPRS			; \
+	cld
+
 #define	CHECK_DEFERRED_SWITCH \
 	cmpl	$0, CPUVAR(WANT_PMAPLOAD)
 

Reply via email to