All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/4] mm/memory-hotplug: fix lowmem count overflow when offline pages
@ 2013-05-22  9:29 ` Wanpeng Li
  0 siblings, 0 replies; 22+ messages in thread
From: Wanpeng Li @ 2013-05-22  9:29 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Michal Hocko, KAMEZAWA Hiroyuki, David Rientjes, Jiang Liu,
	Tang Chen, linux-mm, linux-kernel, Wanpeng Li

Logic memory-remove code fails to correctly account the Total High Memory 
when a memory block which contains High Memory is offlined as shown in the
example below. The following patch fixes it.

cat /proc/meminfo 
MemTotal:        7079452 kB
MemFree:         5805976 kB
Buffers:           94372 kB
Cached:           872000 kB
SwapCached:            0 kB
Active:           626936 kB
Inactive:         519236 kB
Active(anon):     180780 kB
Inactive(anon):   222944 kB
Active(file):     446156 kB
Inactive(file):   296292 kB
Unevictable:           0 kB
Mlocked:               0 kB
HighTotal:       7294672 kB
HighFree:        5181024 kB
LowTotal:       4294752076 kB
LowFree:          624952 kB

Signed-off-by: Wanpeng Li <liwanp@linux.vnet.ibm.com>
---
 mm/page_alloc.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 98cbdf6..80474b2 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -6140,6 +6140,10 @@ __offline_isolated_pages(unsigned long start_pfn, unsigned long end_pfn)
 		list_del(&page->lru);
 		rmv_page_order(page);
 		zone->free_area[order].nr_free--;
+#ifdef CONFIG_HIGHMEM
+		if (PageHighMem(page))
+			totalhigh_pages -= 1 << order;
+#endif
 		for (i = 0; i < (1 << order); i++)
 			SetPageReserved((page+i));
 		pfn += (1 << order);
-- 
1.8.1.2


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH 1/4] mm/memory-hotplug: fix lowmem count overflow when offline pages
@ 2013-05-22  9:29 ` Wanpeng Li
  0 siblings, 0 replies; 22+ messages in thread
From: Wanpeng Li @ 2013-05-22  9:29 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Michal Hocko, KAMEZAWA Hiroyuki, David Rientjes, Jiang Liu,
	Tang Chen, linux-mm, linux-kernel, Wanpeng Li

Logic memory-remove code fails to correctly account the Total High Memory 
when a memory block which contains High Memory is offlined as shown in the
example below. The following patch fixes it.

cat /proc/meminfo 
MemTotal:        7079452 kB
MemFree:         5805976 kB
Buffers:           94372 kB
Cached:           872000 kB
SwapCached:            0 kB
Active:           626936 kB
Inactive:         519236 kB
Active(anon):     180780 kB
Inactive(anon):   222944 kB
Active(file):     446156 kB
Inactive(file):   296292 kB
Unevictable:           0 kB
Mlocked:               0 kB
HighTotal:       7294672 kB
HighFree:        5181024 kB
LowTotal:       4294752076 kB
LowFree:          624952 kB

Signed-off-by: Wanpeng Li <liwanp@linux.vnet.ibm.com>
---
 mm/page_alloc.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 98cbdf6..80474b2 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -6140,6 +6140,10 @@ __offline_isolated_pages(unsigned long start_pfn, unsigned long end_pfn)
 		list_del(&page->lru);
 		rmv_page_order(page);
 		zone->free_area[order].nr_free--;
+#ifdef CONFIG_HIGHMEM
+		if (PageHighMem(page))
+			totalhigh_pages -= 1 << order;
+#endif
 		for (i = 0; i < (1 << order); i++)
 			SetPageReserved((page+i));
 		pfn += (1 << order);
-- 
1.8.1.2

--
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>

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH 2/4] mm/pageblock: remove get/set_pageblock_flags
  2013-05-22  9:29 ` Wanpeng Li
@ 2013-05-22  9:29   ` Wanpeng Li
  -1 siblings, 0 replies; 22+ messages in thread
From: Wanpeng Li @ 2013-05-22  9:29 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Michal Hocko, KAMEZAWA Hiroyuki, David Rientjes, Jiang Liu,
	Tang Chen, linux-mm, linux-kernel, Wanpeng Li

get_pageblock_flags and set_pageblock_flags are not used any 
more, this patch remove them.

Signed-off-by: Wanpeng Li <liwanp@linux.vnet.ibm.com>
---
 include/linux/pageblock-flags.h | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/include/linux/pageblock-flags.h b/include/linux/pageblock-flags.h
index be655e4..2ee8cd2 100644
--- a/include/linux/pageblock-flags.h
+++ b/include/linux/pageblock-flags.h
@@ -80,10 +80,4 @@ void set_pageblock_flags_group(struct page *page, unsigned long flags,
 							PB_migrate_skip)
 #endif /* CONFIG_COMPACTION */
 
-#define get_pageblock_flags(page) \
-			get_pageblock_flags_group(page, 0, PB_migrate_end)
-#define set_pageblock_flags(page, flags) \
-			set_pageblock_flags_group(page, flags,	\
-						  0, PB_migrate_end)
-
 #endif	/* PAGEBLOCK_FLAGS_H */
-- 
1.8.1.2


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH 2/4] mm/pageblock: remove get/set_pageblock_flags
@ 2013-05-22  9:29   ` Wanpeng Li
  0 siblings, 0 replies; 22+ messages in thread
From: Wanpeng Li @ 2013-05-22  9:29 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Michal Hocko, KAMEZAWA Hiroyuki, David Rientjes, Jiang Liu,
	Tang Chen, linux-mm, linux-kernel, Wanpeng Li

get_pageblock_flags and set_pageblock_flags are not used any 
more, this patch remove them.

Signed-off-by: Wanpeng Li <liwanp@linux.vnet.ibm.com>
---
 include/linux/pageblock-flags.h | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/include/linux/pageblock-flags.h b/include/linux/pageblock-flags.h
index be655e4..2ee8cd2 100644
--- a/include/linux/pageblock-flags.h
+++ b/include/linux/pageblock-flags.h
@@ -80,10 +80,4 @@ void set_pageblock_flags_group(struct page *page, unsigned long flags,
 							PB_migrate_skip)
 #endif /* CONFIG_COMPACTION */
 
-#define get_pageblock_flags(page) \
-			get_pageblock_flags_group(page, 0, PB_migrate_end)
-#define set_pageblock_flags(page, flags) \
-			set_pageblock_flags_group(page, flags,	\
-						  0, PB_migrate_end)
-
 #endif	/* PAGEBLOCK_FLAGS_H */
-- 
1.8.1.2

--
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>

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH 3/4] mm/hugetlb: remove hugetlb_prefault
  2013-05-22  9:29 ` Wanpeng Li
@ 2013-05-22  9:29   ` Wanpeng Li
  -1 siblings, 0 replies; 22+ messages in thread
From: Wanpeng Li @ 2013-05-22  9:29 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Michal Hocko, KAMEZAWA Hiroyuki, David Rientjes, Jiang Liu,
	Tang Chen, linux-mm, linux-kernel, Wanpeng Li

hugetlb_prefault are not used any more, this patch remove it.

Signed-off-by: Wanpeng Li <liwanp@linux.vnet.ibm.com>
---
 include/linux/hugetlb.h | 2 --
 1 file changed, 2 deletions(-)

diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
index 6b4890f..a811149 100644
--- a/include/linux/hugetlb.h
+++ b/include/linux/hugetlb.h
@@ -55,7 +55,6 @@ void __unmap_hugepage_range_final(struct mmu_gather *tlb,
 void __unmap_hugepage_range(struct mmu_gather *tlb, struct vm_area_struct *vma,
 				unsigned long start, unsigned long end,
 				struct page *ref_page);
-int hugetlb_prefault(struct address_space *, struct vm_area_struct *);
 void hugetlb_report_meminfo(struct seq_file *);
 int hugetlb_report_node_meminfo(int, char *);
 void hugetlb_show_meminfo(void);
@@ -110,7 +109,6 @@ static inline unsigned long hugetlb_total_pages(void)
 #define follow_hugetlb_page(m,v,p,vs,a,b,i,w)	({ BUG(); 0; })
 #define follow_huge_addr(mm, addr, write)	ERR_PTR(-EINVAL)
 #define copy_hugetlb_page_range(src, dst, vma)	({ BUG(); 0; })
-#define hugetlb_prefault(mapping, vma)		({ BUG(); 0; })
 static inline void hugetlb_report_meminfo(struct seq_file *m)
 {
 }
-- 
1.8.1.2


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH 3/4] mm/hugetlb: remove hugetlb_prefault
@ 2013-05-22  9:29   ` Wanpeng Li
  0 siblings, 0 replies; 22+ messages in thread
From: Wanpeng Li @ 2013-05-22  9:29 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Michal Hocko, KAMEZAWA Hiroyuki, David Rientjes, Jiang Liu,
	Tang Chen, linux-mm, linux-kernel, Wanpeng Li

hugetlb_prefault are not used any more, this patch remove it.

Signed-off-by: Wanpeng Li <liwanp@linux.vnet.ibm.com>
---
 include/linux/hugetlb.h | 2 --
 1 file changed, 2 deletions(-)

diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
index 6b4890f..a811149 100644
--- a/include/linux/hugetlb.h
+++ b/include/linux/hugetlb.h
@@ -55,7 +55,6 @@ void __unmap_hugepage_range_final(struct mmu_gather *tlb,
 void __unmap_hugepage_range(struct mmu_gather *tlb, struct vm_area_struct *vma,
 				unsigned long start, unsigned long end,
 				struct page *ref_page);
-int hugetlb_prefault(struct address_space *, struct vm_area_struct *);
 void hugetlb_report_meminfo(struct seq_file *);
 int hugetlb_report_node_meminfo(int, char *);
 void hugetlb_show_meminfo(void);
@@ -110,7 +109,6 @@ static inline unsigned long hugetlb_total_pages(void)
 #define follow_hugetlb_page(m,v,p,vs,a,b,i,w)	({ BUG(); 0; })
 #define follow_huge_addr(mm, addr, write)	ERR_PTR(-EINVAL)
 #define copy_hugetlb_page_range(src, dst, vma)	({ BUG(); 0; })
-#define hugetlb_prefault(mapping, vma)		({ BUG(); 0; })
 static inline void hugetlb_report_meminfo(struct seq_file *m)
 {
 }
-- 
1.8.1.2

--
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>

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH 4/4] mm/hugetlb: use already exist interface huge_page_shift
  2013-05-22  9:29 ` Wanpeng Li
@ 2013-05-22  9:29   ` Wanpeng Li
  -1 siblings, 0 replies; 22+ messages in thread
From: Wanpeng Li @ 2013-05-22  9:29 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Michal Hocko, KAMEZAWA Hiroyuki, David Rientjes, Jiang Liu,
	Tang Chen, linux-mm, linux-kernel, Wanpeng Li

Use already exist interface huge_page_shift instead of h->order + PAGE_SHIFT.

Signed-off-by: Wanpeng Li <liwanp@linux.vnet.ibm.com>
---
 mm/hugetlb.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index f8feeec..b6ff0ee 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -319,7 +319,7 @@ unsigned long vma_kernel_pagesize(struct vm_area_struct *vma)
 
 	hstate = hstate_vma(vma);
 
-	return 1UL << (hstate->order + PAGE_SHIFT);
+	return 1UL << huge_page_shift(hstate);
 }
 EXPORT_SYMBOL_GPL(vma_kernel_pagesize);
 
-- 
1.8.1.2


^ permalink raw reply related	[flat|nested] 22+ messages in thread

* [PATCH 4/4] mm/hugetlb: use already exist interface huge_page_shift
@ 2013-05-22  9:29   ` Wanpeng Li
  0 siblings, 0 replies; 22+ messages in thread
From: Wanpeng Li @ 2013-05-22  9:29 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Michal Hocko, KAMEZAWA Hiroyuki, David Rientjes, Jiang Liu,
	Tang Chen, linux-mm, linux-kernel, Wanpeng Li

Use already exist interface huge_page_shift instead of h->order + PAGE_SHIFT.

Signed-off-by: Wanpeng Li <liwanp@linux.vnet.ibm.com>
---
 mm/hugetlb.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index f8feeec..b6ff0ee 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -319,7 +319,7 @@ unsigned long vma_kernel_pagesize(struct vm_area_struct *vma)
 
 	hstate = hstate_vma(vma);
 
-	return 1UL << (hstate->order + PAGE_SHIFT);
+	return 1UL << huge_page_shift(hstate);
 }
 EXPORT_SYMBOL_GPL(vma_kernel_pagesize);
 
-- 
1.8.1.2

--
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>

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* Re: [PATCH 1/4] mm/memory-hotplug: fix lowmem count overflow when offline pages
  2013-05-22  9:29 ` Wanpeng Li
@ 2013-05-22 10:49   ` Michal Hocko
  -1 siblings, 0 replies; 22+ messages in thread
From: Michal Hocko @ 2013-05-22 10:49 UTC (permalink / raw)
  To: Wanpeng Li
  Cc: Andrew Morton, KAMEZAWA Hiroyuki, David Rientjes, Jiang Liu,
	Tang Chen, linux-mm, linux-kernel

On Wed 22-05-13 17:29:27, Wanpeng Li wrote:
> Logic memory-remove code fails to correctly account the Total High Memory 
> when a memory block which contains High Memory is offlined as shown in the
> example below. The following patch fixes it.
> 
> cat /proc/meminfo 
> MemTotal:        7079452 kB
> MemFree:         5805976 kB
> Buffers:           94372 kB
> Cached:           872000 kB
> SwapCached:            0 kB
> Active:           626936 kB
> Inactive:         519236 kB
> Active(anon):     180780 kB
> Inactive(anon):   222944 kB
> Active(file):     446156 kB
> Inactive(file):   296292 kB
> Unevictable:           0 kB
> Mlocked:               0 kB
> HighTotal:       7294672 kB
> HighFree:        5181024 kB
> LowTotal:       4294752076 kB
> LowFree:          624952 kB

Ok, so the HighTotal is higher than MemTotal but it would have been more
straightforward to show number of HighTotal before hotremove, show how
much memory has been removed and the number after.

It is not clear which stable kernels need this fix as well.

> 
> Signed-off-by: Wanpeng Li <liwanp@linux.vnet.ibm.com>

Anyway
Reviewed-by: Michal Hocko <mhocko@suse.cz>

with a nit pick bellow

> ---
>  mm/page_alloc.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> index 98cbdf6..80474b2 100644
> --- a/mm/page_alloc.c
> +++ b/mm/page_alloc.c
> @@ -6140,6 +6140,10 @@ __offline_isolated_pages(unsigned long start_pfn, unsigned long end_pfn)
>  		list_del(&page->lru);
>  		rmv_page_order(page);
>  		zone->free_area[order].nr_free--;
> +#ifdef CONFIG_HIGHMEM
> +		if (PageHighMem(page))
> +			totalhigh_pages -= 1 << order;
> +#endif

ifdef shouldn't be necessary as PageHighMem should default to false for
!CONFIG_HIGHMEM AFAICS.

>  		for (i = 0; i < (1 << order); i++)
>  			SetPageReserved((page+i));
>  		pfn += (1 << order);
> -- 
> 1.8.1.2
> 
> --
> 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>

-- 
Michal Hocko
SUSE Labs

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 1/4] mm/memory-hotplug: fix lowmem count overflow when offline pages
@ 2013-05-22 10:49   ` Michal Hocko
  0 siblings, 0 replies; 22+ messages in thread
From: Michal Hocko @ 2013-05-22 10:49 UTC (permalink / raw)
  To: Wanpeng Li
  Cc: Andrew Morton, KAMEZAWA Hiroyuki, David Rientjes, Jiang Liu,
	Tang Chen, linux-mm, linux-kernel

On Wed 22-05-13 17:29:27, Wanpeng Li wrote:
> Logic memory-remove code fails to correctly account the Total High Memory 
> when a memory block which contains High Memory is offlined as shown in the
> example below. The following patch fixes it.
> 
> cat /proc/meminfo 
> MemTotal:        7079452 kB
> MemFree:         5805976 kB
> Buffers:           94372 kB
> Cached:           872000 kB
> SwapCached:            0 kB
> Active:           626936 kB
> Inactive:         519236 kB
> Active(anon):     180780 kB
> Inactive(anon):   222944 kB
> Active(file):     446156 kB
> Inactive(file):   296292 kB
> Unevictable:           0 kB
> Mlocked:               0 kB
> HighTotal:       7294672 kB
> HighFree:        5181024 kB
> LowTotal:       4294752076 kB
> LowFree:          624952 kB

Ok, so the HighTotal is higher than MemTotal but it would have been more
straightforward to show number of HighTotal before hotremove, show how
much memory has been removed and the number after.

It is not clear which stable kernels need this fix as well.

> 
> Signed-off-by: Wanpeng Li <liwanp@linux.vnet.ibm.com>

Anyway
Reviewed-by: Michal Hocko <mhocko@suse.cz>

with a nit pick bellow

> ---
>  mm/page_alloc.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> index 98cbdf6..80474b2 100644
> --- a/mm/page_alloc.c
> +++ b/mm/page_alloc.c
> @@ -6140,6 +6140,10 @@ __offline_isolated_pages(unsigned long start_pfn, unsigned long end_pfn)
>  		list_del(&page->lru);
>  		rmv_page_order(page);
>  		zone->free_area[order].nr_free--;
> +#ifdef CONFIG_HIGHMEM
> +		if (PageHighMem(page))
> +			totalhigh_pages -= 1 << order;
> +#endif

ifdef shouldn't be necessary as PageHighMem should default to false for
!CONFIG_HIGHMEM AFAICS.

>  		for (i = 0; i < (1 << order); i++)
>  			SetPageReserved((page+i));
>  		pfn += (1 << order);
> -- 
> 1.8.1.2
> 
> --
> 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>

-- 
Michal Hocko
SUSE Labs

--
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>

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 2/4] mm/pageblock: remove get/set_pageblock_flags
  2013-05-22  9:29   ` Wanpeng Li
@ 2013-05-22 10:50     ` Michal Hocko
  -1 siblings, 0 replies; 22+ messages in thread
From: Michal Hocko @ 2013-05-22 10:50 UTC (permalink / raw)
  To: Wanpeng Li
  Cc: Andrew Morton, KAMEZAWA Hiroyuki, David Rientjes, Jiang Liu,
	Tang Chen, linux-mm, linux-kernel

On Wed 22-05-13 17:29:28, Wanpeng Li wrote:
> get_pageblock_flags and set_pageblock_flags are not used any 
> more, this patch remove them.
> 
> Signed-off-by: Wanpeng Li <liwanp@linux.vnet.ibm.com>

Yes, git grep agrees
Reviewed-by: Michal Hocko <mhocko@suse.cz>

> ---
>  include/linux/pageblock-flags.h | 6 ------
>  1 file changed, 6 deletions(-)
> 
> diff --git a/include/linux/pageblock-flags.h b/include/linux/pageblock-flags.h
> index be655e4..2ee8cd2 100644
> --- a/include/linux/pageblock-flags.h
> +++ b/include/linux/pageblock-flags.h
> @@ -80,10 +80,4 @@ void set_pageblock_flags_group(struct page *page, unsigned long flags,
>  							PB_migrate_skip)
>  #endif /* CONFIG_COMPACTION */
>  
> -#define get_pageblock_flags(page) \
> -			get_pageblock_flags_group(page, 0, PB_migrate_end)
> -#define set_pageblock_flags(page, flags) \
> -			set_pageblock_flags_group(page, flags,	\
> -						  0, PB_migrate_end)
> -
>  #endif	/* PAGEBLOCK_FLAGS_H */
> -- 
> 1.8.1.2
> 
> --
> 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>

-- 
Michal Hocko
SUSE Labs

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 2/4] mm/pageblock: remove get/set_pageblock_flags
@ 2013-05-22 10:50     ` Michal Hocko
  0 siblings, 0 replies; 22+ messages in thread
From: Michal Hocko @ 2013-05-22 10:50 UTC (permalink / raw)
  To: Wanpeng Li
  Cc: Andrew Morton, KAMEZAWA Hiroyuki, David Rientjes, Jiang Liu,
	Tang Chen, linux-mm, linux-kernel

On Wed 22-05-13 17:29:28, Wanpeng Li wrote:
> get_pageblock_flags and set_pageblock_flags are not used any 
> more, this patch remove them.
> 
> Signed-off-by: Wanpeng Li <liwanp@linux.vnet.ibm.com>

Yes, git grep agrees
Reviewed-by: Michal Hocko <mhocko@suse.cz>

> ---
>  include/linux/pageblock-flags.h | 6 ------
>  1 file changed, 6 deletions(-)
> 
> diff --git a/include/linux/pageblock-flags.h b/include/linux/pageblock-flags.h
> index be655e4..2ee8cd2 100644
> --- a/include/linux/pageblock-flags.h
> +++ b/include/linux/pageblock-flags.h
> @@ -80,10 +80,4 @@ void set_pageblock_flags_group(struct page *page, unsigned long flags,
>  							PB_migrate_skip)
>  #endif /* CONFIG_COMPACTION */
>  
> -#define get_pageblock_flags(page) \
> -			get_pageblock_flags_group(page, 0, PB_migrate_end)
> -#define set_pageblock_flags(page, flags) \
> -			set_pageblock_flags_group(page, flags,	\
> -						  0, PB_migrate_end)
> -
>  #endif	/* PAGEBLOCK_FLAGS_H */
> -- 
> 1.8.1.2
> 
> --
> 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>

-- 
Michal Hocko
SUSE Labs

--
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>

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 3/4] mm/hugetlb: remove hugetlb_prefault
  2013-05-22  9:29   ` Wanpeng Li
@ 2013-05-22 10:50     ` Michal Hocko
  -1 siblings, 0 replies; 22+ messages in thread
From: Michal Hocko @ 2013-05-22 10:50 UTC (permalink / raw)
  To: Wanpeng Li
  Cc: Andrew Morton, KAMEZAWA Hiroyuki, David Rientjes, Jiang Liu,
	Tang Chen, linux-mm, linux-kernel

On Wed 22-05-13 17:29:29, Wanpeng Li wrote:
> hugetlb_prefault are not used any more, this patch remove it.
> 
> Signed-off-by: Wanpeng Li <liwanp@linux.vnet.ibm.com>

Reviewed-by: Michal Hocko <mhocko@suse.cz>

> ---
>  include/linux/hugetlb.h | 2 --
>  1 file changed, 2 deletions(-)
> 
> diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
> index 6b4890f..a811149 100644
> --- a/include/linux/hugetlb.h
> +++ b/include/linux/hugetlb.h
> @@ -55,7 +55,6 @@ void __unmap_hugepage_range_final(struct mmu_gather *tlb,
>  void __unmap_hugepage_range(struct mmu_gather *tlb, struct vm_area_struct *vma,
>  				unsigned long start, unsigned long end,
>  				struct page *ref_page);
> -int hugetlb_prefault(struct address_space *, struct vm_area_struct *);
>  void hugetlb_report_meminfo(struct seq_file *);
>  int hugetlb_report_node_meminfo(int, char *);
>  void hugetlb_show_meminfo(void);
> @@ -110,7 +109,6 @@ static inline unsigned long hugetlb_total_pages(void)
>  #define follow_hugetlb_page(m,v,p,vs,a,b,i,w)	({ BUG(); 0; })
>  #define follow_huge_addr(mm, addr, write)	ERR_PTR(-EINVAL)
>  #define copy_hugetlb_page_range(src, dst, vma)	({ BUG(); 0; })
> -#define hugetlb_prefault(mapping, vma)		({ BUG(); 0; })
>  static inline void hugetlb_report_meminfo(struct seq_file *m)
>  {
>  }
> -- 
> 1.8.1.2
> 

-- 
Michal Hocko
SUSE Labs

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 3/4] mm/hugetlb: remove hugetlb_prefault
@ 2013-05-22 10:50     ` Michal Hocko
  0 siblings, 0 replies; 22+ messages in thread
From: Michal Hocko @ 2013-05-22 10:50 UTC (permalink / raw)
  To: Wanpeng Li
  Cc: Andrew Morton, KAMEZAWA Hiroyuki, David Rientjes, Jiang Liu,
	Tang Chen, linux-mm, linux-kernel

On Wed 22-05-13 17:29:29, Wanpeng Li wrote:
> hugetlb_prefault are not used any more, this patch remove it.
> 
> Signed-off-by: Wanpeng Li <liwanp@linux.vnet.ibm.com>

Reviewed-by: Michal Hocko <mhocko@suse.cz>

> ---
>  include/linux/hugetlb.h | 2 --
>  1 file changed, 2 deletions(-)
> 
> diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
> index 6b4890f..a811149 100644
> --- a/include/linux/hugetlb.h
> +++ b/include/linux/hugetlb.h
> @@ -55,7 +55,6 @@ void __unmap_hugepage_range_final(struct mmu_gather *tlb,
>  void __unmap_hugepage_range(struct mmu_gather *tlb, struct vm_area_struct *vma,
>  				unsigned long start, unsigned long end,
>  				struct page *ref_page);
> -int hugetlb_prefault(struct address_space *, struct vm_area_struct *);
>  void hugetlb_report_meminfo(struct seq_file *);
>  int hugetlb_report_node_meminfo(int, char *);
>  void hugetlb_show_meminfo(void);
> @@ -110,7 +109,6 @@ static inline unsigned long hugetlb_total_pages(void)
>  #define follow_hugetlb_page(m,v,p,vs,a,b,i,w)	({ BUG(); 0; })
>  #define follow_huge_addr(mm, addr, write)	ERR_PTR(-EINVAL)
>  #define copy_hugetlb_page_range(src, dst, vma)	({ BUG(); 0; })
> -#define hugetlb_prefault(mapping, vma)		({ BUG(); 0; })
>  static inline void hugetlb_report_meminfo(struct seq_file *m)
>  {
>  }
> -- 
> 1.8.1.2
> 

-- 
Michal Hocko
SUSE Labs

--
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>

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 4/4] mm/hugetlb: use already exist interface huge_page_shift
  2013-05-22  9:29   ` Wanpeng Li
@ 2013-05-22 10:52     ` Michal Hocko
  -1 siblings, 0 replies; 22+ messages in thread
From: Michal Hocko @ 2013-05-22 10:52 UTC (permalink / raw)
  To: Wanpeng Li
  Cc: Andrew Morton, KAMEZAWA Hiroyuki, David Rientjes, Jiang Liu,
	Tang Chen, linux-mm, linux-kernel

On Wed 22-05-13 17:29:30, Wanpeng Li wrote:
> Use already exist interface huge_page_shift instead of h->order + PAGE_SHIFT.

alloc_bootmem_huge_page in powerpc uses the same construct so maybe you
want to udpate that one as well.

> 
> Signed-off-by: Wanpeng Li <liwanp@linux.vnet.ibm.com>

Reviewed-by: Michal Hocko <mhocko@suse.cz>

> ---
>  mm/hugetlb.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/mm/hugetlb.c b/mm/hugetlb.c
> index f8feeec..b6ff0ee 100644
> --- a/mm/hugetlb.c
> +++ b/mm/hugetlb.c
> @@ -319,7 +319,7 @@ unsigned long vma_kernel_pagesize(struct vm_area_struct *vma)
>  
>  	hstate = hstate_vma(vma);
>  
> -	return 1UL << (hstate->order + PAGE_SHIFT);
> +	return 1UL << huge_page_shift(hstate);
>  }
>  EXPORT_SYMBOL_GPL(vma_kernel_pagesize);
>  
> -- 
> 1.8.1.2
> 
> --
> 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>

-- 
Michal Hocko
SUSE Labs

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 4/4] mm/hugetlb: use already exist interface huge_page_shift
@ 2013-05-22 10:52     ` Michal Hocko
  0 siblings, 0 replies; 22+ messages in thread
From: Michal Hocko @ 2013-05-22 10:52 UTC (permalink / raw)
  To: Wanpeng Li
  Cc: Andrew Morton, KAMEZAWA Hiroyuki, David Rientjes, Jiang Liu,
	Tang Chen, linux-mm, linux-kernel

On Wed 22-05-13 17:29:30, Wanpeng Li wrote:
> Use already exist interface huge_page_shift instead of h->order + PAGE_SHIFT.

alloc_bootmem_huge_page in powerpc uses the same construct so maybe you
want to udpate that one as well.

> 
> Signed-off-by: Wanpeng Li <liwanp@linux.vnet.ibm.com>

Reviewed-by: Michal Hocko <mhocko@suse.cz>

> ---
>  mm/hugetlb.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/mm/hugetlb.c b/mm/hugetlb.c
> index f8feeec..b6ff0ee 100644
> --- a/mm/hugetlb.c
> +++ b/mm/hugetlb.c
> @@ -319,7 +319,7 @@ unsigned long vma_kernel_pagesize(struct vm_area_struct *vma)
>  
>  	hstate = hstate_vma(vma);
>  
> -	return 1UL << (hstate->order + PAGE_SHIFT);
> +	return 1UL << huge_page_shift(hstate);
>  }
>  EXPORT_SYMBOL_GPL(vma_kernel_pagesize);
>  
> -- 
> 1.8.1.2
> 
> --
> 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>

-- 
Michal Hocko
SUSE Labs

--
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>

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 1/4] mm/memory-hotplug: fix lowmem count overflow when offline pages
  2013-05-22 10:49   ` Michal Hocko
  (?)
@ 2013-05-22 23:38   ` Wanpeng Li
  -1 siblings, 0 replies; 22+ messages in thread
From: Wanpeng Li @ 2013-05-22 23:38 UTC (permalink / raw)
  To: Michal Hocko
  Cc: Andrew Morton, KAMEZAWA Hiroyuki, David Rientjes, Jiang Liu,
	Tang Chen, linux-mm, linux-kernel

On Wed, May 22, 2013 at 12:49:37PM +0200, Michal Hocko wrote:
>On Wed 22-05-13 17:29:27, Wanpeng Li wrote:
>> Logic memory-remove code fails to correctly account the Total High Memory 
>> when a memory block which contains High Memory is offlined as shown in the
>> example below. The following patch fixes it.
>> 
>> cat /proc/meminfo 
>> MemTotal:        7079452 kB
>> MemFree:         5805976 kB
>> Buffers:           94372 kB
>> Cached:           872000 kB
>> SwapCached:            0 kB
>> Active:           626936 kB
>> Inactive:         519236 kB
>> Active(anon):     180780 kB
>> Inactive(anon):   222944 kB
>> Active(file):     446156 kB
>> Inactive(file):   296292 kB
>> Unevictable:           0 kB
>> Mlocked:               0 kB
>> HighTotal:       7294672 kB
>> HighFree:        5181024 kB
>> LowTotal:       4294752076 kB
>> LowFree:          624952 kB
>
>Ok, so the HighTotal is higher than MemTotal but it would have been more
>straightforward to show number of HighTotal before hotremove, show how
>much memory has been removed and the number after.
>
>It is not clear which stable kernels need this fix as well.
>

THanks for your review, Michal, I will update soon. ;-)

>> 
>> Signed-off-by: Wanpeng Li <liwanp@linux.vnet.ibm.com>
>
>Anyway
>Reviewed-by: Michal Hocko <mhocko@suse.cz>
>
>with a nit pick bellow
>
>> ---
>>  mm/page_alloc.c | 4 ++++
>>  1 file changed, 4 insertions(+)
>> 
>> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
>> index 98cbdf6..80474b2 100644
>> --- a/mm/page_alloc.c
>> +++ b/mm/page_alloc.c
>> @@ -6140,6 +6140,10 @@ __offline_isolated_pages(unsigned long start_pfn, unsigned long end_pfn)
>>  		list_del(&page->lru);
>>  		rmv_page_order(page);
>>  		zone->free_area[order].nr_free--;
>> +#ifdef CONFIG_HIGHMEM
>> +		if (PageHighMem(page))
>> +			totalhigh_pages -= 1 << order;
>> +#endif
>
>ifdef shouldn't be necessary as PageHighMem should default to false for
>!CONFIG_HIGHMEM AFAICS.
>
>>  		for (i = 0; i < (1 << order); i++)
>>  			SetPageReserved((page+i));
>>  		pfn += (1 << order);
>> -- 
>> 1.8.1.2
>> 
>> --
>> 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>
>
>-- 
>Michal Hocko
>SUSE Labs

--
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>

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 1/4] mm/memory-hotplug: fix lowmem count overflow when offline pages
  2013-05-22 10:49   ` Michal Hocko
  (?)
  (?)
@ 2013-05-22 23:38   ` Wanpeng Li
  -1 siblings, 0 replies; 22+ messages in thread
From: Wanpeng Li @ 2013-05-22 23:38 UTC (permalink / raw)
  To: Michal Hocko
  Cc: Andrew Morton, KAMEZAWA Hiroyuki, David Rientjes, Jiang Liu,
	Tang Chen, linux-mm, linux-kernel

On Wed, May 22, 2013 at 12:49:37PM +0200, Michal Hocko wrote:
>On Wed 22-05-13 17:29:27, Wanpeng Li wrote:
>> Logic memory-remove code fails to correctly account the Total High Memory 
>> when a memory block which contains High Memory is offlined as shown in the
>> example below. The following patch fixes it.
>> 
>> cat /proc/meminfo 
>> MemTotal:        7079452 kB
>> MemFree:         5805976 kB
>> Buffers:           94372 kB
>> Cached:           872000 kB
>> SwapCached:            0 kB
>> Active:           626936 kB
>> Inactive:         519236 kB
>> Active(anon):     180780 kB
>> Inactive(anon):   222944 kB
>> Active(file):     446156 kB
>> Inactive(file):   296292 kB
>> Unevictable:           0 kB
>> Mlocked:               0 kB
>> HighTotal:       7294672 kB
>> HighFree:        5181024 kB
>> LowTotal:       4294752076 kB
>> LowFree:          624952 kB
>
>Ok, so the HighTotal is higher than MemTotal but it would have been more
>straightforward to show number of HighTotal before hotremove, show how
>much memory has been removed and the number after.
>
>It is not clear which stable kernels need this fix as well.
>

THanks for your review, Michal, I will update soon. ;-)

>> 
>> Signed-off-by: Wanpeng Li <liwanp@linux.vnet.ibm.com>
>
>Anyway
>Reviewed-by: Michal Hocko <mhocko@suse.cz>
>
>with a nit pick bellow
>
>> ---
>>  mm/page_alloc.c | 4 ++++
>>  1 file changed, 4 insertions(+)
>> 
>> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
>> index 98cbdf6..80474b2 100644
>> --- a/mm/page_alloc.c
>> +++ b/mm/page_alloc.c
>> @@ -6140,6 +6140,10 @@ __offline_isolated_pages(unsigned long start_pfn, unsigned long end_pfn)
>>  		list_del(&page->lru);
>>  		rmv_page_order(page);
>>  		zone->free_area[order].nr_free--;
>> +#ifdef CONFIG_HIGHMEM
>> +		if (PageHighMem(page))
>> +			totalhigh_pages -= 1 << order;
>> +#endif
>
>ifdef shouldn't be necessary as PageHighMem should default to false for
>!CONFIG_HIGHMEM AFAICS.
>
>>  		for (i = 0; i < (1 << order); i++)
>>  			SetPageReserved((page+i));
>>  		pfn += (1 << order);
>> -- 
>> 1.8.1.2
>> 
>> --
>> 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>
>
>-- 
>Michal Hocko
>SUSE Labs

--
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>

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 4/4] mm/hugetlb: use already exist interface huge_page_shift
  2013-05-22 10:52     ` Michal Hocko
  (?)
  (?)
@ 2013-05-22 23:40     ` Wanpeng Li
  -1 siblings, 0 replies; 22+ messages in thread
From: Wanpeng Li @ 2013-05-22 23:40 UTC (permalink / raw)
  To: Michal Hocko
  Cc: Andrew Morton, KAMEZAWA Hiroyuki, David Rientjes, Jiang Liu,
	Tang Chen, linux-mm, linux-kernel

On Wed, May 22, 2013 at 12:52:46PM +0200, Michal Hocko wrote:
>On Wed 22-05-13 17:29:30, Wanpeng Li wrote:
>> Use already exist interface huge_page_shift instead of h->order + PAGE_SHIFT.
>
>alloc_bootmem_huge_page in powerpc uses the same construct so maybe you
>want to udpate that one as well.
>

I will add this, thanks Michal, ;-) 

>> 
>> Signed-off-by: Wanpeng Li <liwanp@linux.vnet.ibm.com>
>
>Reviewed-by: Michal Hocko <mhocko@suse.cz>
>
>> ---
>>  mm/hugetlb.c | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>> 
>> diff --git a/mm/hugetlb.c b/mm/hugetlb.c
>> index f8feeec..b6ff0ee 100644
>> --- a/mm/hugetlb.c
>> +++ b/mm/hugetlb.c
>> @@ -319,7 +319,7 @@ unsigned long vma_kernel_pagesize(struct vm_area_struct *vma)
>>  
>>  	hstate = hstate_vma(vma);
>>  
>> -	return 1UL << (hstate->order + PAGE_SHIFT);
>> +	return 1UL << huge_page_shift(hstate);
>>  }
>>  EXPORT_SYMBOL_GPL(vma_kernel_pagesize);
>>  
>> -- 
>> 1.8.1.2
>> 
>> --
>> 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>
>
>-- 
>Michal Hocko
>SUSE Labs

--
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>

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 4/4] mm/hugetlb: use already exist interface huge_page_shift
  2013-05-22 10:52     ` Michal Hocko
  (?)
@ 2013-05-22 23:40     ` Wanpeng Li
  -1 siblings, 0 replies; 22+ messages in thread
From: Wanpeng Li @ 2013-05-22 23:40 UTC (permalink / raw)
  To: Michal Hocko
  Cc: Andrew Morton, KAMEZAWA Hiroyuki, David Rientjes, Jiang Liu,
	Tang Chen, linux-mm, linux-kernel

On Wed, May 22, 2013 at 12:52:46PM +0200, Michal Hocko wrote:
>On Wed 22-05-13 17:29:30, Wanpeng Li wrote:
>> Use already exist interface huge_page_shift instead of h->order + PAGE_SHIFT.
>
>alloc_bootmem_huge_page in powerpc uses the same construct so maybe you
>want to udpate that one as well.
>

I will add this, thanks Michal, ;-) 

>> 
>> Signed-off-by: Wanpeng Li <liwanp@linux.vnet.ibm.com>
>
>Reviewed-by: Michal Hocko <mhocko@suse.cz>
>
>> ---
>>  mm/hugetlb.c | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>> 
>> diff --git a/mm/hugetlb.c b/mm/hugetlb.c
>> index f8feeec..b6ff0ee 100644
>> --- a/mm/hugetlb.c
>> +++ b/mm/hugetlb.c
>> @@ -319,7 +319,7 @@ unsigned long vma_kernel_pagesize(struct vm_area_struct *vma)
>>  
>>  	hstate = hstate_vma(vma);
>>  
>> -	return 1UL << (hstate->order + PAGE_SHIFT);
>> +	return 1UL << huge_page_shift(hstate);
>>  }
>>  EXPORT_SYMBOL_GPL(vma_kernel_pagesize);
>>  
>> -- 
>> 1.8.1.2
>> 
>> --
>> 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>
>
>-- 
>Michal Hocko
>SUSE Labs

--
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>

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [PATCH 1/4] mm/memory-hotplug: fix lowmem count overflow when offline pages
  2013-05-22 10:49   ` Michal Hocko
@ 2013-05-30  8:20     ` Michal Hocko
  -1 siblings, 0 replies; 22+ messages in thread
From: Michal Hocko @ 2013-05-30  8:20 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Wanpeng Li, KAMEZAWA Hiroyuki, David Rientjes, Jiang Liu,
	Tang Chen, linux-mm, linux-kernel

On Wed 22-05-13 12:49:37, Michal Hocko wrote:
> On Wed 22-05-13 17:29:27, Wanpeng Li wrote:
> > Logic memory-remove code fails to correctly account the Total High Memory 
> > when a memory block which contains High Memory is offlined as shown in the
> > example below. The following patch fixes it.
> > 
> > cat /proc/meminfo 
> > MemTotal:        7079452 kB
> > MemFree:         5805976 kB
> > Buffers:           94372 kB
> > Cached:           872000 kB
> > SwapCached:            0 kB
> > Active:           626936 kB
> > Inactive:         519236 kB
> > Active(anon):     180780 kB
> > Inactive(anon):   222944 kB
> > Active(file):     446156 kB
> > Inactive(file):   296292 kB
> > Unevictable:           0 kB
> > Mlocked:               0 kB
> > HighTotal:       7294672 kB
> > HighFree:        5181024 kB
> > LowTotal:       4294752076 kB
> > LowFree:          624952 kB
> 
> Ok, so the HighTotal is higher than MemTotal but it would have been more
> straightforward to show number of HighTotal before hotremove, show how
> much memory has been removed and the number after.
> 
> It is not clear which stable kernels need this fix as well.
> 
> > 
> > Signed-off-by: Wanpeng Li <liwanp@linux.vnet.ibm.com>
> 
> Anyway
> Reviewed-by: Michal Hocko <mhocko@suse.cz>
> 
> with a nit pick bellow
> 
> > ---
> >  mm/page_alloc.c | 4 ++++
> >  1 file changed, 4 insertions(+)
> > 
> > diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> > index 98cbdf6..80474b2 100644
> > --- a/mm/page_alloc.c
> > +++ b/mm/page_alloc.c
> > @@ -6140,6 +6140,10 @@ __offline_isolated_pages(unsigned long start_pfn, unsigned long end_pfn)
> >  		list_del(&page->lru);
> >  		rmv_page_order(page);
> >  		zone->free_area[order].nr_free--;
> > +#ifdef CONFIG_HIGHMEM
> > +		if (PageHighMem(page))
> > +			totalhigh_pages -= 1 << order;
> > +#endif

Hmm, it seems that my old gcc (4.3.4) doesn't like this.
mm/page_alloc.c:6202: error: lvalue required as left operand of assignment

I am not sure this is a compiler bug because PAGEFLAG_FALSE is clearly
returning 0 which should make the whole if a no-op... But maybe we
shouldn't be more clever than compiler.

Andrew, could you fold this follow up fix for
mm-memory-hotplug-fix-lowmem-count-overflow-when-offline-pages.patch

Sorr about the confusion I brought to this.
---
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 717286e..c164e5f 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -6198,8 +6198,10 @@ __offline_isolated_pages(unsigned long start_pfn, unsigned long end_pfn)
 		list_del(&page->lru);
 		rmv_page_order(page);
 		zone->free_area[order].nr_free--;
+#ifdef CONFIG_HIGHMEM
 		if (PageHighMem(page))
 			totalhigh_pages -= 1 << order;
+#endif
 		for (i = 0; i < (1 << order); i++)
 			SetPageReserved((page+i));
 		pfn += (1 << order);

-- 
Michal Hocko
SUSE Labs

^ permalink raw reply related	[flat|nested] 22+ messages in thread

* Re: [PATCH 1/4] mm/memory-hotplug: fix lowmem count overflow when offline pages
@ 2013-05-30  8:20     ` Michal Hocko
  0 siblings, 0 replies; 22+ messages in thread
From: Michal Hocko @ 2013-05-30  8:20 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Wanpeng Li, KAMEZAWA Hiroyuki, David Rientjes, Jiang Liu,
	Tang Chen, linux-mm, linux-kernel

On Wed 22-05-13 12:49:37, Michal Hocko wrote:
> On Wed 22-05-13 17:29:27, Wanpeng Li wrote:
> > Logic memory-remove code fails to correctly account the Total High Memory 
> > when a memory block which contains High Memory is offlined as shown in the
> > example below. The following patch fixes it.
> > 
> > cat /proc/meminfo 
> > MemTotal:        7079452 kB
> > MemFree:         5805976 kB
> > Buffers:           94372 kB
> > Cached:           872000 kB
> > SwapCached:            0 kB
> > Active:           626936 kB
> > Inactive:         519236 kB
> > Active(anon):     180780 kB
> > Inactive(anon):   222944 kB
> > Active(file):     446156 kB
> > Inactive(file):   296292 kB
> > Unevictable:           0 kB
> > Mlocked:               0 kB
> > HighTotal:       7294672 kB
> > HighFree:        5181024 kB
> > LowTotal:       4294752076 kB
> > LowFree:          624952 kB
> 
> Ok, so the HighTotal is higher than MemTotal but it would have been more
> straightforward to show number of HighTotal before hotremove, show how
> much memory has been removed and the number after.
> 
> It is not clear which stable kernels need this fix as well.
> 
> > 
> > Signed-off-by: Wanpeng Li <liwanp@linux.vnet.ibm.com>
> 
> Anyway
> Reviewed-by: Michal Hocko <mhocko@suse.cz>
> 
> with a nit pick bellow
> 
> > ---
> >  mm/page_alloc.c | 4 ++++
> >  1 file changed, 4 insertions(+)
> > 
> > diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> > index 98cbdf6..80474b2 100644
> > --- a/mm/page_alloc.c
> > +++ b/mm/page_alloc.c
> > @@ -6140,6 +6140,10 @@ __offline_isolated_pages(unsigned long start_pfn, unsigned long end_pfn)
> >  		list_del(&page->lru);
> >  		rmv_page_order(page);
> >  		zone->free_area[order].nr_free--;
> > +#ifdef CONFIG_HIGHMEM
> > +		if (PageHighMem(page))
> > +			totalhigh_pages -= 1 << order;
> > +#endif

Hmm, it seems that my old gcc (4.3.4) doesn't like this.
mm/page_alloc.c:6202: error: lvalue required as left operand of assignment

I am not sure this is a compiler bug because PAGEFLAG_FALSE is clearly
returning 0 which should make the whole if a no-op... But maybe we
shouldn't be more clever than compiler.

Andrew, could you fold this follow up fix for
mm-memory-hotplug-fix-lowmem-count-overflow-when-offline-pages.patch

Sorr about the confusion I brought to this.
---
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 717286e..c164e5f 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -6198,8 +6198,10 @@ __offline_isolated_pages(unsigned long start_pfn, unsigned long end_pfn)
 		list_del(&page->lru);
 		rmv_page_order(page);
 		zone->free_area[order].nr_free--;
+#ifdef CONFIG_HIGHMEM
 		if (PageHighMem(page))
 			totalhigh_pages -= 1 << order;
+#endif
 		for (i = 0; i < (1 << order); i++)
 			SetPageReserved((page+i));
 		pfn += (1 << order);

-- 
Michal Hocko
SUSE Labs

--
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>

^ permalink raw reply related	[flat|nested] 22+ messages in thread

end of thread, other threads:[~2013-05-30  8:20 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-05-22  9:29 [PATCH 1/4] mm/memory-hotplug: fix lowmem count overflow when offline pages Wanpeng Li
2013-05-22  9:29 ` Wanpeng Li
2013-05-22  9:29 ` [PATCH 2/4] mm/pageblock: remove get/set_pageblock_flags Wanpeng Li
2013-05-22  9:29   ` Wanpeng Li
2013-05-22 10:50   ` Michal Hocko
2013-05-22 10:50     ` Michal Hocko
2013-05-22  9:29 ` [PATCH 3/4] mm/hugetlb: remove hugetlb_prefault Wanpeng Li
2013-05-22  9:29   ` Wanpeng Li
2013-05-22 10:50   ` Michal Hocko
2013-05-22 10:50     ` Michal Hocko
2013-05-22  9:29 ` [PATCH 4/4] mm/hugetlb: use already exist interface huge_page_shift Wanpeng Li
2013-05-22  9:29   ` Wanpeng Li
2013-05-22 10:52   ` Michal Hocko
2013-05-22 10:52     ` Michal Hocko
2013-05-22 23:40     ` Wanpeng Li
2013-05-22 23:40     ` Wanpeng Li
2013-05-22 10:49 ` [PATCH 1/4] mm/memory-hotplug: fix lowmem count overflow when offline pages Michal Hocko
2013-05-22 10:49   ` Michal Hocko
2013-05-22 23:38   ` Wanpeng Li
2013-05-22 23:38   ` Wanpeng Li
2013-05-30  8:20   ` Michal Hocko
2013-05-30  8:20     ` Michal Hocko

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.