[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 6/6] x86/xen: open code alloc_vm_area in arch_gnttab_valloc



On 9/18/20 12:37 PM, Christoph Hellwig wrote:
>  
> +static int gnttab_apply(pte_t *pte, unsigned long addr, void *data)
> +{
> +     pte_t ***p = data;
> +
> +     **p = pte;
> +     (*p)++;
> +     return 0;
> +}
> +
>  static int arch_gnttab_valloc(struct gnttab_vm_area *area, unsigned 
> nr_frames)
>  {
>       area->ptes = kmalloc_array(nr_frames, sizeof(*area->ptes), GFP_KERNEL);
>       if (area->ptes == NULL)
>               return -ENOMEM;
> -
> -     area->area = alloc_vm_area(PAGE_SIZE * nr_frames, area->ptes);
> -     if (area->area == NULL) {
> -             kfree(area->ptes);
> -             return -ENOMEM;
> -     }
> -
> +     area->area = get_vm_area(PAGE_SIZE * nr_frames, VM_IOREMAP);
> +     if (!area->area)
> +             goto out_free_ptes;
> +     if (apply_to_page_range(&init_mm, (unsigned long)area->area->addr,
> +                     PAGE_SIZE * nr_frames, gnttab_apply, &area->ptes))


This will end up incrementing area->ptes pointer. So perhaps something like


pte_t **ptes = area->ptes;

if (apply_to_page_range(&init_mm, (unsigned long)area->area->addr,
                        PAGE_SIZE * nr_frames, gnttab_apply, &ptes)) {

       ...

}


-boris



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.