Module Name:    src
Committed By:   ad
Date:           Sat Nov 23 16:50:39 UTC 2019

Modified Files:
        src/sys/arch/sparc/include: userret.h

Log Message:
Looks like sparc clears want_ast with interrupts enabled, so check+clear it
and call mi_userret() in a loop.


To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 src/sys/arch/sparc/include/userret.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/sparc/include/userret.h
diff -u src/sys/arch/sparc/include/userret.h:1.9 src/sys/arch/sparc/include/userret.h:1.10
--- src/sys/arch/sparc/include/userret.h:1.9	Thu Nov 21 19:24:01 2019
+++ src/sys/arch/sparc/include/userret.h	Sat Nov 23 16:50:39 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: userret.h,v 1.9 2019/11/21 19:24:01 ad Exp $ */
+/*	$NetBSD: userret.h,v 1.10 2019/11/23 16:50:39 ad Exp $ */
 
 /*
  * Copyright (c) 1996
@@ -62,11 +62,10 @@ static __inline void
 userret(struct lwp *l, int pc, u_quad_t oticks)
 {
 	struct proc *p = l->l_proc;
-	
-	mi_userret(l);
 
-	if (cpuinfo.ci_want_ast) {
+	while (cpuinfo.ci_want_ast) {
 		cpuinfo.ci_want_ast = 0;
+		mi_userret(l);
 		if (l->l_pflag & LP_OWEUPC) {
 			l->l_pflag &= ~LP_OWEUPC;
 			ADDUPROF(l);

Reply via email to