[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 10/14] privcmd: refer to autotranslate not PVH in arch interfaces / comments.
On Thu, 4 Oct 2012, Ian Campbell wrote: > PVH is X86 specific while this functionality is also used on ARM. I really think that this should be merged with the orignal PVH patch > Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> > --- > arch/x86/xen/mmu.c | 10 +++++----- > drivers/xen/privcmd.c | 46 ++++++++++++++++++++++------------------------ > include/xen/xen-ops.h | 8 ++++---- > 3 files changed, 31 insertions(+), 33 deletions(-) > > diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c > index 26097cb..3e781f9 100644 > --- a/arch/x86/xen/mmu.c > +++ b/arch/x86/xen/mmu.c > @@ -2506,7 +2506,7 @@ struct pvh_remap_data { > unsigned long fgmfn; /* foreign domain's gmfn */ > pgprot_t prot; > domid_t domid; > - struct xen_pvh_pfn_info *pvhinfop; > + struct xen_remap_mfn_info *pvhinfop; > }; > > static int pvh_map_pte_fn(pte_t *ptep, pgtable_t token, unsigned long addr, > @@ -2514,7 +2514,7 @@ static int pvh_map_pte_fn(pte_t *ptep, pgtable_t token, > unsigned long addr, > { > int rc; > struct pvh_remap_data *remapp = data; > - struct xen_pvh_pfn_info *pvhp = remapp->pvhinfop; > + struct xen_remap_mfn_info *pvhp = remapp->pvhinfop; > unsigned long pfn = page_to_pfn(pvhp->pi_paga[pvhp->pi_next_todo++]); > pte_t pteval = pte_mkspecial(pfn_pte(pfn, remapp->prot)); > > @@ -2531,7 +2531,7 @@ static int pvh_map_pte_fn(pte_t *ptep, pgtable_t token, > unsigned long addr, > static int pvh_remap_gmfn_range(struct vm_area_struct *vma, > unsigned long addr, unsigned long mfn, int nr, > pgprot_t prot, unsigned domid, > - struct xen_pvh_pfn_info *pvhp) > + struct xen_remap_mfn_info *pvhp) > { > int err; > struct pvh_remap_data pvhdata; > @@ -2574,7 +2574,7 @@ int xen_remap_domain_mfn_range(struct vm_area_struct > *vma, > unsigned long addr, > unsigned long mfn, int nr, > pgprot_t prot, unsigned domid, > - struct xen_pvh_pfn_info *pvhp) > + struct xen_remap_mfn_info *pvhp) > > { > struct remap_data rmd; > @@ -2629,7 +2629,7 @@ EXPORT_SYMBOL_GPL(xen_remap_domain_mfn_range); > > /* Returns: Number of pages unmapped */ > int xen_unmap_domain_mfn_range(struct vm_area_struct *vma, > - struct xen_pvh_pfn_info *pvhp) > + struct xen_remap_mfn_info *pvhp) > { > int count = 0; > > diff --git a/drivers/xen/privcmd.c b/drivers/xen/privcmd.c > index bf4d62a..ebf3c8d 100644 > --- a/drivers/xen/privcmd.c > +++ b/drivers/xen/privcmd.c > @@ -265,18 +265,16 @@ struct mmap_batch_state { > xen_pfn_t __user *user_mfn; > }; > > -/* PVH dom0 fyi: if domU being created is PV, then mfn is mfn(addr on bus). > If > - * it's PVH then mfn is pfn (input to HAP). */ > static int mmap_batch_fn(void *data, void *state) > { > xen_pfn_t *mfnp = data; > struct mmap_batch_state *st = state; > struct vm_area_struct *vma = st->vma; > - struct xen_pvh_pfn_info *pvhp = vma ? vma->vm_private_data : NULL; > + struct xen_remap_mfn_info *info = vma ? vma->vm_private_data : NULL; > int ret; > > ret = xen_remap_domain_mfn_range(st->vma, st->va & PAGE_MASK, *mfnp, 1, > - st->vma->vm_page_prot, st->domain, > pvhp); > + st->vma->vm_page_prot, st->domain, > info); > > /* Store error code for second pass. */ > *(st->err++) = ret; > @@ -315,33 +313,33 @@ static int mmap_return_errors_v1(void *data, void > *state) > /* Allocate pfns that are then mapped with gmfns from foreign domid. Update > * the vma with the page info to use later. > * Returns: 0 if success, otherwise -errno > - */ > -static int pvh_privcmd_resv_pfns(struct vm_area_struct *vma, int numpgs) > + */ > +static int alloc_empty_pages(struct vm_area_struct *vma, int numpgs) > { > int rc; > - struct xen_pvh_pfn_info *pvhp; > + struct xen_remap_mfn_info *info; > > - pvhp = kzalloc(sizeof(struct xen_pvh_pfn_info), GFP_KERNEL); > - if (pvhp == NULL) > + info = kzalloc(sizeof(struct xen_remap_mfn_info), GFP_KERNEL); > + if (info == NULL) > return -ENOMEM; > > - pvhp->pi_paga = kcalloc(numpgs, sizeof(pvhp->pi_paga[0]), GFP_KERNEL); > - if (pvhp->pi_paga == NULL) { > - kfree(pvhp); > + info->pi_paga = kcalloc(numpgs, sizeof(info->pi_paga[0]), GFP_KERNEL); > + if (info->pi_paga == NULL) { > + kfree(info); > return -ENOMEM; > } > > - rc = alloc_xenballooned_pages(numpgs, pvhp->pi_paga, 0); > + rc = alloc_xenballooned_pages(numpgs, info->pi_paga, 0); > if (rc != 0) { > pr_warn("%s Could not alloc %d pfns rc:%d\n", __FUNCTION__, > numpgs, rc); > - kfree(pvhp->pi_paga); > - kfree(pvhp); > + kfree(info->pi_paga); > + kfree(info); > return -ENOMEM; > } > - pvhp->pi_num_pgs = numpgs; > + info->pi_num_pgs = numpgs; > BUG_ON(vma->vm_private_data != (void *)1); > - vma->vm_private_data = pvhp; > + vma->vm_private_data = info; > > return 0; > } > @@ -414,7 +412,7 @@ static long privcmd_ioctl_mmap_batch(void __user *udata, > int version) > goto out; > } > if (xen_feature(XENFEAT_auto_translated_physmap)) { > - if ((ret = pvh_privcmd_resv_pfns(vma, m.num))) { > + if ((ret = alloc_empty_pages(vma, m.num))) { > up_write(&mm->mmap_sem); > goto out; > } > @@ -490,16 +488,16 @@ static long privcmd_ioctl(struct file *file, > static void privcmd_close(struct vm_area_struct *vma) > { > int count; > - struct xen_pvh_pfn_info *pvhp = vma ? vma->vm_private_data : NULL; > + struct xen_remap_mfn_info *info = vma ? vma->vm_private_data : NULL; > > - if (!pvhp || !xen_feature(XENFEAT_auto_translated_physmap)) > + if (!info || !xen_feature(XENFEAT_auto_translated_physmap)) > return; > > - count = xen_unmap_domain_mfn_range(vma, pvhp); > + count = xen_unmap_domain_mfn_range(vma, info); > while (count--) > - free_xenballooned_pages(1, &pvhp->pi_paga[count]); > - kfree(pvhp->pi_paga); > - kfree(pvhp); > + free_xenballooned_pages(1, &info->pi_paga[count]); > + kfree(info->pi_paga); > + kfree(info); > } > > static int privcmd_fault(struct vm_area_struct *vma, struct vm_fault *vmf) > diff --git a/include/xen/xen-ops.h b/include/xen/xen-ops.h > index 6c5ad83..2f3cb06 100644 > --- a/include/xen/xen-ops.h > +++ b/include/xen/xen-ops.h > @@ -24,16 +24,16 @@ int xen_create_contiguous_region(unsigned long vstart, > unsigned int order, > void xen_destroy_contiguous_region(unsigned long vstart, unsigned int order); > > struct vm_area_struct; > -struct xen_pvh_pfn_info; > +struct xen_remap_mfn_info; > int xen_remap_domain_mfn_range(struct vm_area_struct *vma, > unsigned long addr, > unsigned long mfn, int nr, > pgprot_t prot, unsigned domid, > - struct xen_pvh_pfn_info *pvhp); > + struct xen_remap_mfn_info *pvhp); > int xen_unmap_domain_mfn_range(struct vm_area_struct *vma, > - struct xen_pvh_pfn_info *pvhp); > + struct xen_remap_mfn_info *pvhp); > > -struct xen_pvh_pfn_info { > +struct xen_remap_mfn_info { > struct page **pi_paga; /* pfn info page array */ > int pi_num_pgs; > int pi_next_todo; > -- > 1.7.2.5 > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |