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 BF81FC35FFF for ; Fri, 21 Mar 2025 05:59:54 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 01833280002; Fri, 21 Mar 2025 01:59:54 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id F09A9280001; Fri, 21 Mar 2025 01:59:53 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DF9A0280002; Fri, 21 Mar 2025 01:59:53 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id C3350280001 for ; Fri, 21 Mar 2025 01:59:53 -0400 (EDT) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id A45F7C209D for ; Fri, 21 Mar 2025 05:59:53 +0000 (UTC) X-FDA: 83244507066.28.453CDF7 Received: from out-170.mta1.migadu.com (out-170.mta1.migadu.com [95.215.58.170]) by imf16.hostedemail.com (Postfix) with ESMTP id AF4CE180008 for ; Fri, 21 Mar 2025 05:59:51 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=T90ybZgH; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf16.hostedemail.com: domain of ye.liu@linux.dev designates 95.215.58.170 as permitted sender) smtp.mailfrom=ye.liu@linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742536792; a=rsa-sha256; cv=none; b=Kob3h3r3mF31Lm8BkQfFfP93Bpb70JP0WcvTxWlyvcrAPq+VleCNhPBik+yVSOYP/MoNAE P9vSqJOtSMPFkfDTKf8N/JwRwAX31WBV7cWATjkI0Nsga2e+3L1cGpoE1r5UD4h8znWgX7 9qCIXupRqtvpQubAZ2+B1gmxKMQxUNE= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=T90ybZgH; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf16.hostedemail.com: domain of ye.liu@linux.dev designates 95.215.58.170 as permitted sender) smtp.mailfrom=ye.liu@linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742536792; 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:dkim-signature; bh=BkqHjZgI7wlamaIPE8JerqKos0bZ+qhyqzjC0Lk4oPM=; b=vuu4bZ2iLDG7CXzh8trXXzUc64ljBFEkVfKJ4M+UCqm2V52SUfM7vtQfN6tQeTsdGvwd60 tnNL1qHupqwCbVarlLvd5DgKpun75j1SbxytVecMxBWwNQ9EjJ/nHHyJTV4WDuB7EkU1yK MoLtNiHeUY0FMJFZDbloVbcuV93Q41c= Message-ID: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1742536789; h=from:from: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=BkqHjZgI7wlamaIPE8JerqKos0bZ+qhyqzjC0Lk4oPM=; b=T90ybZgHo9zb7zbPOI4gDs5AnxTrSgIjrwGEBeustIyACHEB6Zg17SYxMqdOYp0VIp8gBH xuvgFmT+VGo5iI2F/sEctW5sszmasZ5y/BwEhBgMRH30M2tVGBkph0tqrP6Sq0BQ5VqVDS IyP0LR+eTESw7xB2AqIz9uOreI4A9kQ= Date: Fri, 21 Mar 2025 13:59:42 +0800 MIME-Version: 1.0 Subject: Re: [PATCH] mm/page_alloc: Consolidate unlikely handling in page_expected_state To: Anshuman Khandual , akpm@linux-foundation.org Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Ye Liu References: <20250321011304.549908-1-ye.liu@linux.dev> Content-Language: en-US X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Ye Liu In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Migadu-Flow: FLOW_OUT X-Rspamd-Queue-Id: AF4CE180008 X-Stat-Signature: qf3tnrxurgtps7bo9jo9xqqpy3wuptuu X-Rspam-User: X-Rspamd-Server: rspam06 X-HE-Tag: 1742536791-542217 X-HE-Meta: U2FsdGVkX1/GgRjl5+LmdxZQavKll8eZi6nS63hdNMadSZZREo0dfGxBJLimfY6+auIhAdQFOP6TbZcWCi45/wRjOdnzl6xxFb0JrbxH15iwau9f84uzWHXYngBrZ88a7PEOSTUfJSogw9FGxOaxc6bspQPJJueZqGWZNxyHXe9O7POh+wmjHAG3R4o6nwNk8cLBmYpMMPxhwSZ7fGhES2Ncb0Z84fOljBuROViyzLNwoJTvmhkDXRuz8InM5SDqzBx4YGrrkUlLZ8sOXqHBBIgdOoxKf9wx5xSN07oXbDONm4ims3xChEr5sq3cR+dPMw4FU5TRzF5//BwNYI1Lq1V+hPDFOHx0hvyY6C8pd7fANwFV8dNewgO4uQUEP67n90I6MEQiWmC1iDYPWW9huLjUzFYosV1iMN2mJfrJ3tArPOCFKgg7oEkyPRcU/67/RCMoo9q40utnw5+yJ8NAmNAMGsTlXwEGp3SVcd4eBpOHKqQ9LU4GJ5DPZtScJCZaiRO1vJwPQydHBRkfqUSpoZEWDpFiAmxBF5UASswbX4bD5EwNsCsihbP3swE1bsTHm0eLppIGmYhPOl3owTJt2QvHVCXDtkAinsWmy3wZ5fP6cT4Qv1i9KgB+4Gj6OHUynvM57wCELEY7aYWexBxl1CRTvxrLQSL8LkkItJUaLaciXYjr2PRvl5Oc5RZPdZxTB+IvpkTwy8vNGu51dHSQx97BCz6PaJz1Pg9Ot1Mn0dQLNiQyUKCzqASXMOtADzFORkN1i5huVoeGbpToI3SzJpWgGSyDG8JwKm1TI2VsSdNoJ/pIr/1D5/GPYrJAXSZ5TgJrRYkZJD4oAnOtJTf7JMdUMMNTPjZndTELXH4ZW0WhuWzi51SXwL9Er5bzGdYveLewnM1dI5mB1VevKClcAjuxKjv3RXU6r7TzM7GMAjJde0HrRTSr5pLOQtSgTkYib4G9fSyBGWe1CR1DC3t e/lEqsBp SaMHfMRc3ZiTzx0O4dp/KM6oH+jAk+1Bq940Dz4uPf4DIgA880Yt3OoQfBbLUz3bmm/TEXX/aNdAMdPSJwzJaJ0bSww0KuTE3jaJrWhAK+cbjAtsfma6miWEnEf02ExBU6XpkoD+fiNP5V0vS/CNlwV95sdU72YZgq3z+87PJG9nO1BEsJ9mHIKloUc8AQbvkuGZTtyMikn6JPsVtKXeVOY3B2duZSddUdiaqz9Q8OBXxE8Tsv2txC5MwkarVys45UPE5 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, 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/3/21 13:40, Anshuman Khandual 写道: > > On 3/21/25 06:43, Ye Liu wrote: >> From: Ye Liu >> >> This patch consolidates the handling of unlikely conditions in the >> page_expected_state function, reducing code duplication and improving >> readability. >> >> Previously, the check_new_page_bad function contained logic to handle >> __PG_HWPOISON flags, which was called from check_new_page. This patch >> moves the handling of __PG_HWPOISON flags into the page_expected_state >> function and removes the check_new_page_bad function. The check_new_page >> function now directly calls bad_page if the page has unexpected flags. >> >> This change simplifies the code by reducing the number of functions and >> centralizing the unlikely condition handling in one place. >> >> Signed-off-by: Ye Liu >> --- >> mm/page_alloc.c | 26 ++++++++++---------------- >> 1 file changed, 10 insertions(+), 16 deletions(-) >> >> diff --git a/mm/page_alloc.c b/mm/page_alloc.c >> index 2842da893eea..d8d04ac1d709 100644 >> --- a/mm/page_alloc.c >> +++ b/mm/page_alloc.c >> @@ -892,6 +892,13 @@ static inline bool page_expected_state(struct page *page, >> if (unlikely(atomic_read(&page->_mapcount) != -1)) >> return false; >> >> + if (unlikely(PageHWPoison(page))) { >> + /* Don't complain about hwpoisoned pages */ >> + if (PageBuddy(page)) >> + __ClearPageBuddy(page); >> + return false; > Should this be return 'true' instead ? > > Let's consider a scenario where PageHWPoison(page) is true. > > Previously bad_page() was not getting called as check_new_page_bad() will > return earlier before reaching bad_page(). > > But now with the proposed change here page_expected_state() returns false > and hence bad_page() still gets called later on in check_new_page(). > > There is a change in behaviour - or am I missing something here ? Thank you for the suggestion. You're right, it makes sense to return true in this case. I'll update the patch accordingly. Appreciate your feedback!                                                                                                                   > >> + } >> + >> if (unlikely((unsigned long)page->mapping | >> page_ref_count(page) | >> #ifdef CONFIG_MEMCG >> @@ -1586,29 +1593,16 @@ static __always_inline void page_del_and_expand(struct zone *zone, >> account_freepages(zone, -nr_pages, migratetype); >> } >> >> -static void check_new_page_bad(struct page *page) >> -{ >> - if (unlikely(PageHWPoison(page))) { >> - /* Don't complain about hwpoisoned pages */ >> - if (PageBuddy(page)) >> - __ClearPageBuddy(page); >> - return; >> - } >> - >> - bad_page(page, >> - page_bad_reason(page, PAGE_FLAGS_CHECK_AT_PREP)); >> -} >> - >> /* >> * This page is about to be returned from the page allocator >> */ >> static bool check_new_page(struct page *page) >> { >> - if (likely(page_expected_state(page, >> - PAGE_FLAGS_CHECK_AT_PREP|__PG_HWPOISON))) >> + if (likely(page_expected_state(page, PAGE_FLAGS_CHECK_AT_PREP))) >> return false; >> >> - check_new_page_bad(page); >> + bad_page(page, >> + page_bad_reason(page, PAGE_FLAGS_CHECK_AT_PREP)); >> return true; >> } >>