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 2DDB6C71157 for ; Tue, 24 Jun 2025 03:44:15 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 979886B007B; Mon, 23 Jun 2025 23:44:14 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 929926B00A1; Mon, 23 Jun 2025 23:44:14 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7F1D26B00B0; Mon, 23 Jun 2025 23:44:14 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 6A3506B007B for ; Mon, 23 Jun 2025 23:44:14 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id C9E931616B2 for ; Tue, 24 Jun 2025 03:44:13 +0000 (UTC) X-FDA: 83588901186.14.677C79C Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf28.hostedemail.com (Postfix) with ESMTP id 8C7D6C0004 for ; Tue, 24 Jun 2025 03:44:11 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=A1JePZ28; spf=pass (imf28.hostedemail.com: domain of liwan@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=liwan@redhat.com; dmarc=pass (policy=quarantine) header.from=redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1750736651; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=sDR++eJ0azRqJjNdbxwGj4sEenVkPFyeK5RWWMSbTTI=; b=G1gGMmZnCFSZZiqTf+4OWUsYnJ5PHrpIfAOjoPC2U3UAraYVBEgwETZ7xPlANTGQ8g47OY h6vPy6S4zvRg3JiitvzqmXE3EuHdPSXyeyw1DR1psxrRrcp9qUj3AhhKabd8Otd6C+8ehM 0ON0aCWDULCuaKytSTZJkc+yBEQQ2sc= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=A1JePZ28; spf=pass (imf28.hostedemail.com: domain of liwan@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=liwan@redhat.com; dmarc=pass (policy=quarantine) header.from=redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1750736651; a=rsa-sha256; cv=none; b=AK8j1oMTr3NadEX/Ox1R+c/kcsQshsbw2ehQz4Pw4sHHutEQF2WZZEurdsFYUbhit3vJd6 0rASUtkFCkpVumjHUznXJuQeSvHh4an3COCYGlQr2mt2rN7z8FRXe7v0QRD5FeXle5czv5 xceG0HoygR056wsc/50MEF0qJBhUJCo= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1750736649; 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: in-reply-to:in-reply-to:references:references; bh=sDR++eJ0azRqJjNdbxwGj4sEenVkPFyeK5RWWMSbTTI=; b=A1JePZ28Woaq0ehKiAtyi/cEoflZtMOEQDlgBfMeTvv2AdBNBUfx4q0aNwK1PabfElrKiR EfxaS3GbuhcOxpW8bu+VALfGrBGK9p23nAvS7YupZK5kHBpVzDb+CHfk60ckbM/G3tc03O EqLPxeQVEqNghD1cjWD14xypVIRRjKg= Received: from mail-pj1-f72.google.com (mail-pj1-f72.google.com [209.85.216.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-134-k1gMTeHzO7mbPa6Dac2N5A-1; Mon, 23 Jun 2025 23:44:05 -0400 X-MC-Unique: k1gMTeHzO7mbPa6Dac2N5A-1 X-Mimecast-MFC-AGG-ID: k1gMTeHzO7mbPa6Dac2N5A_1750736644 Received: by mail-pj1-f72.google.com with SMTP id 98e67ed59e1d1-3141a9a6888so4430281a91.3 for ; Mon, 23 Jun 2025 20:44:05 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750736644; x=1751341444; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=sDR++eJ0azRqJjNdbxwGj4sEenVkPFyeK5RWWMSbTTI=; b=TSQtWt8sGuhP2dSiYmZw68W79rZM4EC9KXSi8Lj65qgMU4IRXqVNuZVLd1ihA+wZNO e25LjOpjLer9bqaTObCPiYGQSYt89OJpR63fqmXppSwrXByiXnheur3KugfrmeQzJcnt x3SWnhQGpsoYTabHLwOuVfH4bZR2XGYhwu8lcO0bLF6PLgIhdRiijgJwDA2UYUHy6YEo T17A8GtIBEqyAAML4xiTFq6q6LFAz0TSOb7+PTiWFxAPloVN4Ob1I/sa0mVqaneBP/vQ nVzK/T8o/+gJ3b71ARDky1Mt9Yrn3qPv8nhRaKCs6QQJfAtPLw+T32Mmh1fvpPz6Yh8i 6o/A== X-Forwarded-Encrypted: i=1; AJvYcCUJWFgFVlWKk5LlpEH0gtVgzE234glWNvf6wiLrda7QiTfectsZ+33YTlTlJxKXRxGLN5+hyntQaQ==@kvack.org X-Gm-Message-State: AOJu0YzsLHvaIkfSe6o/E2w2db3PZQFL9k4mHGNZImSaxluuJetm4bCN aIzmX+ddRRRILklcRWqI+v5NSC1SIVd85va6i2OyLNbzfmjbVvnZpS+JijEu/H1yqLEWnYcaS64 /kZ4FzL79zXpyPbmEgPmXHIZ71ujySqp/Vf7IUOUN/eODjggrjhwb/J4ixzc5mRX9v3eap3M4aj swoiwnz9pwMyiPE+SSYrU6YgghuGw= X-Gm-Gg: ASbGnctTRWILnd/wxzB2ltcV6h4zOrrr7/J8cPghTr9EbEpliOgOzZesO4T3xzwuRlm qx9EAsWFgSGJZPOvDKxmzg7jaVlEa5Ym1pNbhRjq/8945ihh8DWaQwv7tgvp0TQaN0X8moMwHrD BYyNI2 X-Received: by 2002:a17:90b:2ecb:b0:311:c93b:3ca2 with SMTP id 98e67ed59e1d1-3159d628fb6mr19316005a91.6.1750736644424; Mon, 23 Jun 2025 20:44:04 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEHhnk7fB1bcJfYHQYel5mOlTr1pMOJ3E69ahvKKe6NPgpmd0kW5WNHvQi9rdu8zZ52ksSijBnetlCQtZiPpOk= X-Received: by 2002:a17:90b:2ecb:b0:311:c93b:3ca2 with SMTP id 98e67ed59e1d1-3159d628fb6mr19315975a91.6.1750736644045; Mon, 23 Jun 2025 20:44:04 -0700 (PDT) MIME-Version: 1.0 References: <20250622081035.378164-1-liwang@redhat.com> In-Reply-To: From: Li Wang Date: Tue, 24 Jun 2025 11:43:51 +0800 X-Gm-Features: Ac12FXyld-AChXKwKT7e6Qrp6eXZY4nU2cI5pQgzk8xTL5Aezl-zOYzJxlkrM_w Message-ID: Subject: Re: [PATCH] mm/selftests: improve UFFD-WP feature detection in KSM test To: David Hildenbrand Cc: akpm@linux-foundation.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Aruna Ramakrishna , Bagas Sanjaya , Catalin Marinas , Dave Hansen , Joey Gouly , Johannes Weiner , Keith Lucas , Ryan Roberts , Shuah Khan X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: vqu1ZxaV025lqKAcTBBM0lrtJPQq6LBB3vpoWfABWFE_1750736644 X-Mimecast-Originator: redhat.com Content-Type: multipart/alternative; boundary="000000000000c3a4a706384923e2" X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 8C7D6C0004 X-Stat-Signature: 9hsi3wapdt7bucg5icqdarx9as7dhibd X-HE-Tag: 1750736651-191656 X-HE-Meta: U2FsdGVkX19HcDTyiqVHgxtY8JlsaEU6QSZ3rQep6VPDF5lDgccyK5nKzhnqx9SkJdDmA1YA3Vv+7brLtUbs9tH3aK9Qu6zvadNV5mq7zFpn8vou6WvZ0Gq+eEPIjHMlXIe/eCYg1VGtMGR+2NlhhYXzXa+G7gt3I+MnMkzu50a3PXIHNEaH1L6N2rOzSPSyEK5yEDPevqca0vHw/mGh0wvmoJ1RBsw8Og8mXm+OKOO0/uhw4BgBnM4Jb4bfVxXnMpkmittJyrB4SL/eRtlkzYARR1R5rrrTE3L9fT8rSQwt3yvqfRJZrNpTd8DsV7lsPCPfeODfVjpc7MwePTM/ROGSDHAPTYkfxb3FmU5snkDyUqtOWR2Tu7StIE7A9+64D6lRvNvlMsFoln2fkBLFxw4y06FKnaR1us2KzSZaCoc6co4ojM7p4ek8aebGJOl2HaqA8brVTGQunVmrwc+su0vF/AqcyRyQRDnjHG2MPMc6k0ERMex3N1wQD6f6oiSuzLdsMJp0G3naxsRls6HfDV51l9itW4LI1S11x+oEcrWbuFNvf7ZfYoAstV1KhY/+pozdKSLjGVCBnXC0nW4I2OaPYA8uoDuI7SKs/+PJ5WJPtQ5iHc0B24afKM8xd0JNphhkiz1EAe723TfRUt1yASbO7LOsS3ZClP67MjOm0nm9YXuL++XaOjZKGJMdiB7iEWv1yU91dtbpttZuSufQbXlArtSlRc+t+XdqUg/yysvS5KOctnkgPD1bPAJcJvW9sltm9zTgnvJVcmD7qrmz58UGKI/gd1CzPrti7DH52e/ZYRY2a8IevNxpe5ibBuBcH2n+8TvXsAzT49ArRMaFlylKCIHNXCGsiMoNg4x/VRiQDZqQB+YxTl8PRDbnQsjt5DOjloUXVmF7XZJszltfIkKFzyTvkakHHF1ORU72EUsWI2ci423DfXyxm3dNg1e9yEziLFcp3wzqoCiXLhT pQylkx81 iweH68jgEG++F+gXJKapkYM6ABTeg5SHw82qI915f4CrXIZjYoAmImU837BX/CdeOFKFwbUyrO6OUnSW3H86yKkAdJ1jcLnZDTd5K2NW+57d//t0b8HOzqTZYSNeGYfoo54cXxvk+Fwkpp2ynvYsfQVl5OuTxqJ9etAAW7m3ei1dcM/PeMBqY0QhcPX/Y6QKaYX6u0YnqYj6e1894RSfbwkewytL6i6QTGDSUjaTXeH37wCkRxoc43Y6muMhQT3rZKvfdPAgsnwnZ8oatluAKhHC+/BjKBloUo9Ypf9gFAscpIOUCaebqwJXhJvSJQ8uCXE8uxZTL4WNJSoLK3xdq+HPESe46MKJ5R7FGDqW3PxSuujnu24TJBb0yPkf5y8WWP70bKGof3NlPiNNFep2j6xcyzQRi4UEsIVuF2tybn6f3mTdgIOqTm69PUERlP6vDBTWnpm/sT72Dj3Xi62j1IGxoB6U202lCH/hvU1b3FlOZ0x7xr5/9lwEJP8SxK91leCaezPNNhB62OY1mN47nkpP76enDcv5v7kFViEO6CnSuLofT2uzHuOxLMiSx5FXET0ms/BkLBg0nrxxaq78GrZyiAiDReixtsYw8sL0ChIqDv+HwFKonKFkLV9RtIfY/ieJx2+mm30BvNZHQT4gd3hFdmrbRIFKpuwWeMOVx+jVZbKkg3QaG3QJqWb8BMj+JXjWn9re+07t5aQG6nwY4Dw7J7A== 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: --000000000000c3a4a706384923e2 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi David, On Mon, Jun 23, 2025 at 4:33=E2=80=AFPM David Hildenbrand wrote: > On 22.06.25 10:10, Li Wang wrote: > > The current implementation of test_unmerge_uffd_wp() explicitly sets > > `uffdio_api.features =3D UFFD_FEATURE_PAGEFAULT_FLAG_WP` before calling > > UFFDIO_API. This can cause the ioctl() call to fail with EINVAL on > kernels > > that do not support UFFD-WP, leading the test to fail unnecessarily: > > > > # ------------------------------ > > # running ./ksm_functional_tests > > # ------------------------------ > > # TAP version 13 > > # 1..9 > > # # [RUN] test_unmerge > > # ok 1 Pages were unmerged > > # # [RUN] test_unmerge_zero_pages > > # ok 2 KSM zero pages were unmerged > > # # [RUN] test_unmerge_discarded > > # ok 3 Pages were unmerged > > # # [RUN] test_unmerge_uffd_wp > > # not ok 4 UFFDIO_API failed <----- > > # # [RUN] test_prot_none > > # ok 5 Pages were unmerged > > # # [RUN] test_prctl > > # ok 6 Setting/clearing PR_SET_MEMORY_MERGE works > > # # [RUN] test_prctl_fork > > # # No pages got merged > > # # [RUN] test_prctl_fork_exec > > # ok 7 PR_SET_MEMORY_MERGE value is inherited > > # # [RUN] test_prctl_unmerge > > # ok 8 Pages were unmerged > > # Bail out! 1 out of 8 tests failed > > # # Planned tests !=3D run tests (9 !=3D 8) > > # # Totals: pass:7 fail:1 xfail:0 xpass:0 skip:0 error:0 > > # [FAIL] > > > > This patch improves compatibility and error handling by: > > > > 1. Changes the feature check to first query supported features > (features=3D0) > > rather than specifically requesting WP support. > > > > 2. Gracefully skipping the test if: > > - UFFDIO_API fails with EINVAL (feature not supported), or > > - UFFD_FEATURE_PAGEFAULT_FLAG_WP is not advertised by the kernel. > > > > 3. Providing better diagnostics by distinguishing expected failures > (e.g., > > EINVAL) from unexpected ones and reporting them using strerror(). > > > > The updated logic makes the test more robust across different kernel > versions > > and configurations, while preserving existing behavior on systems that = do > > support UFFD-WP. > > > > Signed-off-by: Li Wang > > Cc: Aruna Ramakrishna > > Cc: Bagas Sanjaya > > Cc: Catalin Marinas > > Cc: Dave Hansen > > Cc: David Hildenbrand > > Cc: Joey Gouly > > Cc: Johannes Weiner > > Cc: Keith Lucas > > Cc: Ryan Roberts > > Cc: Shuah Khan > > --- > > tools/testing/selftests/mm/ksm_functional_tests.c | 8 ++++++-- > > 1 file changed, 6 insertions(+), 2 deletions(-) > > > > diff --git a/tools/testing/selftests/mm/ksm_functional_tests.c > b/tools/testing/selftests/mm/ksm_functional_tests.c > > index b61803e36d1c..f3db257dc555 100644 > > --- a/tools/testing/selftests/mm/ksm_functional_tests.c > > +++ b/tools/testing/selftests/mm/ksm_functional_tests.c > > @@ -393,9 +393,13 @@ static void test_unmerge_uffd_wp(void) > > > > /* See if UFFD-WP is around. */ > > uffdio_api.api =3D UFFD_API; > > - uffdio_api.features =3D UFFD_FEATURE_PAGEFAULT_FLAG_WP; > > + uffdio_api.features =3D 0; > > if (ioctl(uffd, UFFDIO_API, &uffdio_api) < 0) { > > - ksft_test_result_fail("UFFDIO_API failed\n"); > > + if (errno =3D=3D EINVAL) > > + ksft_test_result_skip("UFFDIO_API not supported > (EINVAL)\n"); > > + else > > + ksft_test_result_fail("UFFDIO_API failed: %s\n", > strerror(errno)); > > + > > goto close_uffd; > > } > > if (!(uffdio_api.features & UFFD_FEATURE_PAGEFAULT_FLAG_WP)) { > > > The man page (man UFFDIO_API) documents: > > Since Linux 4.11, applications should use the features field t= o > perform a two-step handshake. > First, UFFDIO_API is called with the features field set to zero. > The kernel responds by setting > all supported feature bits. > > Applications which do not require any specific features can begin > using the userfaultfd immedi=E2=80=90 > ately. Applications which do need specific features should call > UFFDIO_API again with a subset > of the reported feature bits set to enable those features. > Thanks for pointing this out, very helpful. Will send a patch v2 soon. > > So likely, what you want in this patch here is something like: > > diff --git a/tools/testing/selftests/mm/ksm_functional_tests.c > b/tools/testing/selftests/mm/ksm_functional_tests.c > index b61803e36d1cf..5cf819ac958d0 100644 > --- a/tools/testing/selftests/mm/ksm_functional_tests.c > +++ b/tools/testing/selftests/mm/ksm_functional_tests.c > @@ -393,7 +393,7 @@ static void test_unmerge_uffd_wp(void) > > /* See if UFFD-WP is around. */ > uffdio_api.api =3D UFFD_API; > - uffdio_api.features =3D UFFD_FEATURE_PAGEFAULT_FLAG_WP; > + uffdio_api.features =3D 0; > if (ioctl(uffd, UFFDIO_API, &uffdio_api) < 0) { > ksft_test_result_fail("UFFDIO_API failed\n"); > goto close_uffd; > @@ -403,6 +403,14 @@ static void test_unmerge_uffd_wp(void) > goto close_uffd; > } > > + /* Now, enable it ("two-step handshake") */ > + uffdio_api.api =3D UFFD_API; > + uffdio_api.features =3D UFFD_FEATURE_PAGEFAULT_FLAG_WP; > + if (ioctl(uffd, UFFDIO_API, &uffdio_api) < 0) { > + ksft_test_result_fail("UFFDIO_API failed\n"); > + goto close_uffd; > + } > + > /* Register UFFD-WP, no need for an actual handler. */ > if (uffd_register(uffd, map, size, false, true, false)) { > ksft_test_result_fail("UFFDIO_REGISTER_MODE_WP failed\n"= ); > > > -- > Cheers, > > David / dhildenb > > --=20 Regards, Li Wang --000000000000c3a4a706384923e2 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi David,

On Mon, Jun 23, 2025 at = 4:33=E2=80=AFPM David Hildenbrand <d= avid@redhat.com> wrote:
On 22.06.25 10:10, Li Wang wrote:
> The current implementation of test_unmerge_uffd_wp() explicitly sets > `uffdio_api.features =3D UFFD_FEATURE_PAGEFAULT_FLAG_WP` before callin= g
> UFFDIO_API. This can cause the ioctl() call to fail with EINVAL on ker= nels
> that do not support UFFD-WP, leading the test to fail unnecessarily: >
>=C2=A0 =C2=A0 # ------------------------------
>=C2=A0 =C2=A0 # running ./ksm_functional_tests
>=C2=A0 =C2=A0 # ------------------------------
>=C2=A0 =C2=A0 # TAP version 13
>=C2=A0 =C2=A0 # 1..9
>=C2=A0 =C2=A0 # # [RUN] test_unmerge
>=C2=A0 =C2=A0 # ok 1 Pages were unmerged
>=C2=A0 =C2=A0 # # [RUN] test_unmerge_zero_pages
>=C2=A0 =C2=A0 # ok 2 KSM zero pages were unmerged
>=C2=A0 =C2=A0 # # [RUN] test_unmerge_discarded
>=C2=A0 =C2=A0 # ok 3 Pages were unmerged
>=C2=A0 =C2=A0 # # [RUN] test_unmerge_uffd_wp
>=C2=A0 =C2=A0 # not ok 4 UFFDIO_API failed=C2=A0 =C2=A0 =C2=A0<-----=
>=C2=A0 =C2=A0 # # [RUN] test_prot_none
>=C2=A0 =C2=A0 # ok 5 Pages were unmerged
>=C2=A0 =C2=A0 # # [RUN] test_prctl
>=C2=A0 =C2=A0 # ok 6 Setting/clearing PR_SET_MEMORY_MERGE works
>=C2=A0 =C2=A0 # # [RUN] test_prctl_fork
>=C2=A0 =C2=A0 # # No pages got merged
>=C2=A0 =C2=A0 # # [RUN] test_prctl_fork_exec
>=C2=A0 =C2=A0 # ok 7 PR_SET_MEMORY_MERGE value is inherited
>=C2=A0 =C2=A0 # # [RUN] test_prctl_unmerge
>=C2=A0 =C2=A0 # ok 8 Pages were unmerged
>=C2=A0 =C2=A0 # Bail out! 1 out of 8 tests failed
>=C2=A0 =C2=A0 # # Planned tests !=3D run tests (9 !=3D 8)
>=C2=A0 =C2=A0 # # Totals: pass:7 fail:1 xfail:0 xpass:0 skip:0 error:0<= br> >=C2=A0 =C2=A0 # [FAIL]
>
> This patch improves compatibility and error handling by:
>
> 1. Changes the feature check to first query supported features (featur= es=3D0)
>=C2=A0 =C2=A0 =C2=A0rather than specifically requesting WP support.
>
> 2. Gracefully skipping the test if:
>=C2=A0 =C2=A0 =C2=A0- UFFDIO_API fails with EINVAL (feature not support= ed), or
>=C2=A0 =C2=A0 =C2=A0- UFFD_FEATURE_PAGEFAULT_FLAG_WP is not advertised = by the kernel.
>
> 3. Providing better diagnostics by distinguishing expected failures (e= .g.,
>=C2=A0 =C2=A0 =C2=A0EINVAL) from unexpected ones and reporting them usi= ng strerror().
>
> The updated logic makes the test more robust across different kernel v= ersions
> and configurations, while preserving existing behavior on systems that= do
> support UFFD-WP.
>
> Signed-off-by: Li Wang <liwang@redhat.com>
> Cc: Aruna Ramakrishna <aruna.ramakrishna@oracle.com>
> Cc: Bagas Sanjaya <bagasdotme@gmail.com>
> Cc: Catalin Marinas <catalin.marinas@arm.com>
> Cc: Dave Hansen <dave.hansen@linux.intel.com>
> Cc: David Hildenbrand <david@redhat.com>
> Cc: Joey Gouly <joey.gouly@arm.com>
> Cc: Johannes Weiner <hannes@cmpxchg.org>
> Cc: Keith Lucas <keith.lucas@oracle.com>
> Cc: Ryan Roberts <ryan.roberts@arm.com>
> Cc: Shuah Khan <shuah@kernel.org>
> ---
>=C2=A0 =C2=A0tools/testing/selftests/mm/ksm_functional_tests.c | 8 ++++= ++--
>=C2=A0 =C2=A01 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/tools/testing/selftests/mm/ksm_functional_tests.c b/tools= /testing/selftests/mm/ksm_functional_tests.c
> index b61803e36d1c..f3db257dc555 100644
> --- a/tools/testing/selftests/mm/ksm_functional_tests.c
> +++ b/tools/testing/selftests/mm/ksm_functional_tests.c
> @@ -393,9 +393,13 @@ static void test_unmerge_uffd_wp(void)
>=C2=A0 =C2=A0
>=C2=A0 =C2=A0 =C2=A0 =C2=A0/* See if UFFD-WP is around. */
>=C2=A0 =C2=A0 =C2=A0 =C2=A0uffdio_api.api =3D UFFD_API;
> -=C2=A0 =C2=A0 =C2=A0uffdio_api.features =3D UFFD_FEATURE_PAGEFAULT_FL= AG_WP;
> +=C2=A0 =C2=A0 =C2=A0uffdio_api.features =3D 0;
>=C2=A0 =C2=A0 =C2=A0 =C2=A0if (ioctl(uffd, UFFDIO_API, &uffdio_api)= < 0) {
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ksft_test_result_fail= ("UFFDIO_API failed\n");
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (errno =3D=3D EINV= AL)
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0ksft_test_result_skip("UFFDIO_API not supported (EINVAL)\n"= ;);
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0else
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0ksft_test_result_fail("UFFDIO_API failed: %s\n", strerror(= errno));
> +
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0goto close_uffd;=
>=C2=A0 =C2=A0 =C2=A0 =C2=A0}
>=C2=A0 =C2=A0 =C2=A0 =C2=A0if (!(uffdio_api.features & UFFD_FEATURE= _PAGEFAULT_FLAG_WP)) {


The man page (man UFFDIO_API) documents:

=C2=A0 =C2=A0 =C2=A0 =C2=A0 Since=C2=A0 Linux=C2=A0 4.11,=C2=A0 application= s should use the features field to perform a two-step handshake.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 First, UFFDIO_API is called with the features f= ield set to zero.=C2=A0 The kernel responds by setting
=C2=A0 =C2=A0 =C2=A0 =C2=A0 all supported feature bits.

=C2=A0 =C2=A0 =C2=A0 =C2=A0 Applications which do not require any specific = features can begin using the userfaultfd=C2=A0 immedi=E2=80=90
=C2=A0 =C2=A0 =C2=A0 =C2=A0 ately.=C2=A0 =C2=A0Applications which do need s= pecific features should call UFFDIO_API again with a subset
=C2=A0 =C2=A0 =C2=A0 =C2=A0 of the reported feature bits set to enable thos= e features.

Thanks for pointing this out, very helpful.

Will send a patch v2 soon.
=C2=A0

So likely, what you want in this patch here is something like:

diff --git a/tools/testing/selftests/mm/ksm_functional_tests.c b/tools/test= ing/selftests/mm/ksm_functional_tests.c
index b61803e36d1cf..5cf819ac958d0 100644
--- a/tools/testing/selftests/mm/ksm_functional_tests.c
+++ b/tools/testing/selftests/mm/ksm_functional_tests.c
@@ -393,7 +393,7 @@ static void test_unmerge_uffd_wp(void)

=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0/* See if UFFD-WP is around. */
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0uffdio_api.api =3D UFFD_API;
-=C2=A0 =C2=A0 =C2=A0 =C2=A0uffdio_api.features =3D UFFD_FEATURE_PAGEFAULT_= FLAG_WP;
+=C2=A0 =C2=A0 =C2=A0 =C2=A0uffdio_api.features =3D 0;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (ioctl(uffd, UFFDIO_API, &uffdio_a= pi) < 0) {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ksft_test_res= ult_fail("UFFDIO_API failed\n");
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0goto close_uf= fd;
@@ -403,6 +403,14 @@ static void test_unmerge_uffd_wp(void)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0goto close_uf= fd;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0}

+=C2=A0 =C2=A0 =C2=A0 =C2=A0/* Now, enable it ("two-step handshake&quo= t;) */
+=C2=A0 =C2=A0 =C2=A0 =C2=A0uffdio_api.api =3D UFFD_API;
+=C2=A0 =C2=A0 =C2=A0 =C2=A0uffdio_api.features =3D UFFD_FEATURE_PAGEFAULT_= FLAG_WP;
+=C2=A0 =C2=A0 =C2=A0 =C2=A0if (ioctl(uffd, UFFDIO_API, &uffdio_api) &l= t; 0) {
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ksft_test_result_fa= il("UFFDIO_API failed\n");
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0goto close_uffd; +=C2=A0 =C2=A0 =C2=A0 =C2=A0}
+
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0/* Register UFFD-WP, no need for an actua= l handler. */
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (uffd_register(uffd, map, size, false,= true, false)) {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ksft_test_res= ult_fail("UFFDIO_REGISTER_MODE_WP failed\n");


--
Cheers,

David / dhildenb



--
Regards,
Li Wang
<= /div>
--000000000000c3a4a706384923e2--