[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] evtchn_do_upcall() has a micro optimization which is depends on that xchg is a barrier.
# HG changeset patch # User kaf24@xxxxxxxxxxxxxxxxxxxx # Node ID c9696012fe05347ad6a0d503bc55b53b76783af3 # Parent 5db7bbccf4d2d759265415085fa81094893f60a9 evtchn_do_upcall() has a micro optimization which is depends on that xchg is a barrier. However xchg of IA64 has acquire semantics so that event channel notification is lost sometimes. This patch fixes it. Signed-off-by: Isaku Yamahata <yamahata@xxxxxxxxxxxxx> --- linux-2.6-xen-sparse/drivers/xen/core/evtchn.c | 5 ++++- 1 files changed, 4 insertions(+), 1 deletion(-) diff -r 5db7bbccf4d2 -r c9696012fe05 linux-2.6-xen-sparse/drivers/xen/core/evtchn.c --- a/linux-2.6-xen-sparse/drivers/xen/core/evtchn.c Fri Jun 30 10:04:22 2006 +0100 +++ b/linux-2.6-xen-sparse/drivers/xen/core/evtchn.c Fri Jun 30 10:07:38 2006 +0100 @@ -219,7 +219,10 @@ asmlinkage void evtchn_do_upcall(struct vcpu_info->evtchn_upcall_pending = 0; - /* NB. No need for a barrier here -- XCHG is a barrier on x86. */ +#ifndef CONFIG_X86 /* No need for a barrier -- XCHG is a barrier on x86. */ + /* Clear master pending flag /before/ clearing selector flag. */ + rmb(); +#endif l1 = xchg(&vcpu_info->evtchn_pending_sel, 0); while (l1 != 0) { l1i = __ffs(l1); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |