Port-xen archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: [PATCH v2] port/xen: map memory directly in privcmd PRIVCMD_MMAPBATCH



On Tue, Jun 26, 2012 at 10:18:59AM +0100, Roger Pau Monne wrote:
> >OK, so if I understand it properly
> >- qemu maps pages that will be 0x3f800 in guest's physical space.
> 
> Yes, this is supposedly going to be the video region of the guest.
> 
> >   Let says it's mapped at BASE+0x3f800 in qemu's virtual space
> >   (I assume qemu actually uses a linear mapping of the guest's physical
> >   space).
> >- later something (the hypervisor ?) moves this page to 0xf0000 in
> >   guest's physical space. In which way ? does it remap the underlying mfn
> >   to a different pfn ?
> 
> Then, when Qemu starts, the guests writes the BAR, and Qemu detects
> that the guest wants the video ram at address 0xf0000, since this is
> different from the previous address (0x3f800), Qemu calls
> xc_domain_add_to_physmap(..., idx=0x3f800, gpfn=0xf0000), thus
> moving that gfns in the guest p2m.
> 
> With current NetBSD implementation, we didn't notice this change,
> and the NetBSD kernel still thinks this pages in Qemu address space
> are mapped to 0x3f800, so when Qemu tries to write to this pages in
> it's address space, NetBSD kernel hits the pagefault and we try to
> map 0x3f800, getting an error from the hypervisor, because this gfn
> (0x3f800) is no longer accessible, we should instead try to map the
> new one (0xf0000).
> 
> >- In qemu's virtual space the underlying pages are still mapped at
> >   BASE+0x3f800, when it should now be BASE+0xf0000. How does the
> >   proposed patch help there ? making the mapping wired won't make
> >   it move automatically, unless there's some magic happening.
> 
> Since this are gfns, they are not "real" addresses, they are just in
> the p2m guest table handled by the hypervisor. The underlying
> machine addresses don't change, the only thing that changes are the
> gfns that Xen assigns to them. So if NetBSD kernel maps the memory
> directly in the call to xc_map_foreign_bulk, we don't care that the
> gfns change, since the machine addresses behind those gfn are going
> to be the same, and we will already have them mapped in Qemu address
> space correctly.

But this still looks bogus to me. We let the kernel live with wrong
informations. I think qemu should instruct the kernel that
things changed.

-- 
Manuel Bouyer <bouyer%antioche.eu.org@localhost>
     NetBSD: 26 ans d'experience feront toujours la difference
--


Home | Main Index | Thread Index | Old Index