diff options
| author | Alex Nixon <alex.nixon@citrix.com> | 2009-02-09 15:05:46 -0500 |
|---|---|---|
| committer | Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | 2010-06-07 15:37:53 -0400 |
| commit | 08bbc9da92f7e44b9c208c6a1adba70c403b255e (patch) | |
| tree | 75c6cf9422e03990d1fd280b631d00ea4d4dbe4b /include/xen/interface/memory.h | |
| parent | 19001c8c5bfa032ed45b10dfe48e355f5df88c61 (diff) | |
xen: Add xen_create_contiguous_region
A memory region must be physically contiguous in order to be accessed
through DMA. This patch adds xen_create_contiguous_region, which
ensures a region of contiguous virtual memory is also physically
contiguous.
Based on Stephen Tweedie's port of the 2.6.18-xen version.
Remove contiguous_bitmap[] as it's no longer needed.
Ported from linux-2.6.18-xen.hg 707:e410857fd83c
[ Impact: add Xen-internal API to make pages phys-contig ]
Signed-off-by: Alex Nixon <alex.nixon@citrix.com>
Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Diffstat (limited to 'include/xen/interface/memory.h')
| -rw-r--r-- | include/xen/interface/memory.h | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/include/xen/interface/memory.h b/include/xen/interface/memory.h index e6adce6bc75..d3938d3e71f 100644 --- a/include/xen/interface/memory.h +++ b/include/xen/interface/memory.h | |||
| @@ -55,6 +55,48 @@ struct xen_memory_reservation { | |||
| 55 | DEFINE_GUEST_HANDLE_STRUCT(xen_memory_reservation); | 55 | DEFINE_GUEST_HANDLE_STRUCT(xen_memory_reservation); |
| 56 | 56 | ||
| 57 | /* | 57 | /* |
| 58 | * An atomic exchange of memory pages. If return code is zero then | ||
| 59 | * @out.extent_list provides GMFNs of the newly-allocated memory. | ||
| 60 | * Returns zero on complete success, otherwise a negative error code. | ||
| 61 | * On complete success then always @nr_exchanged == @in.nr_extents. | ||
| 62 | * On partial success @nr_exchanged indicates how much work was done. | ||
| 63 | */ | ||
| 64 | #define XENMEM_exchange 11 | ||
| 65 | struct xen_memory_exchange { | ||
| 66 | /* | ||
| 67 | * [IN] Details of memory extents to be exchanged (GMFN bases). | ||
| 68 | * Note that @in.address_bits is ignored and unused. | ||
| 69 | */ | ||
| 70 | struct xen_memory_reservation in; | ||
| 71 | |||
| 72 | /* | ||
| 73 | * [IN/OUT] Details of new memory extents. | ||
| 74 | * We require that: | ||
| 75 | * 1. @in.domid == @out.domid | ||
| 76 | * 2. @in.nr_extents << @in.extent_order == | ||
| 77 | * @out.nr_extents << @out.extent_order | ||
| 78 | * 3. @in.extent_start and @out.extent_start lists must not overlap | ||
| 79 | * 4. @out.extent_start lists GPFN bases to be populated | ||
| 80 | * 5. @out.extent_start is overwritten with allocated GMFN bases | ||
| 81 | */ | ||
| 82 | struct xen_memory_reservation out; | ||
| 83 | |||
| 84 | /* | ||
| 85 | * [OUT] Number of input extents that were successfully exchanged: | ||
| 86 | * 1. The first @nr_exchanged input extents were successfully | ||
| 87 | * deallocated. | ||
| 88 | * 2. The corresponding first entries in the output extent list correctly | ||
| 89 | * indicate the GMFNs that were successfully exchanged. | ||
| 90 | * 3. All other input and output extents are untouched. | ||
| 91 | * 4. If not all input exents are exchanged then the return code of this | ||
| 92 | * command will be non-zero. | ||
| 93 | * 5. THIS FIELD MUST BE INITIALISED TO ZERO BY THE CALLER! | ||
| 94 | */ | ||
| 95 | unsigned long nr_exchanged; | ||
| 96 | }; | ||
| 97 | |||
| 98 | DEFINE_GUEST_HANDLE_STRUCT(xen_memory_exchange); | ||
| 99 | /* | ||
| 58 | * Returns the maximum machine frame number of mapped RAM in this system. | 100 | * Returns the maximum machine frame number of mapped RAM in this system. |
| 59 | * This command always succeeds (it never returns an error code). | 101 | * This command always succeeds (it never returns an error code). |
| 60 | * arg == NULL. | 102 | * arg == NULL. |
