|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v1 2/8]: PVH mmu changes
On Sat, 2012-10-06 at 03:00 +0100, Mukesh Rathor wrote:
> On Thu, 4 Oct 2012 09:27:59 +0100
> Ian Campbell <Ian.Campbell@xxxxxxxxxx> wrote:
>
> > On Wed, 2012-10-03 at 23:29 +0100, Mukesh Rathor wrote:
> > > On Wed, 3 Oct 2012 16:42:43 +0100
> > > Ian Campbell <Ian.Campbell@xxxxxxxxxx> wrote:
> > >
> > While implementing the ARM version of this interface it occurred to me
> > that the num_pgs and next_todo fields here are not really needed
> > across the arch interface e.g. you already get pi_num_pgs from the nr
> > argument to xen_remap_domain_mfn_range and pi_next_todo is really
> > state which fits in struct pvh_remap_data. That would mean that
> > remap_foo could take a struct page * directly and I think you would
> > save an allocation.
>
> Ok, take a look at the attached and inlined diffs. I redid it, passing
> struct page to the api, and getting rid of the pi_* struct completely.
Excellent, thanks.
> @@ -260,14 +266,20 @@ 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). */
Can we say XENFEAT_auto_translated_physmap (or some abbrev.) instead of
PVH here, since this is generic code.
> 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 page **pages = vma ? vma->vm_private_data : NULL;
> + struct page *cur_page = pages[st->index++];
> int ret;
>
> ret = xen_remap_domain_mfn_range(st->vma, st->va & PAGE_MASK, *mfnp,
> 1,
> - st->vma->vm_page_prot, st->domain);
> + st->vma->vm_page_prot, st->domain,
> + &cur_page);
>
> /* Store error code for second pass. */
> *(st->err++) = ret;
[...]
> @@ -370,10 +408,17 @@ static long privcmd_ioctl_mmap_batch(void __user
> *udata, int version)
> up_write(&mm->mmap_sem);
> goto out;
> }
> + if (xen_feature(XENFEAT_auto_translated_physmap)) {
> + if ((ret = pvh_privcmd_resv_pfns(vma, m.num)) < 0) {
I renamed this alloc_empty_pages to avoid the PVH terminology in common
code.
There could be an argument for moving this to next to
alloc_xenballooned_pages e.g. as alloc_xenballooned_pagearray. We used
to have alloc_empty_pages_and_pagevec() In the classic kernels which was
effectively that same function.
Ian.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |