Re: [PATCH v6] mm/pgmap: Use correct alignment when looking at first pfn from a region

Ralph Campbell
2019-09-17T21:57:50Z

On 9/17/19 8:31 AM, Aneesh Kumar K.V wrote:
> vmem_altmap_offset() adjust the section aligned base_pfn offset.
> So we need to make sure we account for the same when computing base_pfn.
>
> ie, for altmap_valid case, our pfn_first should be:
>
> pfn_first = altmap->base_pfn + vmem_altmap_offset(altmap);
>
> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
> ---
> * changes from v5
> * update commit subject and use linux-mm for merge
>
> mm/memremap.c | 12 ++++++++++--
> 1 file changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/mm/memremap.c b/mm/memremap.c
> index ed70c4e8e52a..233908d7df75 100644
> --- a/mm/memremap.c
> +++ b/mm/memremap.c
> @@ -54,8 +54,16 @@ static void pgmap_array_delete(struct resource *res)
>
> static unsigned long pfn_first(struct dev_pagemap *pgmap)
> {
> - return PHYS_PFN(pgmap->res.start) +
> - vmem_altmap_offset(pgmap_altmap(pgmap));
> + const struct resource *res = &pgmap->res;
> + struct vmem_altmap *altmap = pgmap_altmap(pgmap);
> + unsigned long pfn;
> +
> + if (altmap) {
> + pfn = altmap->base_pfn + vmem_altmap_offset(altmap);
> + } else

A nit: you don't need the '{}'s

> + pfn = PHYS_PFN(res->start);
> +
> + return pfn;
> }
>
> static unsigned long pfn_end(struct dev_pagemap *pgmap)