[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] grant table interface addition?
>>> Keir Fraser <keir.fraser@xxxxxxxxxxxxx> 30.10.08 15:15 >>> >On 30/10/08 14:06, "Jan Beulich" <jbeulich@xxxxxxxxxx> wrote: > >> In order to be able to set some of the available bits in the pte resulting >> from >> gnttab_set_map_op() (in particular PAGE_SPECIAL and possibly PAGE_IO), >> it would seem necessary to extend the set of flags that can be passed to >> that function. While the addition by itself is a simple operation, the >> question >> is how to deal with backward compatibility here: Is there anything >> preventing the guest kernel from setting the flags it wants manually after >> Xen established the mapping, i.e. would Xen either disallow any modification >> to such pte-s, or get confused by the pte not being identical to what it set >> it to? > >I think mod_l1_entry() would allow this since it does no validation unless >the mapping or PRESENT/RW change. Direct page-table writing won't work as it >happens since it will want to get_page() which of course won't work on a >foreign page. It could be given the same fast path as mod_l1_entry(), of >course. This turns out more difficult than I first thought: Since neither the virtual address for which a mapping is to be updated nor the machine address of the page table entry allow to simply update that entry (because I don't have a virtual address for the pte at hand to read what Xen wrote), I'm pretty much lost. Due to Xen built with debug=y setting _PAGE_GNTTAB I also cannot easily reconstruct the pte from map->dev_bus_addr (leaving aside the fact that the flag is included in L1_DISALLOW_MASK). Otoh Xen apparently doesn't keep a guest from clearing that flag... While looking in more detail into how all this fits together, I realized that there appears to be a race condition in blktap: Since fast_flush_area() and dispatch_rw_block_io() call create_lookup_pte_addr() without holding mm->mmap_sem, there's nothing preventing the just verified (or created) page table structures to go away again before HYPERVISOR_grant_table_op() is able to finish (or even begin) its job. Am I missing something here? Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |