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 630B2C71136 for ; Thu, 12 Jun 2025 05:18:48 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id F136D6B007B; Thu, 12 Jun 2025 01:18:47 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id EEB886B0088; Thu, 12 Jun 2025 01:18:47 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E01CF6B008C; Thu, 12 Jun 2025 01:18:47 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id C18796B007B for ; Thu, 12 Jun 2025 01:18:47 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 635C81406E8 for ; Thu, 12 Jun 2025 05:18:47 +0000 (UTC) X-FDA: 83545593894.27.1D5831A Received: from out30-119.freemail.mail.aliyun.com (out30-119.freemail.mail.aliyun.com [115.124.30.119]) by imf21.hostedemail.com (Postfix) with ESMTP id 551AF1C0003 for ; Thu, 12 Jun 2025 05:18:43 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=linux.alibaba.com header.s=default header.b="xkj3/hSo"; dmarc=pass (policy=none) header.from=linux.alibaba.com; spf=pass (imf21.hostedemail.com: domain of baolin.wang@linux.alibaba.com designates 115.124.30.119 as permitted sender) smtp.mailfrom=baolin.wang@linux.alibaba.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1749705525; 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=qsxOidY6ikXbFJ667HOPRMq7JTZQwc/Y4evKhZPM3uo=; b=nk6PBpTT6GXXq90cgUx9lPlt31jikvNw/DPIypWV3xZ15GVBIy8pZyNpGO1t6CsofznFyh 2vlobmSAj4YMS+ZN8f9/eHvD1XpuAuLbkoCTRZwnj+8QZ7FsY5YG7RxK9+WeJT+K00sBg5 mPt8crqf4g83tqVQlkv4huq1TNFh7Po= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=pass header.d=linux.alibaba.com header.s=default header.b="xkj3/hSo"; dmarc=pass (policy=none) header.from=linux.alibaba.com; spf=pass (imf21.hostedemail.com: domain of baolin.wang@linux.alibaba.com designates 115.124.30.119 as permitted sender) smtp.mailfrom=baolin.wang@linux.alibaba.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1749705525; a=rsa-sha256; cv=none; b=v/vHsViTfjSz9K9rKgLvJXKYdvnFm4+3crOKiLBfivdSTLHj1i6NUhXEUULimcHVOwmGbA 9DbwI1PH8kPhD7igxHwGw0tkIO698Pl8yhXFbN+ouRa6TCDkyvqsIvwoAyiyZp0Hwsidmv w+IonF/AoXbhCO6ZMWI7d06/R5+QXn0= DKIM-Signature:v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.alibaba.com; s=default; t=1749705520; h=Message-ID:Date:MIME-Version:Subject:To:From:Content-Type; bh=qsxOidY6ikXbFJ667HOPRMq7JTZQwc/Y4evKhZPM3uo=; b=xkj3/hSoJw8n+LJsEUXFFvg69xs4o8ppxlY68GVII1Dvoq6229iA8xQpWydcXkdLs14OTIHWsyfhnSGLCOPr1FtVfdCQ82419qYmMtCDu5CAZ84O4XDakPY1aYxT5r93Ol4glzDjrRufrCTH2TRFBvMHHTyU4/gl0JmoFmhA2tk= Received: from 30.74.144.123(mailfrom:baolin.wang@linux.alibaba.com fp:SMTPD_---0Wdfbpu1_1749705518 cluster:ay36) by smtp.aliyun-inc.com; Thu, 12 Jun 2025 13:18:38 +0800 Message-ID: Date: Thu, 12 Jun 2025 13:18:37 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 1/2] selftests: khugepaged: fix the shmem collapse failure To: Dev Jain , akpm@linux-foundation.org, david@redhat.com Cc: lorenzo.stoakes@oracle.com, Liam.Howlett@oracle.com, npache@redhat.com, ryan.roberts@arm.com, baohua@kernel.org, shuah@kernel.org, ziy@nvidia.com, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org References: <80218cc2-de6f-49dc-bdee-4b2560c619b5@arm.com> From: Baolin Wang In-Reply-To: <80218cc2-de6f-49dc-bdee-4b2560c619b5@arm.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: 551AF1C0003 X-Stat-Signature: r48cufws8ti5jxy5jnez7xrx43rtqnt6 X-Rspam-User: X-HE-Tag: 1749705523-169312 X-HE-Meta: U2FsdGVkX19MYXATSE5FdBkXSegI6VhTTvnvn7Pt7x/YINI79pNRID5CwsHMgzr2nRepgo9v6BolPQFZl/IfrDBbP6smiHBfXkYVCT4JQ5RwEJRL71TIH85qk/uFtTcnq4fyyU8qSblrhJmdcfF1QpH6C49DRYZJsENTY+MynskN094GrHzqSJ1CmpdPQCyGjMicRMS/YHU9lV3kYXOSM3Tzqpkiutk1Xn7jJCq6ffjfIOmYN8+VFm/DtTprOF2LQO0Xa/5FLDsE+dJYnIGmat8cG/hw4m7vmXLObxEUEgLyRWUJzuWE6MaXNDQoT0sKxdPBtYY+EFSOKR73NXRrZMmzHreHgWxQ5e6jxesenv5ckdSVERMnM9cRjNXNeHDYn/YMZUXx8lpm5/v92yk5P4+VP4ITbMQTROVilemqEeQy2VHdz7SE6nnkYBFl2hI58//NUf6eHDZ2fBv9/2Mha3ZFq6LGbNk2/VO4OAzVXa3fvwb89/19KO8fJ5ZjNCaKjoeyG9HVL4IKfrX4oOMUh/Hb2wYPu225iBc751Idz86HL0JSBYE/H1gC/zadbr7dsJiGucmLHz+oEkLZauqDnOKXGIzQXbT7wEo7u4tkzHv5o5Ajr/RHN0G4poBGsPOrrEgnvFndnG2uMZvtCjqbFRyyXrApJy4QryxhtBjHk3HAAAA0aWlkngy7JeVjMfQQgDEHRS6lWiE8pG2oxeyLPmdXuxwJGX+D8zMD1uJE/3SuHQTtVI4bNpGmOYPootIUoxjkQhuxoB1VJ+FF7KPfLI9soZJd4l+8JS234VlyRqwyWsjpmztJoj909L2+6nqvCbEIkZhKmvhETT4Vy/1KYDZa1SPwKLH7cSP2QuO9seZZhP9Ds688wE7wDvepcv4pBxWt4yxSxRACMnvdmkmkKy+xZnRLl6Q6022BNWm93nZL0MEVOtKrk9sZL7nu7U5vhUn4ugQ1OYaAtuGaoBW pyney5tS HbPCmXEU3nfqd1OEO6c14fv6wTiPa7VzMROSs0CvGQw3IocyRW104U2ntEAERLLA5sdcP+w08pCfDUUTEDAZqbYV0M3uGSUn7DHHSZrOaiOVdg13rmx3s0nblw4rV8gKcKmW5rUl5cKMGvqs6dMaBzOt4i570V2xtNF283q9myL5zeTMN9S0YeDH1+m8TOn2Dd8u4urnVVjwj/toQFCq82T/NQRuTAkd2k3qvRzdtKU//S2bAHmromG7Z4jLQ/giKXOL7HlQbs8ZyAgdpRBpkTex2PIVtU8bz1xZREkb5vGcykp1C23KbT2JAJe+dYlsCVtINW9RHN9AJ20MUDNwnNQJsmA== 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: On 2025/6/12 13:10, Dev Jain wrote: > > On 12/06/25 9:24 am, Baolin Wang wrote: >> When running the khugepaged selftest for shmem (./khugepaged all:shmem), >> I encountered the following test failures: >> " >> Run test: collapse_full (khugepaged:shmem) >> Collapse multiple fully populated PTE table.... Fail >> ... >> Run test: collapse_single_pte_entry (khugepaged:shmem) >> Collapse PTE table with single PTE entry present.... Fail >> ... >> Run test: collapse_full_of_compound (khugepaged:shmem) >> Allocate huge page... OK >> Split huge page leaving single PTE page table full of compound >> pages... OK >> Collapse PTE table full of compound pages.... Fail >> " >> >> The reason for the failure is that, it will set MADV_NOHUGEPAGE to >> prevent >> khugepaged from continuing to scan shmem VMA after khugepaged finishes >> scanning in the wait_for_scan() function. Moreover, shmem requires a >> refault >> to establish PMD mappings. >> >> However, after commit 2b0f922323cc, PMD mappings are prevented if the >> VMA is >> set with MADV_NOHUGEPAGE flag, so shmem cannot establish PMD mappings >> during >> refault. >> >> To fix this issue, we can set the MADV_NOHUGEPAGE flag after the shmem >> refault. >> With this fix, the shmem test case passes. >> >> Fixes: 2b0f922323cc ("mm: don't install PMD mappings when THPs are >> disabled by the hw/process/vma") >> Signed-off-by: Baolin Wang >> --- >>   tools/testing/selftests/mm/khugepaged.c | 3 +-- >>   1 file changed, 1 insertion(+), 2 deletions(-) >> >> diff --git a/tools/testing/selftests/mm/khugepaged.c >> b/tools/testing/selftests/mm/khugepaged.c >> index 8a4d34cce36b..d462f62d8116 100644 >> --- a/tools/testing/selftests/mm/khugepaged.c >> +++ b/tools/testing/selftests/mm/khugepaged.c >> @@ -561,8 +561,6 @@ static bool wait_for_scan(const char *msg, char >> *p, int nr_hpages, >>           usleep(TICK); >>       } >> -    madvise(p, nr_hpages * hpage_pmd_size, MADV_NOHUGEPAGE); >> - >>       return timeout == -1; >>   } >> @@ -585,6 +583,7 @@ static void khugepaged_collapse(const char *msg, >> char *p, int nr_hpages, >>       if (ops != &__anon_ops) >>           ops->fault(p, 0, nr_hpages * hpage_pmd_size); >> +    madvise(p, nr_hpages * hpage_pmd_size, MADV_NOHUGEPAGE); >>       if (ops->check_huge(p, expect ? nr_hpages : 0)) >>           success("OK"); >>       else > > The idea looks sane to me, but do we need to add the madvise call to > madvise_retracted_page_tables() too, since that also calls wait_for_scan()? Yes, I also realized this after sending the patches:) Thanks. To keep the original logic: diff --git a/tools/testing/selftests/mm/khugepaged.c b/tools/testing/selftests/mm/khugepaged.c index d462f62d8116..3452763e2fe3 100644 --- a/tools/testing/selftests/mm/khugepaged.c +++ b/tools/testing/selftests/mm/khugepaged.c @@ -1074,6 +1074,7 @@ static void madvise_retracted_page_tables(struct collapse_context *c, return; } success("OK"); + madvise(p, nr_hpages * hpage_pmd_size, MADV_NOHUGEPAGE); c->collapse("Install huge PMD from page cache", p, nr_hpages, ops, true); validate_memory(p, 0, size);