23 Oct, 2015

3 commits

  • With the 64KB page granularity support on ARM64, a Linux page may be
    split accross multiple grant.

    Currently we have the helper gnttab_foreach_grant_in_grant to break a
    Linux page based on an offset and a len, but it doesn't fit when we only
    have a number of grants in hand.

    Introduce a new helper which take an array of Linux page and a number of
    grant and will figure out the address of each grant.

    Signed-off-by: Julien Grall
    Signed-off-by: David Vrabel

    Julien Grall
     
  • Many PV drivers contain the idiom:

    pfn = page_to_gfn(...) /* Or similar */
    gnttab_grant_foreign_access_ref

    Replace it by a new helper. Note that when Linux is using a different
    page granularity than Xen, the helper only gives access to the first 4KB
    grant.

    This is useful where drivers are allocating a full Linux page for each
    grant.

    Also include xen/interface/grant_table.h rather than xen/grant_table.h in
    asm/page.h for x86 to fix a compilation issue [1]. Only the former is
    useful in order to get the structure definition.

    [1] Interdependency between asm/page.h and xen/grant_table.h which result
    to page_mfn not being defined when necessary.

    Signed-off-by: Julien Grall
    Reviewed-by: David Vrabel
    Reviewed-by: Stefano Stabellini
    Signed-off-by: David Vrabel

    Julien Grall
     
  • Currently, a grant is always based on the Xen page granularity (i.e
    4KB). When Linux is using a different page granularity, a single page
    will be split between multiple grants.

    The new helpers will be in charge of splitting the Linux page into grants
    and call a function given by the caller on each grant.

    Also provide an helper to count the number of grants within a given
    contiguous region.

    Note that the x86/include/asm/xen/page.h is now including
    xen/interface/grant_table.h rather than xen/grant_table.h. It's
    necessary because xen/grant_table.h depends on asm/xen/page.h and will
    break the compilation. Furthermore, only definition in
    interface/grant_table.h is required.

    Signed-off-by: Julien Grall
    Reviewed-by: David Vrabel
    Reviewed-by: Stefano Stabellini
    Signed-off-by: David Vrabel

    Julien Grall
     

27 Apr, 2015

1 commit


28 Jan, 2015

4 commits

  • Introduce gnttab_unmap_refs_async() that can be used to safely unmap
    pages that may be in use (ref count > 1). If the pages are in use the
    unmap is deferred and retried later. This polling is not very clever
    but it should be good enough if the cases where the delay is necessary
    are rare.

    The initial delay is 5 ms and is increased linearly on each subsequent
    retry (to reduce load if the page is in use for a long time).

    This is needed to allow block backends using grant mapping to safely
    use network storage (block or filesystem based such as iSCSI or NFS).

    The network storage driver may complete a block request whilst there
    is a queued network packet retry (because the ack from the remote end
    races with deciding to queue the retry). The pages for the retried
    packet would be grant unmapped and the network driver (or hardware)
    would access the unmapped page.

    Signed-off-by: Jennifer Herbert
    Acked-by: Stefano Stabellini
    Signed-off-by: David Vrabel

    Jennifer Herbert
     
  • Use the "foreign" page flag to mark pages that have a grant map. Use
    page->private to store information of the grant (the granting domain
    and the grant reference).

    Signed-off-by: Jennifer Herbert
    Reviewed-by: Stefano Stabellini
    Signed-off-by: David Vrabel

    Jennifer Herbert
     
  • Add gnttab_alloc_pages() and gnttab_free_pages() to allocate/free pages
    suitable to for granted maps.

    Signed-off-by: David Vrabel
    Reviewed-by: Stefano Stabellini

    David Vrabel
     
  • When unmapping grants, instead of converting the kernel map ops to
    unmap ops on the fly, pre-populate the set of unmap ops.

    This allows the grant unmap for the kernel mappings to be trivially
    batched in the future.

    Signed-off-by: David Vrabel
    Reviewed-by: Stefano Stabellini

    David Vrabel
     

15 Jul, 2014

2 commits

  • Since 11c7ff17c9b6dbf3a4e4f36be30ad531a6cf0ec9 (xen/grant-table: Force
    to use v1 of grants.) the code for V2 grant tables is not used.

    Signed-off-by: David Vrabel
    Signed-off-by: Konrad Rzeszutek Wilk

    David Vrabel
     
  • arch_gnttab_map_frames() and arch_gnttab_unmap_frames() are called in
    atomic context but were calling alloc_vm_area() which might sleep.

    Also, if a driver attempts to allocate a grant ref from an interrupt
    and the table needs expanding, then the CPU may already by in lazy MMU
    mode and apply_to_page_range() will BUG when it tries to re-enable
    lazy MMU mode.

    These two functions are only used in PV guests.

    Introduce arch_gnttab_init() to allocates the virtual address space in
    advance.

    Avoid the use of apply_to_page_range() by using saving and using the
    array of PTE addresses from the alloc_vm_area() call.

    N.B. 'alloc_vm_area' pre-allocates the pagetable so there is no need
    to worry about having to do a PGD/PUD/PMD walk (like apply_to_page_range
    does) and we can instead do set_pte.

    Signed-off-by: David Vrabel
    Signed-off-by: Konrad Rzeszutek Wilk
    ----
    [v2: Add comment about alloc_vm_area]
    [v3: Fix compile error found by 0-day bot]

    David Vrabel
     

03 Feb, 2014

1 commit


31 Jan, 2014

1 commit

  • The grant mapping API does m2p_override unnecessarily: only gntdev needs it,
    for blkback and future netback patches it just cause a lock contention, as
    those pages never go to userspace. Therefore this series does the following:
    - the original functions were renamed to __gnttab_[un]map_refs, with a new
    parameter m2p_override
    - based on m2p_override either they follow the original behaviour, or just set
    the private flag and call set_phys_to_machine
    - gnttab_[un]map_refs are now a wrapper to call __gnttab_[un]map_refs with
    m2p_override false
    - a new function gnttab_[un]map_refs_userspace provides the old behaviour

    It also removes a stray space from page.h and change ret to 0 if
    XENFEAT_auto_translated_physmap, as that is the only possible return value
    there.

    v2:
    - move the storing of the old mfn in page->index to gnttab_map_refs
    - move the function header update to a separate patch

    v3:
    - a new approach to retain old behaviour where it needed
    - squash the patches into one

    v4:
    - move out the common bits from m2p* functions, and pass pfn/mfn as parameter
    - clear page->private before doing anything with the page, so m2p_find_override
    won't race with this

    v5:
    - change return value handling in __gnttab_[un]map_refs
    - remove a stray space in page.h
    - add detail why ret = 0 now at some places

    v6:
    - don't pass pfn to m2p* functions, just get it locally

    Signed-off-by: Zoltan Kiss
    Suggested-by: David Vrabel
    Acked-by: David Vrabel
    Acked-by: Stefano Stabellini
    Signed-off-by: Konrad Rzeszutek Wilk

    Zoltan Kiss
     

30 Jan, 2014

1 commit

  • On ARM, address size can be 32 bits or 64 bits (if CONFIG_ARCH_PHYS_ADDR_T_64BIT
    is enabled).
    We can't assume that the grant frame base address will always fits in an
    unsigned long. Use phys_addr_t instead of unsigned long as argument for
    gnttab_setup_auto_xlat_frames.

    Signed-off-by: Julien Grall
    Signed-off-by: Stefano Stabellini
    Acked-by: Ian Campbell
    Reviewed-by: David Vrabel

    Julien Grall
     

06 Jan, 2014

1 commit

  • The 'xen_hvm_resume_frames' used to be an 'unsigned long'
    and contain the virtual address of the grants. That was OK
    for most architectures (PVHVM, ARM) were the grants are contiguous
    in memory. That however is not the case for PVH - in which case
    we will have to do a lookup for each virtual address for the PFN.

    Instead of doing that, lets make it a structure which will contain
    the array of PFNs, the virtual address and the count of said PFNs.

    Also provide a generic functions: gnttab_setup_auto_xlat_frames and
    gnttab_free_auto_xlat_frames to populate said structure with
    appropriate values for PVHVM and ARM.

    To round it off, change the name from 'xen_hvm_resume_frames' to
    a more descriptive one - 'xen_auto_xlat_grant_frames'.

    For PVH, in patch "xen/pvh: Piggyback on PVHVM for grant driver"
    we will populate the 'xen_auto_xlat_grant_frames' by ourselves.

    v2 moves the xen_remap in the gnttab_setup_auto_xlat_frames
    and also introduces xen_unmap for gnttab_free_auto_xlat_frames.

    Suggested-by: Stefano Stabellini
    Signed-off-by: Konrad Rzeszutek Wilk
    [v3: Based on top of 'asm/xen/page.h: remove redundant semicolon']
    Acked-by: Stefano Stabellini

    Konrad Rzeszutek Wilk
     

20 Oct, 2012

2 commits

  • * commit 'v3.7-rc1': (10892 commits)
    Linux 3.7-rc1
    x86, boot: Explicitly include autoconf.h for hostprogs
    perf: Fix UAPI fallout
    ARM: config: make sure that platforms are ordered by option string
    ARM: config: sort select statements alphanumerically
    UAPI: (Scripted) Disintegrate include/linux/byteorder
    UAPI: (Scripted) Disintegrate include/linux
    UAPI: Unexport linux/blk_types.h
    UAPI: Unexport part of linux/ppp-comp.h
    perf: Handle new rbtree implementation
    procfs: don't need a PATH_MAX allocation to hold a string representation of an int
    vfs: embed struct filename inside of names_cache allocation if possible
    audit: make audit_inode take struct filename
    vfs: make path_openat take a struct filename pointer
    vfs: turn do_path_lookup into wrapper around struct filename variant
    audit: allow audit code to satisfy getname requests from its names_list
    vfs: define struct filename and have getname() return it
    btrfs: Fix compilation with user namespace support enabled
    userns: Fix posix_acl_file_xattr_userns gid conversion
    userns: Properly print bluetooth socket uids
    ...

    Konrad Rzeszutek Wilk
     
  • This correctly sizes it as 64 bit on ARM but leaves it as unsigned
    long on x86 (therefore no intended change on x86).

    The long and ulong guest handles are now unused (and a bit dangerous)
    so remove them.

    Acked-by: Stefano Stabellini
    Signed-off-by: Ian Campbell
    Signed-off-by: Konrad Rzeszutek Wilk

    Ian Campbell
     

03 Oct, 2012

1 commit

  • Pull Xen update from Konrad Rzeszutek Wilk:
    "Features:
    - When hotplugging PCI devices in a PV guest we can allocate
    Xen-SWIOTLB later.
    - Cleanup Xen SWIOTLB.
    - Support pages out grants from HVM domains in the backends.
    - Support wild cards in xen-pciback.hide=(BDF) arguments.
    - Update grant status updates with upstream hypervisor.
    - Boot PV guests with more than 128GB.
    - Cleanup Xen MMU code/add comments.
    - Obtain XENVERS using a preferred method.
    - Lay out generic changes to support Xen ARM.
    - Allow privcmd ioctl for HVM (used to do only PV).
    - Do v2 of mmap_batch for privcmd ioctls.
    - If hypervisor saves the LED keyboard light - we will now instruct
    the kernel about its state.
    Fixes:
    - More fixes to Xen PCI backend for various calls/FLR/etc.
    - With more than 4GB in a 64-bit PV guest disable native SWIOTLB.
    - Fix up smatch warnings.
    - Fix up various return values in privmcmd and mm."

    * tag 'stable/for-linus-3.7-x86-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen: (48 commits)
    xen/pciback: Restore the PCI config space after an FLR.
    xen-pciback: properly clean up after calling pcistub_device_find()
    xen/vga: add the xen EFI video mode support
    xen/x86: retrieve keyboard shift status flags from hypervisor.
    xen/gndev: Xen backend support for paged out grant targets V4.
    xen-pciback: support wild cards in slot specifications
    xen/swiotlb: Fix compile warnings when using plain integer instead of NULL pointer.
    xen/swiotlb: Remove functions not needed anymore.
    xen/pcifront: Use Xen-SWIOTLB when initting if required.
    xen/swiotlb: For early initialization, return zero on success.
    xen/swiotlb: Use the swiotlb_late_init_with_tbl to init Xen-SWIOTLB late when PV PCI is used.
    xen/swiotlb: Move the error strings to its own function.
    xen/swiotlb: Move the nr_tbl determination in its own function.
    xen/arm: compile and run xenbus
    xen: resynchronise grant table status codes with upstream
    xen/privcmd: return -EFAULT on error
    xen/privcmd: Fix mmap batch ioctl error status copy back.
    xen/privcmd: add PRIVCMD_MMAPBATCH_V2 ioctl
    xen/mm: return more precise error from xen_remap_domain_range()
    xen/mmu: If the revector fails, don't attempt to revector anything else.
    ...

    Linus Torvalds
     

21 Sep, 2012

1 commit

  • Since Xen-4.2, hvm domains may have portions of their memory paged out. When a
    foreign domain (such as dom0) attempts to map these frames, the map will
    initially fail. The hypervisor returns a suitable errno, and kicks an
    asynchronous page-in operation carried out by a helper. The foreign domain is
    expected to retry the mapping operation until it eventually succeeds. The
    foreign domain is not put to sleep because itself could be the one running the
    pager assist (typical scenario for dom0).

    This patch adds support for this mechanism for backend drivers using grant
    mapping and copying operations. Specifically, this covers the blkback and
    gntdev drivers (which map foreign grants), and the netback driver (which copies
    foreign grants).

    * Add a retry method for grants that fail with GNTST_eagain (i.e. because the
    target foreign frame is paged out).
    * Insert hooks with appropriate wrappers in the aforementioned drivers.

    The retry loop is only invoked if the grant operation status is GNTST_eagain.
    It guarantees to leave a new status code different from GNTST_eagain. Any other
    status code results in identical code execution as before.

    The retry loop performs 256 attempts with increasing time intervals through a
    32 second period. It uses msleep to yield while waiting for the next retry.

    V2 after feedback from David Vrabel:
    * Explicit MAX_DELAY instead of wrap-around delay into zero
    * Abstract GNTST_eagain check into core grant table code for netback module.

    V3 after feedback from Ian Campbell:
    * Add placeholder in array of grant table error descriptions for unrelated
    error code we jump over.
    * Eliminate single map and retry macro in favor of a generic batch flavor.
    * Some renaming.
    * Bury most implementation in grant_table.c, cleaner interface.

    V4 rebased on top of sync of Xen grant table interface headers.

    Signed-off-by: Andres Lagar-Cavilla
    Acked-by: Ian Campbell
    [v5: Fixed whitespace issues]
    Signed-off-by: Konrad Rzeszutek Wilk

    Andres Lagar-Cavilla
     

12 Sep, 2012

1 commit

  • If the caller passes a valid kmap_op to m2p_add_override, we use
    kmap_op->dev_bus_addr to store the original mfn, but dev_bus_addr is
    part of the interface with Xen and if we are batching the hypercalls it
    might not have been written by the hypervisor yet. That means that later
    on Xen will write to it and we'll think that the original mfn is
    actually what Xen has written to it.

    Rather than "stealing" struct members from kmap_op, keep using
    page->index to store the original mfn and add another parameter to
    m2p_remove_override to get the corresponding kmap_op instead.
    It is now responsibility of the caller to keep track of which kmap_op
    corresponds to a particular page in the m2p_override (gntdev, the only
    user of this interface that passes a valid kmap_op, is already doing that).

    CC: stable@kernel.org
    Reported-and-Tested-By: Sander Eikelenboom
    Signed-off-by: Stefano Stabellini
    Signed-off-by: Konrad Rzeszutek Wilk

    Stefano Stabellini
     

21 May, 2012

1 commit


21 Dec, 2011

1 commit

  • Add support for mappings without GNTMAP_contains_pte. This was not
    supported because the unmap operation assumed that this flag was being
    used; adding a parameter to the unmap operation to allow the PTE
    clearing to be disabled is sufficient to make unmap capable of
    supporting either mapping type.

    Signed-off-by: Daniel De Graaf
    [v1: Fix cleanpatch warnings]
    Signed-off-by: Konrad Rzeszutek Wilk

    Daniel De Graaf
     

17 Dec, 2011

2 commits

  • These allow a domain A which has been granted access on a page of domain B's
    memory to issue domain C with a copy-grant on the same page. This is useful
    e.g. for forwarding packets between domains.

    Signed-off-by: Annie Li
    Signed-off-by: Konrad Rzeszutek Wilk

    Annie Li
     
  • - They can't be used to map the page (so can only be used in a GNTTABOP_copy
    hypercall).
    - It's possible to grant access with a finer granularity than whole pages.
    - Xen guarantees that they can be revoked quickly (a normal map grant can
    only be revoked with the cooperation of the domain which has been granted
    access).

    Signed-off-by: Annie Li
    Signed-off-by: Konrad Rzeszutek Wilk

    Annie Li
     

22 Nov, 2011

3 commits

  • Acked-by: Ian Campbell
    Signed-off-by: Annie Li
    Signed-off-by: Konrad Rzeszutek Wilk

    Annie Li
     
  • Receiver-side copying of packets is based on this implementation, it gives
    better performance and better CPU accounting. It totally supports three types:
    full-page, sub-page and transitive grants.

    However this patch does not cover sub-page and transitive grants, it mainly
    focus on Full-page part and implements grant table V2 interfaces corresponding
    to what already exists in grant table V1, such as: grant table V2
    initialization, mapping, releasing and exported interfaces.

    Each guest can only supports one type of grant table type, every entry in grant
    table should be the same version. It is necessary to set V1 or V2 version before
    initializing the grant table.

    Grant table exported interfaces of V2 are same with those of V1, Xen is
    responsible to judge what grant table version guests are using in every grant
    operation.

    V2 fulfills the same role of V1, and it is totally backwards compitable with V1.
    If dom0 support grant table V2, the guests runing on it can run with either V1
    or V2.

    Acked-by: Ian Campbell
    Signed-off-by: Annie Li
    [v1: Modified alloc_vm_area call (new parameters), indentation, and cleanpatch
    warnings]
    Signed-off-by: Konrad Rzeszutek Wilk

    Annie Li
     
  • This patch introduces new structures of grant table V2, grant table V2 is an
    extension from V1. Grant table is shared between guest and Xen, and Xen is
    responsible to do corresponding work for grant operations, such as: figure
    out guest's grant table version, perform different actions based on
    different grant table version, etc. Although full-page structure of V2
    is different from V1, it play the same role as V1.

    Acked-by: Ian Campbell
    Signed-off-by: Annie Li
    Signed-off-by: Konrad Rzeszutek Wilk

    Annie Li
     

07 Nov, 2011

1 commit


30 Sep, 2011

1 commit


29 Sep, 2011

1 commit

  • If we want to use granted pages for AIO, changing the mappings of a user
    vma and the corresponding p2m is not enough, we also need to update the
    kernel mappings accordingly.
    Currently this is only needed for pages that are created for user usages
    through /dev/xen/gntdev. As in, pages that have been in use by the
    kernel and use the P2M will not need this special mapping.
    However there are no guarantees that in the future the kernel won't
    start accessing pages through the 1:1 even for internal usage.

    In order to avoid the complexity of dealing with highmem, we allocated
    the pages lowmem.
    We issue a HYPERVISOR_grant_table_op right away in
    m2p_add_override and we remove the mappings using another
    HYPERVISOR_grant_table_op in m2p_remove_override.
    Considering that m2p_add_override and m2p_remove_override are called
    once per page we use multicalls and hypercall batching.

    Use the kmap_op pointer directly as argument to do the mapping as it is
    guaranteed to be present up until the unmapping is done.
    Before issuing any unmapping multicalls, we need to make sure that the
    mapping has already being done, because we need the kmap->handle to be
    set correctly.

    Signed-off-by: Stefano Stabellini
    [v1: Removed GRANT_FRAME_BIT usage]
    Signed-off-by: Konrad Rzeszutek Wilk

    Stefano Stabellini
     

12 Jan, 2011

2 commits

  • gnttab_map_refs maps some grant refs and uses the new m2p override to
    set a proper m2p mapping for the granted pages.

    gnttab_unmap_refs unmaps the granted refs and removes th mappings from
    the m2p override.

    Signed-off-by: Stefano Stabellini
    Signed-off-by: Jeremy Fitzhardinge
    Signed-off-by: Konrad Rzeszutek Wilk

    Stefano Stabellini
     
  • Impact: hypercall definitions

    These functions populate the gnttab data structures used by the
    granttab map and unmap ops and are used in the backend drivers.

    Originally xen-unstable.hg 9625:c3bb51c443a7

    [ Include Stefano's fix for phys_addr_t ]

    Signed-off-by: Ian Campbell
    Signed-off-by: Stefano Stabellini
    Signed-off-by: Jeremy Fitzhardinge
    Signed-off-by: Konrad Rzeszutek Wilk

    Ian Campbell
     

23 Jul, 2010

1 commit

  • Add the xen pci platform device driver that is responsible
    for initializing the grant table and xenbus in PV on HVM mode.
    Few changes to xenbus and grant table are necessary to allow the delayed
    initialization in HVM mode.
    Grant table needs few additional modifications to work in HVM mode.

    The Xen PCI platform device raises an irq every time an event has been
    delivered to us. However these interrupts are only delivered to vcpu 0.
    The Xen PCI platform interrupt handler calls xen_hvm_evtchn_do_upcall
    that is a little wrapper around __xen_evtchn_do_upcall, the traditional
    Xen upcall handler, the very same used with traditional PV guests.

    When running on HVM the event channel upcall is never called while in
    progress because it is a normal Linux irq handler (and we cannot switch
    the irq chip wholesale to the Xen PV ones as we are running QEMU and
    might have passed in PCI devices), therefore we cannot be sure that
    evtchn_upcall_pending is 0 when returning.
    For this reason if evtchn_upcall_pending is set by Xen we need to loop
    again on the event channels set pending otherwise we might loose some
    event channel deliveries.

    Signed-off-by: Stefano Stabellini
    Signed-off-by: Sheng Yang
    Signed-off-by: Jeremy Fitzhardinge

    Stefano Stabellini
     

27 May, 2008

1 commit

  • This patch implements Xen save/restore and migration.

    Saving is triggered via xenbus, which is polled in
    drivers/xen/manage.c. When a suspend request comes in, the kernel
    prepares itself for saving by:

    1 - Freeze all processes. This is primarily to prevent any
    partially-completed pagetable updates from confusing the suspend
    process. If CONFIG_PREEMPT isn't defined, then this isn't necessary.

    2 - Suspend xenbus and other devices

    3 - Stop_machine, to make sure all the other vcpus are quiescent. The
    Xen tools require the domain to run its save off vcpu0.

    4 - Within the stop_machine state, it pins any unpinned pgds (under
    construction or destruction), performs canonicalizes various other
    pieces of state (mostly converting mfns to pfns), and finally

    5 - Suspend the domain

    Restore reverses the steps used to save the domain, ending when all
    the frozen processes are thawed.

    Signed-off-by: Jeremy Fitzhardinge
    Signed-off-by: Thomas Gleixner

    Jeremy Fitzhardinge
     

25 Apr, 2008

2 commits

  • split out x86 specific part from grant-table.c and
    allow ia64/xen specific initialization.
    ia64/xen grant table is based on pseudo physical address
    (guest physical address) unlike x86/xen. On ia64 init_mm
    doesn't map identity straight mapped area.
    ia64/xen specific grant table initialization is necessary.

    Signed-off-by: Isaku Yamahata
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Isaku Yamahata
     
  • Don't use alloc_vm_area()/free_vm_area() directly, instead define
    xen_alloc_vm_area()/xen_free_vm_area() and use them.

    alloc_vm_area()/free_vm_area() are used to allocate/free area which
    are for grant table mapping. Xen/x86 grant table is based on virtual
    address so that alloc_vm_area()/free_vm_area() are suitable.
    On the other hand Xen/ia64 (and Xen/powerpc) grant table is based on
    pseudo physical address (guest physical address) so that allocation
    should be done differently.
    The original version of xenified Linux/IA64 have its own
    allocate_vm_area()/free_vm_area() definitions which don't allocate vm area
    contradictory to those names.
    Now vanilla Linux already has its definitions so that it's impossible
    to have IA64 definitions of allocate_vm_area()/free_vm_area().
    Instead introduce xen_allocate_vm_area()/xen_free_vm_area() and use them.

    Signed-off-by: Isaku Yamahata
    Signed-off-by: Jeremy Fitzhardinge
    Signed-off-by: Ingo Molnar
    Signed-off-by: Thomas Gleixner

    Isaku Yamahata
     

18 Jul, 2007

1 commit

  • Add Xen 'grant table' driver which allows granting of access to
    selected local memory pages by other virtual machines and,
    symmetrically, the mapping of remote memory pages which other virtual
    machines have granted access to.

    This driver is a prerequisite for many of the Xen virtual device
    drivers, which grant the 'device driver domain' restricted and
    temporary access to only those memory pages that are currently
    involved in I/O operations.

    Signed-off-by: Jeremy Fitzhardinge
    Signed-off-by: Ian Pratt
    Signed-off-by: Christian Limpach
    Signed-off-by: Chris Wright

    Jeremy Fitzhardinge