Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp1282181ybz; Wed, 29 Apr 2020 18:49:56 -0700 (PDT) X-Google-Smtp-Source: APiQypIBqhTK5l5g9S9FwlN21Bwv7vzCwDYzLL+Qt/683R3KRLKwb5Luslzr3tLWhYjv8iu3HZth X-Received: by 2002:a17:906:7809:: with SMTP id u9mr503158ejm.233.1588211396722; Wed, 29 Apr 2020 18:49:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588211396; cv=none; d=google.com; s=arc-20160816; b=rFsP4fzWZZF9GGwxykKwevj4EScmp3V5z0kklTwuKAXKRokA6qIILuMTcR5ttkUrS7 0D78gl3OR1Xq4nFhWT/cssRcDrgZ5+SK52Cmo/KbvU1aUCRHJtQtEZ2VamaZY3hzM9Zl GDuNyzeGZ9f7AgZp7DnpwMsPa9Khrihz5P5+IkOK8Fe1fCxCVEvTEKzMfi31GGav4ige 7CWRDnsm5G+KNcZIFftXUBzXIOHy76cAIdblLmAKJzOZcty8PW1L6oIKEhwywFychSpJ GhJ7sPE5pOt4u2cX7CvukX9L/c0F2ImnFivhBVhYwDrGeO6ESkHkxYdDq5JD4XZ80DZ0 aRYA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:subject:cc:to:from:date :dkim-signature; bh=BPNuGXCBxBneWpqXuQAER5BCj/ScEHqq83i7SNX2XDE=; b=ts9nc8iF8TKArxlWXE4GRPvoJYLhmhG/fG3sq+F3GT/+nNyirLmGKRiT5i11Ela/Fa Wtyy38gnFqVACZsHMQZpMfKklCcTh/tmOZOm4j4r12I3GmICL0AVAOdMscTU7gi6A+kP Uy8XpnRpf8rlnYA1uGr7VIMDbZC8fLNDkBUlYe90MJt3urkggNVPSAxRpaW9rHt3cBPN Ey2iycI1P5PVbQa88UkiYZRGhgschIUzNMZoviGoscrbLRmTQKzNSbMh17GoFtMMBDHa zxH3kiprruzsD3GPtB2+HUpg0U2qGaUjClizyAeNvrKOVZqgenqG6uPnk+FWSgT4lEmv fzGw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=BMIZZjwZ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ot21si5035151ejb.351.2020.04.29.18.49.33; Wed, 29 Apr 2020 18:49:56 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=BMIZZjwZ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726758AbgD3BrP (ORCPT + 99 others); Wed, 29 Apr 2020 21:47:15 -0400 Received: from mail.kernel.org ([198.145.29.99]:35690 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726420AbgD3BrO (ORCPT ); Wed, 29 Apr 2020 21:47:14 -0400 Received: from localhost.localdomain (c-73-231-172-41.hsd1.ca.comcast.net [73.231.172.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id F060A2082E; Thu, 30 Apr 2020 01:47:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1588211232; bh=omj+Wnlw7nrRcI7M/Sus+jSIgGuuMMuRYU8ep5SG4rc=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=BMIZZjwZjEHD4ivp8c4hXb9ANAbU7d0Mf0Ecu206TErFrGRBjAHnf1aPsfNc8TksK 0rQnIb5MLOUk2uwIuoTKS9cS/r3CIBAemt/w9hGpWKO1QOksxWh/kKOP0WadlNepGR 76JQmcDAPB6vR65CIJlOU/liyBjc6q/5xghTPSpA= Date: Wed, 29 Apr 2020 18:47:11 -0700 From: Andrew Morton To: js1304@gmail.com Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Vlastimil Babka , Laura Abbott , "Aneesh Kumar K . V" , Mel Gorman , Michal Hocko , Johannes Weiner , Roman Gushchin , Minchan Kim , Rik van Riel , Christian Koenig , Huang Rui , Eric Biederman , "Rafael J . Wysocki" , Pavel Machek , kernel-team@lge.com, Christoph Hellwig , Joonsoo Kim Subject: Re: [PATCH v2 00/10] change the implementation of the PageHighMem() Message-Id: <20200429184711.9d603da097fdea80f574f1f1@linux-foundation.org> In-Reply-To: <1588130803-20527-1-git-send-email-iamjoonsoo.kim@lge.com> References: <1588130803-20527-1-git-send-email-iamjoonsoo.kim@lge.com> X-Mailer: Sylpheed 3.5.1 (GTK+ 2.24.31; x86_64-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, 29 Apr 2020 12:26:33 +0900 js1304@gmail.com wrote: > From: Joonsoo Kim > > Changes on v2 > - add "acked-by", "reviewed-by" tags > - replace PageHighMem() with use open-code, instead of using > new PageHighMemZone() macro. Related file is "include/linux/migrate.h" > > Hello, > > This patchset separates two use cases of PageHighMem() by introducing > PageHighMemZone() macro. And, it changes the implementation of > PageHighMem() to reflect the actual meaning of this macro. This patchset > is a preparation step for the patchset, > "mm/cma: manage the memory of the CMA area by using the ZONE_MOVABLE" [1]. > > PageHighMem() is used for two different cases. One is to check if there > is a direct mapping for this page or not. The other is to check the > zone of this page, that is, weather it is the highmem type zone or not. > > Until now, both the cases are the perfectly same thing. So, implementation > of the PageHighMem() uses the one case that checks if the zone of the page > is the highmem type zone or not. > > "#define PageHighMem(__p) is_highmem_idx(page_zonenum(__p))" > > ZONE_MOVABLE is special. It is considered as normal type zone on > !CONFIG_HIGHMEM, but, it is considered as highmem type zone > on CONFIG_HIGHMEM. Let's focus on later case. In later case, all pages > on the ZONE_MOVABLE has no direct mapping until now. > > However, following patchset > "mm/cma: manage the memory of the CMA area by using the ZONE_MOVABLE" > , which is once merged and reverted, will be tried again and will break > this assumption that all pages on the ZONE_MOVABLE has no direct mapping. > Hence, the ZONE_MOVABLE which is considered as highmem type zone could > have the both types of pages, direct mapped and not. Since > the ZONE_MOVABLE could have both type of pages, __GFP_HIGHMEM is still > required to allocate the memory from it. And, we conservatively need to > consider the ZONE_MOVABLE as highmem type zone. > > Even in this situation, PageHighMem() for the pages on the ZONE_MOVABLE > when it is called for checking the direct mapping should return correct > result. Current implementation of PageHighMem() just returns TRUE > if the zone of the page is on a highmem type zone. So, it could be wrong > if the page on the MOVABLE_ZONE is actually direct mapped. > > To solve this potential problem, this patch introduces a new > PageHighMemZone() macro. In following patches, two use cases of > PageHighMem() are separated by calling proper macro, PageHighMem() and > PageHighMemZone(). Then, implementation of PageHighMem() will be changed > as just checking if the direct mapping exists or not, regardless of > the zone of the page. > > Note that there are some rules to determine the proper macro. > > 1. If PageHighMem() is called for checking if the direct mapping exists > or not, use PageHighMem(). > 2. If PageHighMem() is used to predict the previous gfp_flags for > this page, use PageHighMemZone(). The zone of the page is related to > the gfp_flags. > 3. If purpose of calling PageHighMem() is to count highmem page and > to interact with the system by using this count, use PageHighMemZone(). > This counter is usually used to calculate the available memory for an > kernel allocation and pages on the highmem zone cannot be available > for an kernel allocation. > 4. Otherwise, use PageHighMemZone(). It's safe since it's implementation > is just copy of the previous PageHighMem() implementation and won't > be changed. hm, this won't improve maintainability :( - Everyone will need to remember when to use PageHighMem() and when to use PageHighMemZone(). If they get it wrong, they're unlikely to notice any problem in their runtime testing, correct? - New code will pop up which gets it wrong and nobody will notice for a long time. So I guess we need to be pretty confident that the series "mm/cma: manage the memory of the CMA area by using the ZONE_MOVABLE" will be useful and merged before proceeding with this, yes? On the other hand, this whole series is a no-op until [10/10] (correct?) so it can be effectively reverted with a single line change, with later cleanups which revert the other 9 patches. So I think I'd like to take another look at "mm/cma: manage the memory of the CMA area by using the ZONE_MOVABLE" before figuring out what to do here. Mainly to answer the question "is the new feature valuable enough to justify the maintainability impact". So please do take some care in explaining the end-user benefit when preparing the new version of that patchset.