Re: [PATCH v1 03/11] mm/page_alloc: refactor memmap_init_zone_device() page init

2021-04-24 Thread Joao Martins



On 4/24/21 1:18 AM, Dan Williams wrote:
> On Thu, Mar 25, 2021 at 4:10 PM Joao Martins  
> wrote:
>>
>> Move struct page init to an helper function __init_zone_device_page().
> 
> Same sentence addition suggestion from the last patch to make this
> patch have some rationale for existing.
> 
I have fixed this too, with the same message as the previous patch.

>>
>> Signed-off-by: Joao Martins 
>> ---
>>  mm/page_alloc.c | 74 +++--
>>  1 file changed, 41 insertions(+), 33 deletions(-)
>>
>> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
>> index 43dd98446b0b..58974067bbd4 100644
>> --- a/mm/page_alloc.c
>> +++ b/mm/page_alloc.c
>> @@ -6237,6 +6237,46 @@ void __meminit memmap_init_range(unsigned long size, 
>> int nid, unsigned long zone
>>  }
>>
>>  #ifdef CONFIG_ZONE_DEVICE
>> +static void __ref __init_zone_device_page(struct page *page, unsigned long 
>> pfn,
>> + unsigned long zone_idx, int nid,
>> + struct dev_pagemap *pgmap)
>> +{
>> +
>> +   __init_single_page(page, pfn, zone_idx, nid);
>> +
>> +   /*
>> +* Mark page reserved as it will need to wait for onlining
>> +* phase for it to be fully associated with a zone.
>> +*
>> +* We can use the non-atomic __set_bit operation for setting
>> +* the flag as we are still initializing the pages.
>> +*/
>> +   __SetPageReserved(page);
>> +
>> +   /*
>> +* ZONE_DEVICE pages union ->lru with a ->pgmap back pointer
>> +* and zone_device_data.  It is a bug if a ZONE_DEVICE page is
>> +* ever freed or placed on a driver-private list.
>> +*/
>> +   page->pgmap = pgmap;
>> +   page->zone_device_data = NULL;
>> +
>> +   /*
>> +* Mark the block movable so that blocks are reserved for
>> +* movable at startup. This will force kernel allocations
>> +* to reserve their blocks rather than leaking throughout
>> +* the address space during boot when many long-lived
>> +* kernel allocations are made.
>> +*
>> +* Please note that MEMINIT_HOTPLUG path doesn't clear memmap
>> +* because this is done early in section_activate()
>> +*/
>> +   if (IS_ALIGNED(pfn, pageblock_nr_pages)) {
>> +   set_pageblock_migratetype(page, MIGRATE_MOVABLE);
>> +   cond_resched();
>> +   }
>> +}
>> +
>>  void __ref memmap_init_zone_device(struct zone *zone,
>>unsigned long start_pfn,
>>unsigned long nr_pages,
>> @@ -6265,39 +6305,7 @@ void __ref memmap_init_zone_device(struct zone *zone,
>> for (pfn = start_pfn; pfn < end_pfn; pfn++) {
>> struct page *page = pfn_to_page(pfn);
>>
>> -   __init_single_page(page, pfn, zone_idx, nid);
>> -
>> -   /*
>> -* Mark page reserved as it will need to wait for onlining
>> -* phase for it to be fully associated with a zone.
>> -*
>> -* We can use the non-atomic __set_bit operation for setting
>> -* the flag as we are still initializing the pages.
>> -*/
>> -   __SetPageReserved(page);
>> -
>> -   /*
>> -* ZONE_DEVICE pages union ->lru with a ->pgmap back pointer
>> -* and zone_device_data.  It is a bug if a ZONE_DEVICE page 
>> is
>> -* ever freed or placed on a driver-private list.
>> -*/
>> -   page->pgmap = pgmap;
>> -   page->zone_device_data = NULL;
>> -
>> -   /*
>> -* Mark the block movable so that blocks are reserved for
>> -* movable at startup. This will force kernel allocations
>> -* to reserve their blocks rather than leaking throughout
>> -* the address space during boot when many long-lived
>> -* kernel allocations are made.
>> -*
>> -* Please note that MEMINIT_HOTPLUG path doesn't clear memmap
>> -* because this is done early in section_activate()
>> -*/
>> -   if (IS_ALIGNED(pfn, pageblock_nr_pages)) {
>> -   set_pageblock_migratetype(page, MIGRATE_MOVABLE);
>> -   cond_resched();
>> -   }
>> +   __init_zone_device_page(page, pfn, zone_idx, nid, pgmap);
>> }
>>
>> pr_info("%s initialised %lu pages in %ums\n", __func__,
>> --
>> 2.17.1
>>
___
Linux-nvdimm mailing list -- linux-nvdimm@lists.01.org
To unsubscribe send an email to linux-nvdimm-le...@lists.01.org


Re: [PATCH v1 03/11] mm/page_alloc: refactor memmap_init_zone_device() page init

2021-04-23 Thread Dan Williams
On Thu, Mar 25, 2021 at 4:10 PM Joao Martins  wrote:
>
> Move struct page init to an helper function __init_zone_device_page().

Same sentence addition suggestion from the last patch to make this
patch have some rationale for existing.

>
> Signed-off-by: Joao Martins 
> ---
>  mm/page_alloc.c | 74 +++--
>  1 file changed, 41 insertions(+), 33 deletions(-)
>
> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> index 43dd98446b0b..58974067bbd4 100644
> --- a/mm/page_alloc.c
> +++ b/mm/page_alloc.c
> @@ -6237,6 +6237,46 @@ void __meminit memmap_init_range(unsigned long size, 
> int nid, unsigned long zone
>  }
>
>  #ifdef CONFIG_ZONE_DEVICE
> +static void __ref __init_zone_device_page(struct page *page, unsigned long 
> pfn,
> + unsigned long zone_idx, int nid,
> + struct dev_pagemap *pgmap)
> +{
> +
> +   __init_single_page(page, pfn, zone_idx, nid);
> +
> +   /*
> +* Mark page reserved as it will need to wait for onlining
> +* phase for it to be fully associated with a zone.
> +*
> +* We can use the non-atomic __set_bit operation for setting
> +* the flag as we are still initializing the pages.
> +*/
> +   __SetPageReserved(page);
> +
> +   /*
> +* ZONE_DEVICE pages union ->lru with a ->pgmap back pointer
> +* and zone_device_data.  It is a bug if a ZONE_DEVICE page is
> +* ever freed or placed on a driver-private list.
> +*/
> +   page->pgmap = pgmap;
> +   page->zone_device_data = NULL;
> +
> +   /*
> +* Mark the block movable so that blocks are reserved for
> +* movable at startup. This will force kernel allocations
> +* to reserve their blocks rather than leaking throughout
> +* the address space during boot when many long-lived
> +* kernel allocations are made.
> +*
> +* Please note that MEMINIT_HOTPLUG path doesn't clear memmap
> +* because this is done early in section_activate()
> +*/
> +   if (IS_ALIGNED(pfn, pageblock_nr_pages)) {
> +   set_pageblock_migratetype(page, MIGRATE_MOVABLE);
> +   cond_resched();
> +   }
> +}
> +
>  void __ref memmap_init_zone_device(struct zone *zone,
>unsigned long start_pfn,
>unsigned long nr_pages,
> @@ -6265,39 +6305,7 @@ void __ref memmap_init_zone_device(struct zone *zone,
> for (pfn = start_pfn; pfn < end_pfn; pfn++) {
> struct page *page = pfn_to_page(pfn);
>
> -   __init_single_page(page, pfn, zone_idx, nid);
> -
> -   /*
> -* Mark page reserved as it will need to wait for onlining
> -* phase for it to be fully associated with a zone.
> -*
> -* We can use the non-atomic __set_bit operation for setting
> -* the flag as we are still initializing the pages.
> -*/
> -   __SetPageReserved(page);
> -
> -   /*
> -* ZONE_DEVICE pages union ->lru with a ->pgmap back pointer
> -* and zone_device_data.  It is a bug if a ZONE_DEVICE page is
> -* ever freed or placed on a driver-private list.
> -*/
> -   page->pgmap = pgmap;
> -   page->zone_device_data = NULL;
> -
> -   /*
> -* Mark the block movable so that blocks are reserved for
> -* movable at startup. This will force kernel allocations
> -* to reserve their blocks rather than leaking throughout
> -* the address space during boot when many long-lived
> -* kernel allocations are made.
> -*
> -* Please note that MEMINIT_HOTPLUG path doesn't clear memmap
> -* because this is done early in section_activate()
> -*/
> -   if (IS_ALIGNED(pfn, pageblock_nr_pages)) {
> -   set_pageblock_migratetype(page, MIGRATE_MOVABLE);
> -   cond_resched();
> -   }
> +   __init_zone_device_page(page, pfn, zone_idx, nid, pgmap);
> }
>
> pr_info("%s initialised %lu pages in %ums\n", __func__,
> --
> 2.17.1
>
___
Linux-nvdimm mailing list -- linux-nvdimm@lists.01.org
To unsubscribe send an email to linux-nvdimm-le...@lists.01.org