From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id C851EC0219E for ; Wed, 12 Feb 2025 07:12:00 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 42478280014; Wed, 12 Feb 2025 02:12:00 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 3AC32280012; Wed, 12 Feb 2025 02:12:00 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 27320280014; Wed, 12 Feb 2025 02:12:00 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 09B74280012 for ; Wed, 12 Feb 2025 02:12:00 -0500 (EST) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 9EEF080EED for ; Wed, 12 Feb 2025 07:11:59 +0000 (UTC) X-FDA: 83110423158.11.5A05E9B Received: from mailgw.kylinos.cn (mailgw.kylinos.cn [124.126.103.232]) by imf17.hostedemail.com (Postfix) with ESMTP id A011A4000B for ; Wed, 12 Feb 2025 07:11:56 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=none; spf=pass (imf17.hostedemail.com: domain of liuye@kylinos.cn designates 124.126.103.232 as permitted sender) smtp.mailfrom=liuye@kylinos.cn; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739344317; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=KM1gBnI2mJ3ROTUiTHthYEt8YNaLoyISGLqrz8EAQWA=; b=nS9Mj/1ivZtiTlJA/3VfHJuUpDuYzHl8S/+GIXHlYQbbwM4M4s2DnXUaIzmWWwBBZ9367h dkQYJv4q/b0WG/besKPA/24cEjbQcUwkFwsNet8/7Z1a+RuE49YeFV/cEKYoVHu8TXzqWG 9uwSBB+y/ga7RazkJ7QbuhHrg7RczRs= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=none; spf=pass (imf17.hostedemail.com: domain of liuye@kylinos.cn designates 124.126.103.232 as permitted sender) smtp.mailfrom=liuye@kylinos.cn; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739344317; a=rsa-sha256; cv=none; b=NrdXosz1k5KTERygZR9DtS1uu4/SR5evl7gyoA0XMzBJemzYy75JOhQN1z8lc8gdqcAn2o HMRv9xoidj279me1pzuw6EP0f69TlvOyQyt3JKIUy6XnlpO/5JJwBm39Z+5cdgu2Ei0DwT NvIXBaX7QlF0RHLp0QEMeGURk3Tqu2U= X-UUID: a1774a2ae91011efa216b1d71e6e1362-20250212 X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.1.45,REQID:638f534e-e92e-4ec0-86e3-0b026c1322ba,IP:0,U RL:0,TC:0,Content:0,EDM:0,RT:0,SF:-5,FILE:0,BULK:0,RULE:Release_Ham,ACTION :release,TS:-5 X-CID-INFO: VERSION:1.1.45,REQID:638f534e-e92e-4ec0-86e3-0b026c1322ba,IP:0,URL :0,TC:0,Content:0,EDM:0,RT:0,SF:-5,FILE:0,BULK:0,RULE:Release_Ham,ACTION:r elease,TS:-5 X-CID-META: VersionHash:6493067,CLOUDID:b2009f6d2ef2126a1645f1d817ca7c41,BulkI D:250212131311UOV0929M,BulkQuantity:3,Recheck:0,SF:17|19|38|64|66|78|80|81 |82|83|102|841,TC:nil,Content:0|52,EDM:-3,IP:nil,URL:0,File:nil,RT:nil,Bul k:40,QS:nil,BEC:nil,COL:0,OSI:0,OSA:0,AV:0,LES:1,SPR:NO,DKR:0,DKP:0,BRR:0, BRE:0,ARC:0 X-CID-BVR: 0 X-CID-BAS: 0,_,0,_ X-CID-FACTOR: TF_CID_SPAM_SNR,TF_CID_SPAM_FAS,TF_CID_SPAM_FSD X-UUID: a1774a2ae91011efa216b1d71e6e1362-20250212 X-User: liuye@kylinos.cn Received: from [172.30.70.73] [(10.44.16.150)] by mailgw.kylinos.cn (envelope-from ) (Generic MTA with TLSv1.3 TLS_AES_128_GCM_SHA256 128/128) with ESMTP id 2105293162; Wed, 12 Feb 2025 15:11:50 +0800 Message-ID: Date: Wed, 12 Feb 2025 15:11:47 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 2/2] mm/mm.h: Write folio->_flags_1 & 0xff as a macro definition To: Shivank Garg , brauner@kernel.org, dhowells@redhat.com, akpm@linux-foundation.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org References: <20250212025843.80283-1-liuye@kylinos.cn> <20250212025843.80283-3-liuye@kylinos.cn> <50f02ce2-85f8-4dda-b3c4-ad3f20f8b9a2@amd.com> Content-Language: en-US From: liuye In-Reply-To: <50f02ce2-85f8-4dda-b3c4-ad3f20f8b9a2@amd.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Queue-Id: A011A4000B X-Stat-Signature: g433i7iiufeq6pc1kekccy737hyozftx X-Rspamd-Server: rspam03 X-HE-Tag: 1739344316-287738 X-HE-Meta: U2FsdGVkX1/ZBM79KwJF8We9zUYR5UzLN+vTzLttSM9HNdnE+opfPObX0Ijpjks0ELus87qwcFePYhHsX15BJ6PzPprb6U/pESre28ayXhDrnCGViEH+dXpx3S8QRz7gg29EbDYXPRVAOsqBr45kMkq/1XXC60IiIzblKnoplbqP62t4Wt6ngFWcEY+VFLxcCbwRwccyfdOULNbYkPVT1cNhyHr/Wz/x7EiEEEzLxOfy+Nr4vg9a1jyS+bQWpbztVCYVs4mpMrfQgFbR8Syd0xJNpmaEWK+W3UzhKTdkhr/yvGp6NnalRjxzL+dFVV6WNxwfrLp6uloTdNHSBxyAjByd/q8QpjswzBR50QlmN7mN+685pp0otTLj9VMt7UrnzRgK9qVkJJnJJRwhorb297E/OZi+xm5/JMj6DrSHlga4FYJGjWDveT/Ktd1LQZHvu04N4OHlLAhltyEGS3O0IShZc7dsC3LXMnghvqnOx1D2HvBO0oSf810SsrPynzZULXlhssi74ZbO75T0+sU7qMsUwB3hhzuXuAWD4OcShGsGwXfhqLu1bAD/YJZFvVLhuxdLDhkto3SJ5Y5iJbeCkFyAmc6l65PwaxpFAlzGULkCeCnkzctLASeIdApW+ytd3gFQAT/VuO31avam/E/Zn85kjnpA7pPjX42PYNRqkoC3FRkcwYjfsjw0+tPT4ySvO+tqMmtaxamTEicGB/13iXX1U6xbKGm5h9X1r8LaBjuqBVPHfsJXHrbFYknmxsidELwiiN9BxLylAxSdNMBsz4u9jQ7Tcw/rd4NbEtEO5keGEMh6P9b7m5wuAELM9ImsHh8+1Hu/dnVkCSwJp2OHzuutBTKj/HZmP2JHOIpwY2C0cxhQs+y5aRq7blP6BMmxxKnbF1P1TslfMMGTmzKyWqx1lBVq9RUyLgtAwsmxs497wVqkkgGIbIdiYzg8jr2UyNUoBwDnvHAFwJopRWL H1jUbCvw fuGq94ESVZ0yW+xH8FMnCiK0JrJQ9Ns/BxjsBB++pT9/NnH2StxbuC0FY6f0ZQe5t0/nLGiBS6pLoKmH0xzuAKWugHsnxf6IV9meuMqh/nr8/Ir39WSFJTfdCQM6SyxJaKdMZltzb81IYFKu1XIPD48n7KFBRb8uuEl32 X-Bogosity: Ham, tests=bogofilter, spamicity=0.001140, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: 在 2025/2/12 13:40, Shivank Garg 写道: > On 2/12/2025 8:28 AM, Liu Ye wrote: >> There are multiple locations in mm.h where (folio->_flags_1 & 0xff) is >> used. Write it as a macro definition to improve the readability and >> maintainability of the code. >> >> Signed-off-by: Liu Ye >> --- >> include/linux/mm.h | 10 ++++++---- >> 1 file changed, 6 insertions(+), 4 deletions(-) >> >> diff --git a/include/linux/mm.h b/include/linux/mm.h >> index 7b1068ddcbb7..750e75f45557 100644 >> --- a/include/linux/mm.h >> +++ b/include/linux/mm.h >> @@ -1098,6 +1098,8 @@ int vma_is_stack_for_current(struct vm_area_struct *vma); >> struct mmu_gather; >> struct inode; >> >> +#define FOLIO_ORDER(folio) ((folio)->_flags_1 & 0xff) > > This folio order calculation is only valid for !large folios. > When it's a single page (not a large folio), the memory is interpreted as struct page. > > struct folio { > ... > union { > struct { > unsigned long _flags_1; > unsigned long _head_1; > /* public: */ > atomic_t _large_mapcount; > atomic_t _entire_mapcount; > atomic_t _nr_pages_mapped; > atomic_t _pincount; > #ifdef CONFIG_64BIT > unsigned int _folio_nr_pages; > #endif > /* private: the union with struct page is transitional */ > }; > struct page __page_1; > }; > ... > } > > I feel this to be risky, considering someone may directly use FOLIO_ORDER() macro > without folio_test_large() check. > > Correct macro should look like: > > #define FOLIO_ORDER(folio) (folio_test_large(folio) ? ((folio)->_flags_1 & 0xff) : 0) > Yes, this is safer. At present, the positions using FOLIO-ORDER have been checked using folio_test_1arge or test-bit (PG_cead,&folio ->flags), and these positions may need to be simplified. > > Thanks, > Shivank >> + >> /* >> * compound_order() can be called without holding a reference, which means >> * that niceties like page_folio() don't work. These callers should be >> @@ -1111,7 +1113,7 @@ static inline unsigned int compound_order(struct page *page) >> >> if (!test_bit(PG_head, &folio->flags)) >> return 0; >> - return folio->_flags_1 & 0xff; >> + return FOLIO_ORDER(folio); >> } >> >> /** >> @@ -1127,7 +1129,7 @@ static inline unsigned int folio_order(const struct folio *folio) >> { >> if (!folio_test_large(folio)) >> return 0; >> - return folio->_flags_1 & 0xff; >> + return FOLIO_ORDER(folio); >> } >> >> #include >> @@ -2061,7 +2063,7 @@ static inline long folio_nr_pages(const struct folio *folio) >> #ifdef CONFIG_64BIT >> return folio->_folio_nr_pages; >> #else >> - return 1L << (folio->_flags_1 & 0xff); >> + return 1L << FOLIO_ORDER(folio); >> #endif >> } >> >> @@ -2086,7 +2088,7 @@ static inline unsigned long compound_nr(struct page *page) >> #ifdef CONFIG_64BIT >> return folio->_folio_nr_pages; >> #else >> - return 1L << (folio->_flags_1 & 0xff); >> + return 1L << FOLIO_ORDER(folio); >> #endif >> } >> >