Module Name: src Committed By: bouyer Date: Tue May 31 18:01:22 UTC 2022
Modified Files: src/sys/arch/xen/x86: hypervisor_machdep.c Log Message: When we have pending events in stipending(), evt_set_pending() has to set the ih_pending flag for each handler too. Xen/i386 should be stable again. To generate a diff of this commit: cvs rdiff -u -r1.42 -r1.43 src/sys/arch/xen/x86/hypervisor_machdep.c 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/xen/x86/hypervisor_machdep.c diff -u src/sys/arch/xen/x86/hypervisor_machdep.c:1.42 src/sys/arch/xen/x86/hypervisor_machdep.c:1.43 --- src/sys/arch/xen/x86/hypervisor_machdep.c:1.42 Tue May 31 14:21:44 2022 +++ src/sys/arch/xen/x86/hypervisor_machdep.c Tue May 31 18:01:22 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: hypervisor_machdep.c,v 1.42 2022/05/31 14:21:44 bouyer Exp $ */ +/* $NetBSD: hypervisor_machdep.c,v 1.43 2022/05/31 18:01:22 bouyer Exp $ */ /* * @@ -54,7 +54,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: hypervisor_machdep.c,v 1.42 2022/05/31 14:21:44 bouyer Exp $"); +__KERNEL_RCSID(0, "$NetBSD: hypervisor_machdep.c,v 1.43 2022/05/31 18:01:22 bouyer Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -159,10 +159,17 @@ evt_set_pending(unsigned int port, unsig KASSERT(args != NULL); int *ret = args; + struct intrhand *ih; if (evtsource[port]) { hypervisor_set_ipending(evtsource[port]->ev_imask, l1i, l2i); evtsource[port]->ev_evcnt.ev_count++; + ih = evtsource[port]->ev_handlers; + while (ih != NULL) { + ih->ih_pending++; + ih = ih->ih_evt_next; + } + if (*ret == 0 && curcpu()->ci_ilevel < evtsource[port]->ev_maxlevel) *ret = 1;