Module Name: src Committed By: martin Date: Tue Dec 19 12:26:01 UTC 2023
Modified Files: src/sys/arch/vax/vax [netbsd-10]: subr.S Log Message: Pull up following revision(s) (requested by kalvisd in ticket #508): sys/arch/vax/vax/subr.S: revision 1.43 vax: preserve AST requests raised when handling software interrupts PR port-vax/55415 On return from a software interrupt, if the software interrupt LWP raised an AST request, copy the AST level from its PCB to the PCB of the interrupted LWP. Reviewed by <ragge> To generate a diff of this commit: cvs rdiff -u -r1.41.2.1 -r1.41.2.2 src/sys/arch/vax/vax/subr.S 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/vax/vax/subr.S diff -u src/sys/arch/vax/vax/subr.S:1.41.2.1 src/sys/arch/vax/vax/subr.S:1.41.2.2 --- src/sys/arch/vax/vax/subr.S:1.41.2.1 Mon Jul 31 13:36:31 2023 +++ src/sys/arch/vax/vax/subr.S Tue Dec 19 12:26:01 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: subr.S,v 1.41.2.1 2023/07/31 13:36:31 martin Exp $ */ +/* $NetBSD: subr.S,v 1.41.2.2 2023/12/19 12:26:01 martin Exp $ */ /* * Copyright (c) 1994 Ludd, University of Lule}, Sweden. @@ -319,7 +319,18 @@ softint_process: movl %r6,CI_CURLWP(%r8) /* XXX store-before-load barrier -- see cpu_switchto */ #endif - + /* copy AST level from current LWP to pinned LWP, reset + current AST level */ + mfpr $PR_SSP,%r4 /* current LWP */ + movl L_PCB(%r4),%r4 /* PCB address */ + movl P0LR(%r4),%r0 /* LR and ASTLVL field, current PCB */ + movl P0LR(%r3),%r1 /* same, pinned LWP */ + cmpl %r0,%r1 + bgtru 1f /* AST(current) >= AST(pinned) */ + extv $24,$3,%r0,%r0 /* ASTLVL field for current LWP */ + insv %r0,$24,$3,P0LR(%r3) /* copy to pinned LWP */ + insv $4,$24,$3,P0LR(%r4) /* reset AST for current LWP */ +1: mtpr PCB_PADDR(%r3),$PR_PCBB /* restore PA of interrupted pcb */ ldpctx /* implicitly updates curlwp */ rei