Module Name: src Committed By: cherry Date: Mon Dec 26 18:27:11 UTC 2011
Modified Files: src/sys/arch/xen/x86: hypervisor_machdep.c Log Message: Do not fiddle with the event masks of non-local vcpus when unmasking events across vcpus To generate a diff of this commit: cvs rdiff -u -r1.18 -r1.19 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.18 src/sys/arch/xen/x86/hypervisor_machdep.c:1.19 --- src/sys/arch/xen/x86/hypervisor_machdep.c:1.18 Sat Dec 3 22:41:40 2011 +++ src/sys/arch/xen/x86/hypervisor_machdep.c Mon Dec 26 18:27:11 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: hypervisor_machdep.c,v 1.18 2011/12/03 22:41:40 bouyer Exp $ */ +/* $NetBSD: hypervisor_machdep.c,v 1.19 2011/12/26 18:27:11 cherry Exp $ */ /* * @@ -54,7 +54,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: hypervisor_machdep.c,v 1.18 2011/12/03 22:41:40 bouyer Exp $"); +__KERNEL_RCSID(0, "$NetBSD: hypervisor_machdep.c,v 1.19 2011/12/26 18:27:11 cherry Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -338,9 +338,11 @@ hypervisor_unmask_event(unsigned int ev) if (!xen_atomic_test_bit(&ci->ci_evtmask[0], ev)) continue; vci = ci->ci_vcpu; - if (!xen_atomic_test_and_set_bit(&vci->evtchn_pending_sel, - ev>>LONG_SHIFT)) - xen_atomic_set_bit(&vci->evtchn_upcall_pending, 0); + if (__predict_true(ci == curcpu())) { + if (!xen_atomic_test_and_set_bit(&vci->evtchn_pending_sel, + ev>>LONG_SHIFT)) + xen_atomic_set_bit(&vci->evtchn_upcall_pending, 0); + } if (!vci->evtchn_upcall_mask) { if (__predict_true(ci == curcpu())) { hypervisor_force_callback();