Module Name: src Committed By: cherry Date: Tue Dec 27 07:45:41 UTC 2011
Modified Files: src/sys/arch/xen/x86: hypervisor_machdep.c Log Message: Do not touch pending flags across vcpus To generate a diff of this commit: cvs rdiff -u -r1.19 -r1.20 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.19 src/sys/arch/xen/x86/hypervisor_machdep.c:1.20 --- src/sys/arch/xen/x86/hypervisor_machdep.c:1.19 Mon Dec 26 18:27:11 2011 +++ src/sys/arch/xen/x86/hypervisor_machdep.c Tue Dec 27 07:45:41 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: hypervisor_machdep.c,v 1.19 2011/12/26 18:27:11 cherry Exp $ */ +/* $NetBSD: hypervisor_machdep.c,v 1.20 2011/12/27 07:45:41 cherry Exp $ */ /* * @@ -54,7 +54,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: hypervisor_machdep.c,v 1.19 2011/12/26 18:27:11 cherry Exp $"); +__KERNEL_RCSID(0, "$NetBSD: hypervisor_machdep.c,v 1.20 2011/12/27 07:45:41 cherry Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -295,10 +295,12 @@ hypervisor_send_event(struct cpu_info *c #endif xen_atomic_set_bit(&s->evtchn_pending[0], ev); - xen_atomic_set_bit(&vci->evtchn_pending_sel, - ev >> LONG_SHIFT); - xen_atomic_set_bit(&vci->evtchn_upcall_pending, 0); + if (__predict_true(ci == curcpu())) { + xen_atomic_set_bit(&vci->evtchn_pending_sel, + ev >> LONG_SHIFT); + xen_atomic_set_bit(&vci->evtchn_upcall_pending, 0); + } xen_atomic_clear_bit(&s->evtchn_mask[0], ev);