diff options
| author | Ian Campbell <ian.campbell@citrix.com> | 2012-10-17 16:37:49 -0400 |
|---|---|---|
| committer | Ian Campbell <ian.campbell@citrix.com> | 2012-11-29 07:57:36 -0500 |
| commit | 9a032e393a8bc888a9b0c898cbdb9db2cee7b536 (patch) | |
| tree | da8d1705a10d2728627d3c13c64f6de5881d177d | |
| parent | b3e40b72bb24237b0aee9f6ba2e9f88dd4ff3c0a (diff) | |
xen: add pages parameter to xen_remap_domain_mfn_range
Also introduce xen_unmap_domain_mfn_range. These are the parts of
Mukesh's "xen/pvh: Implement MMU changes for PVH" which are also
needed as a baseline for ARM privcmd support.
The original patch was:
Signed-off-by: Mukesh Rathor <mukesh.rathor@oracle.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
This derivative is also:
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
| -rw-r--r-- | arch/x86/xen/mmu.c | 15 | ||||
| -rw-r--r-- | drivers/xen/privcmd.c | 5 | ||||
| -rw-r--r-- | include/xen/xen-ops.h | 5 |
3 files changed, 21 insertions, 4 deletions
diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c index 6226c99729b..0f6386a5b43 100644 --- a/arch/x86/xen/mmu.c +++ b/arch/x86/xen/mmu.c | |||
| @@ -2479,7 +2479,9 @@ static int remap_area_mfn_pte_fn(pte_t *ptep, pgtable_t token, | |||
| 2479 | int xen_remap_domain_mfn_range(struct vm_area_struct *vma, | 2479 | int xen_remap_domain_mfn_range(struct vm_area_struct *vma, |
| 2480 | unsigned long addr, | 2480 | unsigned long addr, |
| 2481 | unsigned long mfn, int nr, | 2481 | unsigned long mfn, int nr, |
| 2482 | pgprot_t prot, unsigned domid) | 2482 | pgprot_t prot, unsigned domid, |
| 2483 | struct page **pages) | ||
| 2484 | |||
| 2483 | { | 2485 | { |
| 2484 | struct remap_data rmd; | 2486 | struct remap_data rmd; |
| 2485 | struct mmu_update mmu_update[REMAP_BATCH_SIZE]; | 2487 | struct mmu_update mmu_update[REMAP_BATCH_SIZE]; |
| @@ -2523,3 +2525,14 @@ out: | |||
| 2523 | return err; | 2525 | return err; |
| 2524 | } | 2526 | } |
| 2525 | EXPORT_SYMBOL_GPL(xen_remap_domain_mfn_range); | 2527 | EXPORT_SYMBOL_GPL(xen_remap_domain_mfn_range); |
| 2528 | |||
| 2529 | /* Returns: 0 success */ | ||
| 2530 | int xen_unmap_domain_mfn_range(struct vm_area_struct *vma, | ||
| 2531 | int numpgs, struct page **pages) | ||
| 2532 | { | ||
| 2533 | if (!pages || !xen_feature(XENFEAT_auto_translated_physmap)) | ||
| 2534 | return 0; | ||
| 2535 | |||
| 2536 | return -EINVAL; | ||
| 2537 | } | ||
| 2538 | EXPORT_SYMBOL_GPL(xen_unmap_domain_mfn_range); | ||
diff --git a/drivers/xen/privcmd.c b/drivers/xen/privcmd.c index 8adb9cc267f..b612267a8cb 100644 --- a/drivers/xen/privcmd.c +++ b/drivers/xen/privcmd.c | |||
| @@ -178,7 +178,7 @@ static int mmap_mfn_range(void *data, void *state) | |||
| 178 | msg->va & PAGE_MASK, | 178 | msg->va & PAGE_MASK, |
| 179 | msg->mfn, msg->npages, | 179 | msg->mfn, msg->npages, |
| 180 | vma->vm_page_prot, | 180 | vma->vm_page_prot, |
| 181 | st->domain); | 181 | st->domain, NULL); |
| 182 | if (rc < 0) | 182 | if (rc < 0) |
| 183 | return rc; | 183 | return rc; |
| 184 | 184 | ||
| @@ -267,7 +267,8 @@ static int mmap_batch_fn(void *data, void *state) | |||
| 267 | int ret; | 267 | int ret; |
| 268 | 268 | ||
| 269 | ret = xen_remap_domain_mfn_range(st->vma, st->va & PAGE_MASK, *mfnp, 1, | 269 | ret = xen_remap_domain_mfn_range(st->vma, st->va & PAGE_MASK, *mfnp, 1, |
| 270 | st->vma->vm_page_prot, st->domain); | 270 | st->vma->vm_page_prot, st->domain, |
| 271 | NULL); | ||
| 271 | 272 | ||
| 272 | /* Store error code for second pass. */ | 273 | /* Store error code for second pass. */ |
| 273 | *(st->err++) = ret; | 274 | *(st->err++) = ret; |
diff --git a/include/xen/xen-ops.h b/include/xen/xen-ops.h index 6a198e46ab6..990b43e441e 100644 --- a/include/xen/xen-ops.h +++ b/include/xen/xen-ops.h | |||
| @@ -27,6 +27,9 @@ struct vm_area_struct; | |||
| 27 | int xen_remap_domain_mfn_range(struct vm_area_struct *vma, | 27 | int xen_remap_domain_mfn_range(struct vm_area_struct *vma, |
| 28 | unsigned long addr, | 28 | unsigned long addr, |
| 29 | unsigned long mfn, int nr, | 29 | unsigned long mfn, int nr, |
| 30 | pgprot_t prot, unsigned domid); | 30 | pgprot_t prot, unsigned domid, |
| 31 | struct page **pages); | ||
| 32 | int xen_unmap_domain_mfn_range(struct vm_area_struct *vma, | ||
| 33 | int numpgs, struct page **pages); | ||
| 31 | 34 | ||
| 32 | #endif /* INCLUDE_XEN_OPS_H */ | 35 | #endif /* INCLUDE_XEN_OPS_H */ |
