[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] [IA64] vti bugs fix
# HG changeset patch # User awilliam@xxxxxxxxxxx # Node ID 50837fb048075ef0682456aa89e9afd1bec0b39e # Parent 9105cc8a738cddb374ebd57f07c1aecb165ab7a5 [IA64] vti bugs fix Bug fixes: - Do not read long-format vhpt as short-format. - Avoid infinite loop in vtlb_purge. Signed-off-by: Tristan Gingold <tristan.gingold@xxxxxxxx> --- xen/arch/ia64/vmx/vtlb.c | 15 +++++++++++++-- 1 files changed, 13 insertions(+), 2 deletions(-) diff -r 9105cc8a738c -r 50837fb04807 xen/arch/ia64/vmx/vtlb.c --- a/xen/arch/ia64/vmx/vtlb.c Mon Aug 14 11:35:33 2006 -0600 +++ b/xen/arch/ia64/vmx/vtlb.c Mon Aug 14 11:46:40 2006 -0600 @@ -214,12 +214,22 @@ u64 guest_vhpt_lookup(u64 iha, u64 *pte) { u64 ret; thash_data_t * data; + PTA vpta; + data = vhpt_lookup(iha); if (data == NULL) { data = vtlb_lookup(current, iha, DSIDE_TLB); if (data != NULL) thash_vhpt_insert(current, data->page_flags, data->itir ,iha); } + + /* VHPT long format is not read. */ + vmx_vcpu_get_pta(current, &vpta.val); + if (vpta.vf == 1) { + *pte = 0; + return 0; + } + asm volatile ("rsm psr.ic|psr.i;;" "srlz.d;;" "ld8.s r9=[%1];;" @@ -231,7 +241,7 @@ u64 guest_vhpt_lookup(u64 iha, u64 *pte) "ssm psr.ic;;" "srlz.d;;" "ssm psr.i;;" - : "=r"(ret) : "r"(iha), "r"(pte):"memory"); + : "=r"(ret) : "r"(iha), "r"(pte):"memory"); return ret; } @@ -257,7 +267,8 @@ void vtlb_purge(VCPU *v, u64 va, u64 ps) psbits &= ~(1UL << ps); def_size = PSIZE(ps); vrr.ps = ps; - while (curadr < end) { + /* Be careful about overflow. */ + while (curadr < end && curadr >= start) { cur = vsa_thash(hcb->pta, curadr, vrr.rrval, &tag); while (cur) { if (cur->etag == tag && cur->ps == ps) _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |