From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752376AbdCCTn2 (ORCPT ); Fri, 3 Mar 2017 14:43:28 -0500 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:37779 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752345AbdCCTn1 (ORCPT ); Fri, 3 Mar 2017 14:43:27 -0500 Subject: Re: [patch] mm, zoneinfo: print non-populated zones To: David Rientjes , Andrew Morton References: Cc: Vlastimil Babka , Mel Gorman , Johannes Weiner , linux-kernel@vger.kernel.org, linux-mm@kvack.org From: Anshuman Khandual Date: Fri, 3 Mar 2017 19:05:53 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.5.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 17030313-0052-0000-0000-0000021E6FA2 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17030313-0053-0000-0000-000007E51956 Message-Id: <4acf16c5-c64b-b4f8-9a41-1926eed23fe1@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-03-03_10:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1702020001 definitions=main-1703030130 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 03/03/2017 04:56 AM, David Rientjes wrote: > Initscripts can use the information (protection levels) from > /proc/zoneinfo to configure vm.lowmem_reserve_ratio at boot. > > vm.lowmem_reserve_ratio is an array of ratios for each configured zone on > the system. If a zone is not populated on an arch, /proc/zoneinfo > suppresses its output. > > This results in there not being a 1:1 mapping between the set of zones > emitted by /proc/zoneinfo and the zones configured by > vm.lowmem_reserve_ratio. > > This patch shows statistics for non-populated zones in /proc/zoneinfo. > The zones exist and hold a spot in the vm.lowmem_reserve_ratio array. > Without this patch, it is not possible to determine which index in the > array controls which zone if one or more zones on the system are not > populated. Right, its a problem when it does not even display array elements with an index value associated with it. But changing the array display will break the interface where as displaying non populated zones in the /proc/zoneinfo does not break anything. > > Remaining users of walk_zones_in_node() are unchanged. Files such as > /proc/pagetypeinfo require certain zone data to be initialized properly > for display, which is not done for unpopulated zones. > > Signed-off-by: David Rientjes > --- > mm/vmstat.c | 22 +++++++++++++--------- > 1 file changed, 13 insertions(+), 9 deletions(-) > > diff --git a/mm/vmstat.c b/mm/vmstat.c > --- a/mm/vmstat.c > +++ b/mm/vmstat.c > @@ -1121,8 +1121,12 @@ static void frag_stop(struct seq_file *m, void *arg) > { > } > > -/* Walk all the zones in a node and print using a callback */ > +/* > + * Walk zones in a node and print using a callback. > + * If @populated is true, only use callback for zones that are populated. > + */ > static void walk_zones_in_node(struct seq_file *m, pg_data_t *pgdat, > + bool populated, > void (*print)(struct seq_file *m, pg_data_t *, struct zone *)) > { > struct zone *zone; > @@ -1130,7 +1134,7 @@ static void walk_zones_in_node(struct seq_file *m, pg_data_t *pgdat, > unsigned long flags; > > for (zone = node_zones; zone - node_zones < MAX_NR_ZONES; ++zone) { > - if (!populated_zone(zone)) > + if (populated && !populated_zone(zone)) The name of the Boolean "populated" is bit misleading IMHO. What I think you want here is to invoke the callback if the zone is populated as well as this variable is true. The variable can be named something like 'assert_populated'.