• K
    xen/p2m/m2p/gnttab: Support GNTMAP_host_map in the M2P override. · cf8d9163
    Konrad Rzeszutek Wilk 提交于
    We only supported the M2P (and P2M) override only for the
    GNTMAP_contains_pte type mappings. Meaning that we grants
    operations would "contain the machine address of the PTE to update"
    If the flag is unset, then the grant operation is
    "contains a host virtual address". The latter case means that
    the Hypervisor takes care of updating our page table
    (specifically the PTE entry) with the guest's MFN. As such we should
    not try to do anything with the PTE. Previous to this patch
    we would try to clear the PTE which resulted in Xen hypervisor
    being upset with us:
    
    (XEN) mm.c:1066:d0 Attempt to implicitly unmap a granted PTE c0100000ccc59067
    (XEN) domain_crash called from mm.c:1067
    (XEN) Domain 0 (vcpu#0) crashed on cpu#3:
    (XEN) ----[ Xen-4.0-110228  x86_64  debug=y  Not tainted ]----
    
    and crashing us.
    
    This patch allows us to inhibit the PTE clearing in the PV guest
    if the GNTMAP_contains_pte is not set.
    
    On the m2p_remove_override path we provide the same parameter.
    
    Sadly in the grant-table driver we do not have a mechanism to
    tell m2p_remove_override whether to clear the PTE or not. Since
    the grant-table driver is used by user-space, we can safely assume
    that it operates only on PTE's. Hence the implementation for
    it to work on !GNTMAP_contains_pte returns -EOPNOTSUPP. In the future
    we can implement the support for this. It will require some extra
    accounting structure to keep track of the page[i], and the flag.
    
    [v1: Added documentation details, made it return -EOPNOTSUPP instead
     of trying to do a half-way implementation]
    Signed-off-by: NKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    cf8d9163
p2m.c 24.8 KB