add memory barrier to domain_flush_vtlb_range().
vtlb purge must be visible before vhpt invalidation.
added some BUG_ON().
Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
IA64FAULT vcpu_ptc_l(VCPU *vcpu, UINT64 vadr, UINT64 log_range)
{
+ BUG_ON(vcpu != current);
+
/* Purge TC */
vcpu_purge_tr_entry(&PSCBX(vcpu,dtlb));
vcpu_purge_tr_entry(&PSCBX(vcpu,itlb));
unsigned long rid, rr;
int i;
TR_ENTRY *trp;
+ BUG_ON(vcpu != current);
rr = PSCB(vcpu,rrs)[region];
rid = rr & RR_RID_MASK;
unsigned long rid, rr;
int i;
TR_ENTRY *trp;
+ BUG_ON(vcpu != current);
rr = PSCB(vcpu,rrs)[region];
rid = rr & RR_RID_MASK;
FIXME: clear only if match. */
vcpu_purge_tr_entry(&PSCBX(v,dtlb));
vcpu_purge_tr_entry(&PSCBX(v,itlb));
+ }
+ smp_mb();
+ for_each_vcpu (d, v) {
/* Invalidate VHPT entries. */
cpu_flush_vhpt_range (v->processor, vadr, addr_range);
}
+ // ptc.ga has release semantics.
/* ptc.ga */
ia64_global_tlb_purge(vadr,vadr+addr_range,PAGE_SHIFT);