All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiang Liu <liuj97@gmail.com>
To: Sam Ravnborg <sam@ravnborg.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	David Rientjes <rientjes@google.com>,
	Jiang Liu <jiang.liu@huawei.com>,
	Wen Congyang <wency@cn.fujitsu.com>,
	Maciej Rutecki <maciej.rutecki@gmail.com>,
	Chris Clayton <chris2553@googlemail.com>,
	"Rafael J . Wysocki" <rjw@sisk.pl>, Mel Gorman <mgorman@suse.de>,
	Minchan Kim <minchan@kernel.org>,
	KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
	Michal Hocko <mhocko@suse.cz>, Jianguo Wu <wujianguo@huawei.com>,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	"David S. Miller" <davem@davemloft.net>
Subject: Re: [RFC PATCH v1 22/33] mm/SPARC: use common help functions to free reserved pages
Date: Wed, 06 Mar 2013 23:56:47 +0800	[thread overview]
Message-ID: <5137673F.4030801@gmail.com> (raw)
In-Reply-To: <20130305195845.GB12225@merkur.ravnborg.org>

Hi Sam,
	Thanks for review!

On 03/06/2013 03:58 AM, Sam Ravnborg wrote:
> On Tue, Mar 05, 2013 at 10:55:05PM +0800, Jiang Liu wrote:
>> Use common help functions to free reserved pages.
> 
> I like how this simplify things!
> 
> Please consider how you can also cover the HIGHMEM case,
> so map_high_region(...) is simplified too (in init_32.c).
> 
>>
>> Signed-off-by: Jiang Liu <jiang.liu@huawei.com>
>> Cc: "David S. Miller" <davem@davemloft.net>
>> Cc: Sam Ravnborg <sam@ravnborg.org>
>> ---
>>  arch/sparc/kernel/leon_smp.c |   15 +++------------
>>  arch/sparc/mm/init_32.c      |   40 ++++++----------------------------------
>>  arch/sparc/mm/init_64.c      |   25 ++++---------------------
>>  3 files changed, 13 insertions(+), 67 deletions(-)
>>
>> diff --git a/arch/sparc/mm/init_32.c b/arch/sparc/mm/init_32.c
>> index 48e0c03..2a7b6eb 100644
>> --- a/arch/sparc/mm/init_32.c
>> +++ b/arch/sparc/mm/init_32.c
>> @@ -374,45 +374,17 @@ void __init mem_init(void)
>>  
>>  void free_initmem (void)
>>  {
>> -	unsigned long addr;
>> -	unsigned long freed;
>> -
>> -	addr = (unsigned long)(&__init_begin);
>> -	freed = (unsigned long)(&__init_end) - addr;
>> -	for (; addr < (unsigned long)(&__init_end); addr += PAGE_SIZE) {
>> -		struct page *p;
>> -
>> -		memset((void *)addr, POISON_FREE_INITMEM, PAGE_SIZE);
>> -		p = virt_to_page(addr);
>> -
>> -		ClearPageReserved(p);
>> -		init_page_count(p);
>> -		__free_page(p);
>> -		totalram_pages++;
>> -		num_physpages++;
>> -	}
>> -	printk(KERN_INFO "Freeing unused kernel memory: %ldk freed\n",
>> -		freed >> 10);
>> +	num_physpages += free_reserved_area((unsigned long)(&__init_begin),
>> +					    (unsigned long)(&__init_end),
>> +					    POISON_FREE_INITMEM,
>> +					    "unused kernel");
> If you change free_initmem_default(...) to return number of pages freed this
> could have been used here.
Good suggestion, will make that change.

> 
>>  }
>>  
>>  #ifdef CONFIG_BLK_DEV_INITRD
>>  void free_initrd_mem(unsigned long start, unsigned long end)
>>  {
>> -	if (start < end)
>> -		printk(KERN_INFO "Freeing initrd memory: %ldk freed\n",
>> -			(end - start) >> 10);
>> -	for (; start < end; start += PAGE_SIZE) {
>> -		struct page *p;
>> -
>> -		memset((void *)start, POISON_FREE_INITMEM, PAGE_SIZE);
>> -		p = virt_to_page(start);
>> -
>> -		ClearPageReserved(p);
>> -		init_page_count(p);
>> -		__free_page(p);
>> -		totalram_pages++;
>> -		num_physpages++;
>> -	}
>> +	num_physpages += free_reserved_area(start, end, POISON_FREE_INITMEM,
>> +					    "initrd");
>>  }
>>  #endif
>>  
>> diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c
>> index 1588d33..03bfd10 100644
>> --- a/arch/sparc/mm/init_64.c
>> +++ b/arch/sparc/mm/init_64.c
>> @@ -2060,8 +2060,7 @@ void __init mem_init(void)
>>  	/* We subtract one to account for the mem_map_zero page
>>  	 * allocated below.
>>  	 */
>> -	totalram_pages -= 1;
>> -	num_physpages = totalram_pages;
>> +	num_physpages = totalram_pages - 1;
>>  
>>  	/*
>>  	 * Set up the zero page, mark it reserved, so that page count
>> @@ -2072,7 +2071,7 @@ void __init mem_init(void)
>>  		prom_printf("paging_init: Cannot alloc zero page.\n");
>>  		prom_halt();
>>  	}
>> -	SetPageReserved(mem_map_zero);
>> +	mark_page_reserved(mem_map_zero);
>>  
>>  	codepages = (((unsigned long) _etext) - ((unsigned long) _start));
>>  	codepages = PAGE_ALIGN(codepages) >> PAGE_SHIFT;
>> @@ -2112,7 +2111,6 @@ void free_initmem(void)
>>  	initend = (unsigned long)(__init_end) & PAGE_MASK;
>>  	for (; addr < initend; addr += PAGE_SIZE) {
>>  		unsigned long page;
>> -		struct page *p;
>>  
>>  		page = (addr +
>>  			((unsigned long) __va(kern_base)) -
>> @@ -2120,13 +2118,8 @@ void free_initmem(void)
>>  		memset((void *)addr, POISON_FREE_INITMEM, PAGE_SIZE);
>>  
>>  		if (do_free) {
>> -			p = virt_to_page(page);
>> -
>> -			ClearPageReserved(p);
>> -			init_page_count(p);
>> -			__free_page(p);
>> +			free_reserved_page(virt_to_page(page));
>>  			num_physpages++;
>> -			totalram_pages++;
>>  		}
>>  	}
>>  }
>> @@ -2134,17 +2127,7 @@ void free_initmem(void)
>>  #ifdef CONFIG_BLK_DEV_INITRD
>>  void free_initrd_mem(unsigned long start, unsigned long end)
>>  {
>> -	if (start < end)
>> -		printk ("Freeing initrd memory: %ldk freed\n", (end - start) >> 10);
>> -	for (; start < end; start += PAGE_SIZE) {
>> -		struct page *p = virt_to_page(start);
>> -
>> -		ClearPageReserved(p);
>> -		init_page_count(p);
>> -		__free_page(p);
>> -		num_physpages++;
>> -		totalram_pages++;
>> -	}
>> +	num_physpages += free_reserved_area(start, end, 0, "initrd");
> 
> Please add poison POISON_FREE_INITMEM here. I know this was not done before.
Sure, will make it.

> 
> 	Sam
> 

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

WARNING: multiple messages have this Message-ID (diff)
From: Jiang Liu <liuj97@gmail.com>
To: Sam Ravnborg <sam@ravnborg.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	David Rientjes <rientjes@google.com>,
	Jiang Liu <jiang.liu@huawei.com>,
	Wen Congyang <wency@cn.fujitsu.com>,
	Maciej Rutecki <maciej.rutecki@gmail.com>,
	Chris Clayton <chris2553@googlemail.com>,
	"Rafael J . Wysocki" <rjw@sisk.pl>, Mel Gorman <mgorman@suse.de>,
	Minchan Kim <minchan@kernel.org>,
	KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
	Michal Hocko <mhocko@suse.cz>, Jianguo Wu <wujianguo@huawei.com>,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	"David S. Miller" <davem@davemloft.net>
Subject: Re: [RFC PATCH v1 22/33] mm/SPARC: use common help functions to free reserved pages
Date: Wed, 06 Mar 2013 23:56:47 +0800	[thread overview]
Message-ID: <5137673F.4030801@gmail.com> (raw)
In-Reply-To: <20130305195845.GB12225@merkur.ravnborg.org>

Hi Sam,
	Thanks for review!

On 03/06/2013 03:58 AM, Sam Ravnborg wrote:
> On Tue, Mar 05, 2013 at 10:55:05PM +0800, Jiang Liu wrote:
>> Use common help functions to free reserved pages.
> 
> I like how this simplify things!
> 
> Please consider how you can also cover the HIGHMEM case,
> so map_high_region(...) is simplified too (in init_32.c).
> 
>>
>> Signed-off-by: Jiang Liu <jiang.liu@huawei.com>
>> Cc: "David S. Miller" <davem@davemloft.net>
>> Cc: Sam Ravnborg <sam@ravnborg.org>
>> ---
>>  arch/sparc/kernel/leon_smp.c |   15 +++------------
>>  arch/sparc/mm/init_32.c      |   40 ++++++----------------------------------
>>  arch/sparc/mm/init_64.c      |   25 ++++---------------------
>>  3 files changed, 13 insertions(+), 67 deletions(-)
>>
>> diff --git a/arch/sparc/mm/init_32.c b/arch/sparc/mm/init_32.c
>> index 48e0c03..2a7b6eb 100644
>> --- a/arch/sparc/mm/init_32.c
>> +++ b/arch/sparc/mm/init_32.c
>> @@ -374,45 +374,17 @@ void __init mem_init(void)
>>  
>>  void free_initmem (void)
>>  {
>> -	unsigned long addr;
>> -	unsigned long freed;
>> -
>> -	addr = (unsigned long)(&__init_begin);
>> -	freed = (unsigned long)(&__init_end) - addr;
>> -	for (; addr < (unsigned long)(&__init_end); addr += PAGE_SIZE) {
>> -		struct page *p;
>> -
>> -		memset((void *)addr, POISON_FREE_INITMEM, PAGE_SIZE);
>> -		p = virt_to_page(addr);
>> -
>> -		ClearPageReserved(p);
>> -		init_page_count(p);
>> -		__free_page(p);
>> -		totalram_pages++;
>> -		num_physpages++;
>> -	}
>> -	printk(KERN_INFO "Freeing unused kernel memory: %ldk freed\n",
>> -		freed >> 10);
>> +	num_physpages += free_reserved_area((unsigned long)(&__init_begin),
>> +					    (unsigned long)(&__init_end),
>> +					    POISON_FREE_INITMEM,
>> +					    "unused kernel");
> If you change free_initmem_default(...) to return number of pages freed this
> could have been used here.
Good suggestion, will make that change.

> 
>>  }
>>  
>>  #ifdef CONFIG_BLK_DEV_INITRD
>>  void free_initrd_mem(unsigned long start, unsigned long end)
>>  {
>> -	if (start < end)
>> -		printk(KERN_INFO "Freeing initrd memory: %ldk freed\n",
>> -			(end - start) >> 10);
>> -	for (; start < end; start += PAGE_SIZE) {
>> -		struct page *p;
>> -
>> -		memset((void *)start, POISON_FREE_INITMEM, PAGE_SIZE);
>> -		p = virt_to_page(start);
>> -
>> -		ClearPageReserved(p);
>> -		init_page_count(p);
>> -		__free_page(p);
>> -		totalram_pages++;
>> -		num_physpages++;
>> -	}
>> +	num_physpages += free_reserved_area(start, end, POISON_FREE_INITMEM,
>> +					    "initrd");
>>  }
>>  #endif
>>  
>> diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c
>> index 1588d33..03bfd10 100644
>> --- a/arch/sparc/mm/init_64.c
>> +++ b/arch/sparc/mm/init_64.c
>> @@ -2060,8 +2060,7 @@ void __init mem_init(void)
>>  	/* We subtract one to account for the mem_map_zero page
>>  	 * allocated below.
>>  	 */
>> -	totalram_pages -= 1;
>> -	num_physpages = totalram_pages;
>> +	num_physpages = totalram_pages - 1;
>>  
>>  	/*
>>  	 * Set up the zero page, mark it reserved, so that page count
>> @@ -2072,7 +2071,7 @@ void __init mem_init(void)
>>  		prom_printf("paging_init: Cannot alloc zero page.\n");
>>  		prom_halt();
>>  	}
>> -	SetPageReserved(mem_map_zero);
>> +	mark_page_reserved(mem_map_zero);
>>  
>>  	codepages = (((unsigned long) _etext) - ((unsigned long) _start));
>>  	codepages = PAGE_ALIGN(codepages) >> PAGE_SHIFT;
>> @@ -2112,7 +2111,6 @@ void free_initmem(void)
>>  	initend = (unsigned long)(__init_end) & PAGE_MASK;
>>  	for (; addr < initend; addr += PAGE_SIZE) {
>>  		unsigned long page;
>> -		struct page *p;
>>  
>>  		page = (addr +
>>  			((unsigned long) __va(kern_base)) -
>> @@ -2120,13 +2118,8 @@ void free_initmem(void)
>>  		memset((void *)addr, POISON_FREE_INITMEM, PAGE_SIZE);
>>  
>>  		if (do_free) {
>> -			p = virt_to_page(page);
>> -
>> -			ClearPageReserved(p);
>> -			init_page_count(p);
>> -			__free_page(p);
>> +			free_reserved_page(virt_to_page(page));
>>  			num_physpages++;
>> -			totalram_pages++;
>>  		}
>>  	}
>>  }
>> @@ -2134,17 +2127,7 @@ void free_initmem(void)
>>  #ifdef CONFIG_BLK_DEV_INITRD
>>  void free_initrd_mem(unsigned long start, unsigned long end)
>>  {
>> -	if (start < end)
>> -		printk ("Freeing initrd memory: %ldk freed\n", (end - start) >> 10);
>> -	for (; start < end; start += PAGE_SIZE) {
>> -		struct page *p = virt_to_page(start);
>> -
>> -		ClearPageReserved(p);
>> -		init_page_count(p);
>> -		__free_page(p);
>> -		num_physpages++;
>> -		totalram_pages++;
>> -	}
>> +	num_physpages += free_reserved_area(start, end, 0, "initrd");
> 
> Please add poison POISON_FREE_INITMEM here. I know this was not done before.
Sure, will make it.

> 
> 	Sam
> 


  parent reply	other threads:[~2013-03-06 15:56 UTC|newest]

Thread overview: 92+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-05 14:54 [RFC PATCH v1 00/33] accurately calculate pages managed by buddy system Jiang Liu
2013-03-05 14:54 ` Jiang Liu
2013-03-05 14:54 ` [RFC PATCH v1 01/33] mm: introduce common help functions to deal with reserved/managed pages Jiang Liu
2013-03-05 14:54 ` Jiang Liu
2013-03-05 14:54   ` Jiang Liu
2013-03-05 19:47   ` Sam Ravnborg
2013-03-05 19:47     ` Sam Ravnborg
2013-03-06 17:21     ` Russell King - ARM Linux
2013-03-06 17:21       ` Russell King - ARM Linux
2013-03-06 17:21     ` Russell King - ARM Linux
2013-03-09  2:17     ` Jiang Liu
2013-03-09  2:17     ` Jiang Liu
2013-03-09  2:17       ` Jiang Liu
2013-03-05 19:47   ` Sam Ravnborg
2013-03-05 14:54 ` [RFC PATCH v1 02/33] mm/alpha: use common help functions to free reserved pages Jiang Liu
2013-03-05 14:54   ` Jiang Liu
2013-03-05 14:54 ` [RFC PATCH v1 03/33] mm/ARM: " Jiang Liu
2013-03-05 14:54   ` Jiang Liu
2013-03-05 14:54   ` Jiang Liu
2013-03-05 14:54 ` [RFC PATCH v1 04/33] mm/avr32: " Jiang Liu
2013-03-05 14:54   ` Jiang Liu
2013-03-05 16:50   ` Hans-Christian Egtvedt
2013-03-05 16:50     ` Hans-Christian Egtvedt
2013-03-05 14:54 ` [RFC PATCH v1 05/33] mm/blackfin: " Jiang Liu
2013-03-05 14:54   ` Jiang Liu
2013-03-05 14:54 ` [RFC PATCH v1 06/33] mm/c6x: " Jiang Liu
2013-03-05 14:54   ` Jiang Liu
2013-03-05 14:54 ` [RFC PATCH v1 07/33] mm/cris: " Jiang Liu
2013-03-05 14:54   ` Jiang Liu
2013-03-05 14:54 ` [RFC PATCH v1 08/33] mm/FRV: " Jiang Liu
2013-03-05 14:54   ` Jiang Liu
2013-03-05 14:54 ` [RFC PATCH v1 09/33] mm/h8300: " Jiang Liu
2013-03-05 14:54   ` Jiang Liu
2013-03-05 14:54 ` [RFC PATCH v1 10/33] mm/IA64: " Jiang Liu
2013-03-05 14:54   ` Jiang Liu
2013-03-05 14:54 ` [RFC PATCH v1 11/33] mm/m32r: " Jiang Liu
2013-03-05 14:54   ` Jiang Liu
2013-03-05 14:54 ` [RFC PATCH v1 12/33] mm/m68k: " Jiang Liu
2013-03-05 14:54   ` Jiang Liu
2013-03-05 14:54 ` [RFC PATCH v1 13/33] mm/microblaze: " Jiang Liu
2013-03-05 14:54   ` Jiang Liu
2013-03-05 14:54 ` [RFC PATCH v1 14/33] mm/MIPS: " Jiang Liu
2013-03-05 14:54   ` Jiang Liu
2013-03-05 14:54 ` [RFC PATCH v1 15/33] mm/mn10300: " Jiang Liu
2013-03-05 14:54   ` Jiang Liu
2013-03-05 14:54 ` [RFC PATCH v1 16/33] mm/openrisc: " Jiang Liu
2013-03-05 14:54   ` Jiang Liu
2013-03-05 14:55 ` [RFC PATCH v1 17/33] mm/parisc: " Jiang Liu
2013-03-05 14:55   ` Jiang Liu
2013-03-05 14:55 ` [RFC PATCH v1 18/33] mm/ppc: " Jiang Liu
2013-03-05 14:55   ` Jiang Liu
2013-03-05 14:55 ` [RFC PATCH v1 19/33] mm/s390: " Jiang Liu
2013-03-05 14:55   ` Jiang Liu
2013-03-05 14:55 ` [RFC PATCH v1 20/33] mm/score: " Jiang Liu
2013-03-05 14:55   ` Jiang Liu
2013-03-05 14:55 ` [RFC PATCH v1 21/33] mm/SH: " Jiang Liu
2013-03-05 14:55   ` Jiang Liu
2013-03-06  2:21   ` Paul Mundt
2013-03-06  2:21     ` Paul Mundt
2013-03-05 14:55 ` [RFC PATCH v1 22/33] mm/SPARC: " Jiang Liu
2013-03-05 14:55   ` Jiang Liu
2013-03-05 19:49   ` David Miller
2013-03-05 19:49     ` David Miller
2013-03-05 19:58   ` Sam Ravnborg
2013-03-05 19:58     ` Sam Ravnborg
2013-03-05 22:57     ` Sam Ravnborg
2013-03-05 22:57       ` Sam Ravnborg
2013-03-06 15:56     ` Jiang Liu [this message]
2013-03-06 15:56       ` Jiang Liu
2013-03-05 14:55 ` [RFC PATCH v1 23/33] mm/um: " Jiang Liu
2013-03-05 14:55   ` Jiang Liu
2013-03-05 14:55 ` [RFC PATCH v1 24/33] mm/unicore32: " Jiang Liu
2013-03-05 14:55   ` Jiang Liu
2013-03-05 14:55 ` [RFC PATCH v1 25/33] mm/x86: " Jiang Liu
2013-03-05 14:55   ` Jiang Liu
2013-03-05 14:55 ` [RFC PATCH v1 26/33] mm/xtensa: " Jiang Liu
2013-03-05 14:55   ` Jiang Liu
2013-03-05 14:55 ` [RFC PATCH v1 27/33] mm,kexec: " Jiang Liu
2013-03-05 14:55   ` Jiang Liu
2013-03-05 14:55 ` [RFC PATCH v1 28/33] mm: introduce free_highmem_page() helper to free highmem pages inti buddy system Jiang Liu
2013-03-05 14:55   ` Jiang Liu
2013-03-05 14:55 ` [RFC PATCH v1 29/33] mm: accurately calculate zone->managed_pages for highmem zones Jiang Liu
2013-03-05 14:55   ` Jiang Liu
2013-03-05 14:55 ` [RFC PATCH v1 30/33] mm: use a dedicated lock to protect totalram_pages and zone->managed_pages Jiang Liu
2013-03-05 14:55   ` Jiang Liu
2013-03-05 14:55 ` [RFC PATCH v1 31/33] mm: avoid using __free_pages_bootmem() at runtime Jiang Liu
2013-03-05 14:55   ` Jiang Liu
2013-03-05 14:55 ` [RFC PATCH v1 32/33] mm: correctly update zone->mamaged_pages Jiang Liu
2013-03-05 14:55   ` Jiang Liu
2013-03-05 14:55 ` Jiang Liu
2013-03-05 14:55 ` [RFC PATCH v1 33/33] mm: report available pages as "MemTotal" for each NUMA node Jiang Liu
2013-03-05 14:55   ` Jiang Liu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5137673F.4030801@gmail.com \
    --to=liuj97@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=chris2553@googlemail.com \
    --cc=davem@davemloft.net \
    --cc=jiang.liu@huawei.com \
    --cc=kamezawa.hiroyu@jp.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=maciej.rutecki@gmail.com \
    --cc=mgorman@suse.de \
    --cc=mhocko@suse.cz \
    --cc=minchan@kernel.org \
    --cc=rientjes@google.com \
    --cc=rjw@sisk.pl \
    --cc=sam@ravnborg.org \
    --cc=wency@cn.fujitsu.com \
    --cc=wujianguo@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.