[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] IOCTL_PRIVCMD_MMAPBATCH on Xen 4.13.0
Hello, NetBSD works as dom0 up to Xen 4.11. I'm trying to get it working on 4.13.0. I added the support for gntdev operations, but I'm stuck with privcmd IOCTL_PRIVCMD_MMAPBATCH. It seems to work fine for PV and PVH domUs, but with HVM domUs, MMU_NORMAL_PT_UPDATE returns -22 (EINVAL) and qemu-dm dumps core (as expected; the page is not mapped). Of course this works fine in 4.11 In the Xen kernel, I tracked it down to arch/x86/mm.c near line 2229, in mod_l1_entry(): /* Translate foreign guest address. */ if ( cmd != MMU_PT_UPDATE_NO_TRANSLATE && paging_mode_translate(pg_dom) ) { p2m_type_t p2mt; p2m_query_t q = l1e_get_flags(nl1e) & _PAGE_RW ? P2M_ALLOC | P2M_UNSHARE : P2M_ALLOC; page = get_page_from_gfn(pg_dom, l1e_get_pfn(nl1e), &p2mt, q); if ( p2m_is_paged(p2mt) ) { if ( page ) put_page(page); p2m_mem_paging_populate(pg_dom, l1e_get_pfn(nl1e)); return -ENOENT; } if ( p2mt == p2m_ram_paging_in && !page ) return -ENOENT; /* Did our attempt to unshare fail? */ if ( (q & P2M_UNSHARE) && p2m_is_shared(p2mt) ) { /* We could not have obtained a page ref. */ ASSERT(!page); /* And mem_sharing_notify has already been called. */ return -ENOMEM; } if ( !page ) { gdprintk(XENLOG_WARNING, "translate but no page\n"); return -EINVAL; } nl1e = l1e_from_page(page, l1e_get_flags(nl1e)); } the gdprintk() I added in the ( !page) case fires, so this is the cause of the EINVAL. Is it expected for a HVM domU ? If so, how should the dom0 code be changed to get it working ? I failed to see where our code is different from linux ... -- Manuel Bouyer <bouyer@xxxxxxxxxxxxxxx> NetBSD: 26 ans d'experience feront toujours la difference --
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |