[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] [IA64] fix domain_flush_vtlb_all()
# HG changeset patch # User awilliam@xxxxxxxxxxxx # Date 1168560205 25200 # Node ID 9cbb1d6fb34ab5b831c78a3b3c8e0382739a624d # Parent 91be8436952d82eacd7e0db3aece8858c3a53150 [IA64] fix domain_flush_vtlb_all() It might called by another domain's vcpu. Signed-off-by: Isaku Yamahata <yamahata@xxxxxxxxxxxxx> --- xen/arch/ia64/xen/mm.c | 8 ++++---- xen/arch/ia64/xen/vhpt.c | 5 +++-- xen/include/asm-ia64/tlbflush.h | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff -r 91be8436952d -r 9cbb1d6fb34a xen/arch/ia64/xen/mm.c --- a/xen/arch/ia64/xen/mm.c Wed Jan 10 10:37:41 2007 -0700 +++ b/xen/arch/ia64/xen/mm.c Thu Jan 11 17:03:25 2007 -0700 @@ -972,7 +972,7 @@ ioports_deny_access(struct domain *d, un // clear pte old_pte = ptep_get_and_clear(mm, mpaddr, pte); } - domain_flush_vtlb_all(); + domain_flush_vtlb_all(d); return 0; } @@ -1730,7 +1730,7 @@ domain_page_flush_and_put(struct domain* #ifndef CONFIG_XEN_IA64_TLB_TRACK //XXX sledgehammer. // flush finer range. - domain_flush_vtlb_all(); + domain_flush_vtlb_all(d); put_page(page); #else switch (tlb_track_search_and_remove(d->arch.tlb_track, @@ -1749,7 +1749,7 @@ domain_page_flush_and_put(struct domain* * queue the page and flush vTLB only once. * I.e. The caller must call dfree_flush() explicitly. */ - domain_flush_vtlb_all(); + domain_flush_vtlb_all(d); put_page(page); break; case TLB_TRACK_NOT_FOUND: @@ -1783,7 +1783,7 @@ domain_page_flush_and_put(struct domain* * So we abondaned to track virtual addresses. * full vTLB flush is necessary. */ - domain_flush_vtlb_all(); + domain_flush_vtlb_all(d); put_page(page); break; case TLB_TRACK_AGAIN: diff -r 91be8436952d -r 9cbb1d6fb34a xen/arch/ia64/xen/vhpt.c --- a/xen/arch/ia64/xen/vhpt.c Wed Jan 10 10:37:41 2007 -0700 +++ b/xen/arch/ia64/xen/vhpt.c Thu Jan 11 17:03:25 2007 -0700 @@ -258,12 +258,13 @@ static void __vcpu_flush_vtlb_all(void * vcpu_flush_vtlb_all((struct vcpu*)vcpu); } -void domain_flush_vtlb_all (void) +// caller must incremented reference count to d somehow. +void domain_flush_vtlb_all(struct domain* d) { int cpu = smp_processor_id (); struct vcpu *v; - for_each_vcpu (current->domain, v) { + for_each_vcpu(d, v) { if (!test_bit(_VCPUF_initialised, &v->vcpu_flags)) continue; diff -r 91be8436952d -r 9cbb1d6fb34a xen/include/asm-ia64/tlbflush.h --- a/xen/include/asm-ia64/tlbflush.h Wed Jan 10 10:37:41 2007 -0700 +++ b/xen/include/asm-ia64/tlbflush.h Thu Jan 11 17:03:25 2007 -0700 @@ -17,7 +17,7 @@ void vcpu_flush_tlb_vhpt_range (u64 vadr void vcpu_flush_tlb_vhpt_range (u64 vadr, u64 log_range); /* Global all flush of vTLB */ -void domain_flush_vtlb_all (void); +void domain_flush_vtlb_all(struct domain *d); /* Global range-flush of vTLB. */ void domain_flush_vtlb_range (struct domain *d, u64 vadr, u64 addr_range); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |