(5/26/13 8:02 PM), Wanpeng Li wrote: > On Sun, May 26, 2013 at 07:49:33AM -0400, KOSAKI Motohiro wrote: >> On Sun, May 26, 2013 at 1:58 AM, Wanpeng Li <liwanp@xxxxxxxxxxxxxxxxxx> wrote: >>> Changelog: >>> v1 -> v2: >>> * show number of HighTotal before hotremove >>> * remove CONFIG_HIGHMEM >>> * cc stable kernels >>> * add Michal reviewed-by >>> >>> 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. >>> >>> Stable for 2.6.24+. >>> >>> Before logic memory remove: >>> >>> MemTotal: 7603740 kB >>> MemFree: 6329612 kB >>> Buffers: 94352 kB >>> Cached: 872008 kB >>> SwapCached: 0 kB >>> Active: 626932 kB >>> Inactive: 519216 kB >>> Active(anon): 180776 kB >>> Inactive(anon): 222944 kB >>> Active(file): 446156 kB >>> Inactive(file): 296272 kB >>> Unevictable: 0 kB >>> Mlocked: 0 kB >>> HighTotal: 7294672 kB >>> HighFree: 5704696 kB >>> LowTotal: 309068 kB >>> LowFree: 624916 kB >>> >>> After logic memory remove: >>> >>> 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 >>> >>> Reviewed-by: Michal Hocko <mhocko@xxxxxxx> >>> Signed-off-by: Wanpeng Li <liwanp@xxxxxxxxxxxxxxxxxx> >>> --- >>> mm/page_alloc.c | 2 ++ >>> 1 file changed, 2 insertions(+) >>> >>> diff --git a/mm/page_alloc.c b/mm/page_alloc.c >>> index 98cbdf6..23b921f 100644 >>> --- a/mm/page_alloc.c >>> +++ b/mm/page_alloc.c >>> @@ -6140,6 +6140,8 @@ __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--; >>> + if (PageHighMem(page)) >>> + totalhigh_pages -= 1 << order; >>> for (i = 0; i < (1 << order); i++) >>> SetPageReserved((page+i)); >>> pfn += (1 << order); >> >> Hm. I already NAKed and you didn't answered my question. isn't it? > > Jiang makes his effort to support highmem for memory hotremove, he also > fix this bug, http://marc.info/?l=linux-mm&m=136957578620221&w=2 OK, go ahead. -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html