Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755742AbcCWOrv (ORCPT ); Wed, 23 Mar 2016 10:47:51 -0400 Received: from mx2.suse.de ([195.135.220.15]:35042 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753574AbcCWOru (ORCPT ); Wed, 23 Mar 2016 10:47:50 -0400 Subject: Re: [PATCH 4/6] mm/vmstat: add zone range overlapping check To: js1304@gmail.com, Andrew Morton References: <1457940697-2278-1-git-send-email-iamjoonsoo.kim@lge.com> <1457940697-2278-5-git-send-email-iamjoonsoo.kim@lge.com> Cc: Rik van Riel , Johannes Weiner , Mel Gorman , Laura Abbott , Minchan Kim , Marek Szyprowski , Michal Nazarewicz , "Aneesh Kumar K.V" , linux-mm@kvack.org, linux-kernel@vger.kernel.org, "Rafael J. Wysocki" , Joonsoo Kim From: Vlastimil Babka Message-ID: <56F2AC92.9070600@suse.cz> Date: Wed, 23 Mar 2016 15:47:46 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.7.0 MIME-Version: 1.0 In-Reply-To: <1457940697-2278-5-git-send-email-iamjoonsoo.kim@lge.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1682 Lines: 56 On 03/14/2016 08:31 AM, js1304@gmail.com wrote: > From: Joonsoo Kim > > There is a system that node's pfn are overlapped like as following. > > -----pfn--------> > N0 N1 N2 N0 N1 N2 > > Therefore, we need to care this overlapping when iterating pfn range. > > There are two places in vmstat.c that iterates pfn range and > they don't consider this overlapping. Add it. > > Without this patch, above system could over count pageblock number > on a zone. > > Signed-off-by: Joonsoo Kim > --- > mm/vmstat.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/mm/vmstat.c b/mm/vmstat.c > index 5e43004..0a726e3 100644 > --- a/mm/vmstat.c > +++ b/mm/vmstat.c > @@ -1010,6 +1010,9 @@ static void pagetypeinfo_showblockcount_print(struct seq_file *m, > if (!memmap_valid_within(pfn, page, zone)) > continue; The above already does this for each page within the block, but it's guarded by CONFIG_ARCH_HAS_HOLES_MEMORYMODEL. I guess that's not the case of your system, right? I guess your added check should go above this, though. Also what about employing pageblock_pfn_to_page() here and in all other applicable places, so it's unified and optimized by zone->contiguous? > > + if (page_zone(page) != zone) > + continue; > + > mtype = get_pageblock_migratetype(page); > > if (mtype < MIGRATE_TYPES) > @@ -1076,6 +1079,10 @@ static void pagetypeinfo_showmixedcount_print(struct seq_file *m, > continue; > > page = pfn_to_page(pfn); > + > + if (page_zone(page) != zone) > + continue; > + > if (PageBuddy(page)) { > pfn += (1UL << page_order(page)) - 1; > continue; >