On 9/25/20 3:12 PM, Dan Williams wrote: > > diff --git a/drivers/xen/unpopulated-alloc.c b/drivers/xen/unpopulated-alloc.c > index 3b98dc921426..091b8669eca3 100644 > --- a/drivers/xen/unpopulated-alloc.c > +++ b/drivers/xen/unpopulated-alloc.c > @@ -18,27 +18,37 @@ static unsigned int list_count; > static int fill_list(unsigned int nr_pages) > { > struct dev_pagemap *pgmap; > + struct resource *res; > void *vaddr; > unsigned int i, alloc_pages = round_up(nr_pages, PAGES_PER_SECTION); > - int ret; > + int ret = -ENOMEM; > + > + res = kzalloc(sizeof(*res), GFP_KERNEL); > + if (!res) > + return -ENOMEM; > > pgmap = kzalloc(sizeof(*pgmap), GFP_KERNEL); > if (!pgmap) > - return -ENOMEM; > + goto err_pgmap; > > pgmap->type = MEMORY_DEVICE_GENERIC;
Can you move these last 5 lines ... > - pgmap->res.name = "Xen scratch"; > - pgmap->res.flags = IORESOURCE_MEM | IORESOURCE_BUSY; > + res->name = "Xen scratch"; > + res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; > > - ret = allocate_resource(&iomem_resource, &pgmap->res, > + ret = allocate_resource(&iomem_resource, res, > alloc_pages * PAGE_SIZE, 0, -1, > PAGES_PER_SECTION * PAGE_SIZE, NULL, NULL); > if (ret < 0) { > pr_err("Cannot allocate new IOMEM resource\n"); > - kfree(pgmap); > - return ret; > + goto err_resource; > } > ... here, so that we deal with pgmap in the same place? The diff will be slightly larger but the code will read better I think. -boris > + pgmap->range = (struct range) { > + .start = res->start, > + .end = res->end, > + }; > + pgmap->owner = res; > + > #ifdef CONFIG_XEN_HAVE_PVMMU > /* > * memremap will build page tables for the new memory so