On Tue, 2010-10-05 at 10:47 +0100, Ian Campbell wrote:
> 
> In addition to the kernel logging of the error I get this from the
> hypervisor:
> (XEN) mm.c:2062:d0 Error pfn 16d99: rd=ffff83011fefa000,
> od=0000000000000000, caf=180000000000000, taf=0000000000000000
> (XEN) mm.c:658:d0 Could not get page ref for pfn 16d99
> (XEN) mm.c:3621:d0 Could not get page for mach->phys update

Adding a bit more logging to the kernel I get:
gnttb_copy_grant_page old c22ebcd8 P:0x1ec8e M:0xc499d F:0x41000000
gnttb_copy_grant_page new c2324ce0 P:0x1fe18 M:0x11cd32 F:0x40000000
(XEN) mm.c:2062:d0 Error pfn 1cd32: rd=ffff83011fefa000, od=0000000000000000, 
caf=180000000000000, taf=0000000000000000
(XEN) mm.c:658:d0 Could not get page ref for pfn 1cd32
(XEN) mm.c:3621:d0 Could not get page for mach->phys update

Notice how MFN 0x11cd32 has become 0x1cd32 by the time it gets to the
hypervisor!

The following fixes it for me.

From: Ian Campbell <[email protected]>
Subject: xen: grant table: do not truncate machine address on 
gnttab_copy_grant_page

Signed-off-by: Ian Campbell <[email protected]>

--- a/drivers/xen/grant-table.c
+++ b/drivers/xen/grant-table.c
@@ -578,7 +578,7 @@ int gnttab_copy_grant_page(grant_ref_t ref, struct page 
**pagep)
        if (!xen_feature(XENFEAT_auto_translated_physmap)) {
                set_phys_to_machine(page_to_pfn(new_page), INVALID_P2M_ENTRY);
 
-               mmu.ptr = (new_mfn << PAGE_SHIFT) | MMU_MACHPHYS_UPDATE;
+               mmu.ptr = ((u64)new_mfn << PAGE_SHIFT) | MMU_MACHPHYS_UPDATE;
                mmu.val = pfn;
                err = HYPERVISOR_mmu_update(&mmu, 1, NULL, DOMID_SELF);
                BUG_ON(err);

-- 
Ian Campbell
Current Noise: Akercocke - Son Of The Morning

"I'd love to go out with you, but the man on television told me to stay tuned."




-- 
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]
Archive: 
http://lists.debian.org/[email protected]

Reply via email to