diff options
author | mafetter@fleming.research <mafetter@fleming.research> | 2005-05-13 11:14:06 +0000 |
---|---|---|
committer | mafetter@fleming.research <mafetter@fleming.research> | 2005-05-13 11:14:06 +0000 |
commit | 5cff3c6395283fc4d04aa52668304f09eb379493 (patch) | |
tree | 17952588fb96e2911b591a37fb96b9a828056a25 | |
parent | 0dee2d158077af7a12a2d7fb17f785e8bad34662 (diff) | |
download | xen-5cff3c6395283fc4d04aa52668304f09eb379493.tar.gz xen-5cff3c6395283fc4d04aa52668304f09eb379493.tar.bz2 xen-5cff3c6395283fc4d04aa52668304f09eb379493.zip |
bitkeeper revision 1.1159.258.120 (42848bfe8kMyWWcBA64rq7h7l7AyoA)
Shadow code bug fix (found by Ian) that was breaking refcounts, and subsequently
causing migration problems.
-rw-r--r-- | xen/arch/x86/memory.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/xen/arch/x86/memory.c b/xen/arch/x86/memory.c index 6fb5b059b1..eaf324eb21 100644 --- a/xen/arch/x86/memory.c +++ b/xen/arch/x86/memory.c @@ -1607,13 +1607,14 @@ int do_update_va_mapping(unsigned long page_nr, unsigned l2_idx = page_nr >> (L2_PAGETABLE_SHIFT - L1_PAGETABLE_SHIFT); l2_pgentry_t gpde = linear_l2_table[l2_idx]; unsigned long gpfn = l2_pgentry_val(gpde) >> PAGE_SHIFT; + unsigned long spfn; - if (get_shadow_status(&d->mm, gpfn)) + if ((spfn = (get_shadow_status(&d->mm, gpfn) & PSH_pfn_mask))) { - unsigned long *gl1e = map_domain_mem(gpfn << PAGE_SHIFT); + unsigned long *sl1e = map_domain_mem(spfn << PAGE_SHIFT); unsigned l1_idx = page_nr & (ENTRIES_PER_L1_PAGETABLE - 1); - gl1e[l1_idx] = sval; - unmap_domain_mem(gl1e); + sl1e[l1_idx] = sval; + unmap_domain_mem(sl1e); put_shadow_status(&d->mm); perfc_incrc(shadow_update_va_fail1); |