aboutsummaryrefslogtreecommitdiffstats
path: root/extras/mini-os/hypervisor.c
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2008-05-08 11:55:13 +0100
committerKeir Fraser <keir.fraser@citrix.com>2008-05-08 11:55:13 +0100
commitaec0c76f2272eb6551a370a24a0c53b32efbb9bf (patch)
tree52c7b962ccadee19affae636bcf86c930e26bf5a /extras/mini-os/hypervisor.c
parentb585b4dfa76737c797d6a981eacc99eb54551331 (diff)
downloadxen-aec0c76f2272eb6551a370a24a0c53b32efbb9bf.tar.gz
xen-aec0c76f2272eb6551a370a24a0c53b32efbb9bf.tar.bz2
xen-aec0c76f2272eb6551a370a24a0c53b32efbb9bf.zip
minios: in non-x86 case, use wmb to enforce ordering between
evtchn_upcall_pending and evtchn_pending_sel stores. Signed-off-by: Samuel Thibault <samuel.thibault@eu.citrix.com>
Diffstat (limited to 'extras/mini-os/hypervisor.c')
-rw-r--r--extras/mini-os/hypervisor.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/extras/mini-os/hypervisor.c b/extras/mini-os/hypervisor.c
index 3bb47a424d..acc9494c01 100644
--- a/extras/mini-os/hypervisor.c
+++ b/extras/mini-os/hypervisor.c
@@ -46,7 +46,11 @@ void do_hypervisor_callback(struct pt_regs *regs)
in_callback = 1;
vcpu_info->evtchn_upcall_pending = 0;
- /* NB. No need for a barrier here -- XCHG is a barrier on x86. */
+ /* NB x86. No need for a barrier here -- XCHG is a barrier on x86. */
+#if !defined(__i386__) && !defined(__x86_64__)
+ /* Clear master flag /before/ clearing selector flag. */
+ wmb();
+#endif
l1 = xchg(&vcpu_info->evtchn_pending_sel, 0);
while ( l1 != 0 )
{