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 321F2C7619A for ; Wed, 12 Apr 2023 18:04:29 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B2182280001; Wed, 12 Apr 2023 14:04:28 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id AD0F76B007B; Wed, 12 Apr 2023 14:04:28 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 971F8280001; Wed, 12 Apr 2023 14:04:28 -0400 (EDT) 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 881EE6B0078 for ; Wed, 12 Apr 2023 14:04:28 -0400 (EDT) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 627A5801D0 for ; Wed, 12 Apr 2023 18:04:28 +0000 (UTC) X-FDA: 80673513816.13.4C83F98 Received: from mail-lf1-f51.google.com (mail-lf1-f51.google.com [209.85.167.51]) by imf17.hostedemail.com (Postfix) with ESMTP id 72D4D40020 for ; Wed, 12 Apr 2023 18:04:26 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=YvN48bvh; spf=pass (imf17.hostedemail.com: domain of axelrasmussen@google.com designates 209.85.167.51 as permitted sender) smtp.mailfrom=axelrasmussen@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1681322666; 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=qtMUkS08a6OQr/bGWBbcgzBdPz10386ZoYdd9g5+ys4=; b=lOr+mjJbPeq3Wqzyb93yr88AfXgSoN/NtgxKOdnQzTWosH5EqrZcTkrvsqP565WmcuB5kJ Bue+ngi3KHP+4fraNadwCRtNlwSH0pq7S1JA0rUN3Oe96dOLesz/WJcAvjqVYNFsCfAZMP hRfuDun4U8KxPtyCD71jCKZkY2rG4nA= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=YvN48bvh; spf=pass (imf17.hostedemail.com: domain of axelrasmussen@google.com designates 209.85.167.51 as permitted sender) smtp.mailfrom=axelrasmussen@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1681322666; a=rsa-sha256; cv=none; b=gcr1t/WpaCI5aMZVZAxbvRfA7ZsRRSfD/bm26+sDMccpZQ1fIzbMd4mndtXR5tgM7JOkxY 8jq1LOo2kua/fcp3ltvbF1t4hkY1xuLN+UPM8fderSnQsz7rArVXfdazhObw8jqn+MYK5w I+lr0W9St5w5ncxqVPIX7e3kxSVWKIE= Received: by mail-lf1-f51.google.com with SMTP id d7so26893044lfj.3 for ; Wed, 12 Apr 2023 11:04:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1681322665; x=1683914665; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=qtMUkS08a6OQr/bGWBbcgzBdPz10386ZoYdd9g5+ys4=; b=YvN48bvhIlEEL92Xf3nqLVv/jy0yktbd14LTf3MzC4Qr6G0IJi3iibOij5xAYL9AqZ NkIEY9aNrUMantltGrKJoS/eBo/lJmvEhJvUIERmdvRMk1/4N8GPAfLZQmxizVaocC8E Pl+fUZarcRl8Or5Ajk3elzjGPjsZbdfgdg0HVHCcYaoazpPWJSrd+livaUDgAuotwQ5H /+Tpwqs7vLyK0hdqrfhIJzJuvfFCqLJJGWQovrPKuPJHHzxbPKnZR2rHHx+UHvjkayb0 1lyUcvgPQlRc7Gz9V9Ge8MaxyNkSZp1p6c/D7ZV/4oL0UTkd2SMzk2ee6XVWaqdyHINd J8dw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681322665; x=1683914665; h=content-transfer-encoding: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=qtMUkS08a6OQr/bGWBbcgzBdPz10386ZoYdd9g5+ys4=; b=MtaZxSVwVfrukdkNbFSGaovivul8yGnwFBfimk9j50QK0b46Yo4Mte+5Xf2+HrLGlV bL5XJbbF07xA/WH9MQ8R52hCDAg6//K2IWxT/ox2MddyKnX2I3A4zSIn4lsDH5dfHyIy tWwfIxAAjJCr1wwCzjd7Xi1sPXKEmMXZOfdY68HfbZc4F87g8nKzoiIJeaTWZNHsHxYe CZCf98tdWhNl+uWjUYmt0dAviZfnsCJTDMqyrjw9aEXisKjOa4COz6XplbVDyBqi9fui upC4CFa5zm0RymEr+AFRQVbaHI9SHcBmPWtTYMRWnrQZan9ZI0AumvGOzXtlVhsk196G 7aOA== X-Gm-Message-State: AAQBX9dj76XqByXIgNyCwFVqu+aCcuPNTTRPRdBFMrFXpgahkbQuMZ1x G258FsFnw4Ui+rvx0IViZDA+FxKakvyIrhSXSqtP7g== X-Google-Smtp-Source: AKy350agLc9ENZTAk6C7yi0oa3N5DQkYwGy95fThzsyJlA/z6d8rDRJC84v1TJCI6eFNnJzm3UP/EI2a0rYKUutc+Qk= X-Received: by 2002:a05:6512:90c:b0:4ea:e5e3:7eb0 with SMTP id e12-20020a056512090c00b004eae5e37eb0mr5562653lft.10.1681322664673; Wed, 12 Apr 2023 11:04:24 -0700 (PDT) MIME-Version: 1.0 References: <20230412163922.327282-1-peterx@redhat.com> <20230412164244.328270-1-peterx@redhat.com> In-Reply-To: <20230412164244.328270-1-peterx@redhat.com> From: Axel Rasmussen Date: Wed, 12 Apr 2023 11:03:48 -0700 Message-ID: Subject: Re: [PATCH v2 13/31] selftests/mm: Split uffd tests into uffd-stress and uffd-unit-tests To: Peter Xu Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, Andrew Morton , Andrea Arcangeli , Mike Kravetz , Nadav Amit , David Hildenbrand , Mike Rapoport , Leonardo Bras Soares Passos , Mike Rapoport Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Stat-Signature: 87npej1pq4yi53wcofdmk4exbdmxpg87 X-Rspam-User: X-Rspamd-Queue-Id: 72D4D40020 X-Rspamd-Server: rspam06 X-HE-Tag: 1681322666-883277 X-HE-Meta: U2FsdGVkX1+zveLrtMZ4rPcuStQKC4VJQWLf0hqD53bUKTdK2RDh4w009trY1DwP6LfN2LPptwIZRv4392uxrdEBkYWebMIpMCvkqge11zGy9bKP7W5dJTbe6ymRj5uPkgmF7IsqHsXlTBaPagxQXrBwdWt3JeDrOTUOnLPOUGOQeGEKJHPizOurv3ZdkMnCB24VWYPF7GVZmoUErvqDtEXIe7g1t6Z5aYG9sM7BfMtYdV7QD7zPWxAkSnvZEpdVn64KbwQ59X6Nd+z3VafwzmtsXWtMz8iMQhIQdBobksMxJeBRSLTuxe4ZclUR03REOZ30TBxA0jJ2NHAKMiHLx463ca1Zb0stxSy2INsLyAWqw7R2MkWpDgiVfKfyZV5xG01iawfa8skXn/ggQYc+R2/puGXMWuEjVbf7lWaK17A83o2/2EGJiNgcyvfrPydLbQioIp5PckQeNzwzO5XLPVukNnJrEOkG0BEYhkY5b3xe3zB6Bp1pL1CutuBbry9eeZTkOduZbknWBEEtPJSLVHtI20SuTqj96obCIuoH198sfbMzq44zzEhCJL8Wy96eWSCh5ogwGBiGoXPVmLWE/0CXtdJ5HELDe0NvZWfD5hHWqWGOT9UEt6B6RNYjRpkdbQRR4RYhZX0/tVvJnbDV/ATcI2x87PkQMUDQAEZeVCtRtLVbvEO8m/4VpD+Cbk1EjwvhywSiJq2ZByXvz9g4LOzzUHbgeHWoKxMhxv+LqW7gUw4k4Mk76NRa2k73y40vJXSzgUdGIG3nD7cF20SPkniM7xNjO85ziPFyVMks1z9enGn5jrw8MIrYAiHR67CSCPEd+J5+J4Awep+V+1LZRgZebjN4jyUk/rJrT+N/DOMl+sYdggVaseAc39U1XcrCjZsJnLbZd+RcXqAshsRKkdkrnz0b631Z7FbmAZL4PAE/d0WsX6R0zSrbrA4g6423/OHUsih88tM5cRFiOIk 300A5gVV QTRLDOGoRCdlIWE3l4gUN3vJO49Xr0iJSfOyt/CgPrQCTvTF4FGMprMhY4yqUnTiEVP71FCln9EQESo8B3PsN0VzaxFj7LEP2zRCpCNe0wG62eqA6vM0q9tshcNYEouGHHRNKRD8ij6PhrMN1XLs8rnm+RXg+kAA+nT6hapOPx4GIEmUtezCsDBn57RfYGvKMHITkH9ctwL17ytmq8RBhY0UFqFLqeHnsfHshj2hsj1CO8qYVnO9FgbqM1lQPXh6c+0CzUAH/clcIBzCAg/7Gpqug3qsqPXPLqUiuBKL14tApelsxsnz/7lwosD+fDLOH0dTaxtucUlcxBwLUrLhl9SgL0RHlV4/8TP3rsbmM+65XL1/UXVY8ICzU5dATAgj7EB+CTKOYFxIkrDU0Wo+FKKuvuSeHJU6hWRBpwMgZG8Lsdzo= X-Bogosity: Ham, tests=bogofilter, spamicity=0.001749, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Wed, Apr 12, 2023 at 9:42=E2=80=AFAM Peter Xu wrote: > > In many ways it's weird and unwanted to keep all the tests in the same > userfaultfd.c at least when still in the current way. > > For example, it doesn't make much sense to run the stress test for each > method we can create an userfaultfd handle (either via syscall or /dev/ > node). It's a waste of time running this twice for the whole stress as t= he > stress paths are the same, only the open path is different. > > It's also just weird to need to manually specify different types of memor= y > to run all unit tests for the userfaultfd interface. We should be able t= o > just run a single program and that should go through all functional uffd > tests without running the stress test at all. The stress test was more f= or > torturing and finding race conditions. We don't want to wait for stress = to > finish just to regress test a functional test. > > When we start to pile up more things on top of the same file and same > functions, things start to go a bit chaos and the code is just harder to > maintain too with tons of global variables. > > This patch creates a new test uffd-unit-tests to keep userfaultfd unit > tests in the future, currently empty. > > Meanwhile rename the old userfaultfd.c test to uffd-stress.c. > > Reviewed-by: Mike Rapoport (IBM) > Signed-off-by: Peter Xu Reviewed-by: Axel Rasmussen > --- > tools/testing/selftests/mm/.gitignore | 3 ++- > tools/testing/selftests/mm/Makefile | 8 +++--- > tools/testing/selftests/mm/run_vmtests.sh | 10 ++++--- > .../mm/{userfaultfd.c =3D> uffd-stress.c} | 0 > tools/testing/selftests/mm/uffd-unit-tests.c | 27 +++++++++++++++++++ > 5 files changed, 40 insertions(+), 8 deletions(-) > rename tools/testing/selftests/mm/{userfaultfd.c =3D> uffd-stress.c} (10= 0%) > create mode 100644 tools/testing/selftests/mm/uffd-unit-tests.c > > diff --git a/tools/testing/selftests/mm/.gitignore b/tools/testing/selfte= sts/mm/.gitignore > index 347277f2adc3..8917455f4f51 100644 > --- a/tools/testing/selftests/mm/.gitignore > +++ b/tools/testing/selftests/mm/.gitignore > @@ -21,7 +21,8 @@ protection_keys > protection_keys_32 > protection_keys_64 > madv_populate > -userfaultfd > +uffd-stress > +uffd-unit-tests > mlock-intersect-test > mlock-random-test > virtual_address_range > diff --git a/tools/testing/selftests/mm/Makefile b/tools/testing/selftest= s/mm/Makefile > index 36467c15ca00..5a3434419403 100644 > --- a/tools/testing/selftests/mm/Makefile > +++ b/tools/testing/selftests/mm/Makefile > @@ -20,7 +20,7 @@ MACHINE ?=3D $(shell echo $(uname_M) | sed -e 's/aarch6= 4.*/arm64/' -e 's/ppc64.*/p > # Avoid accidental wrong builds, due to built-in rules working just a li= ttle > # bit too well--but not quite as well as required for our situation here= . > # > -# In other words, "make userfaultfd" is supposed to fail to build at all= , > +# In other words, "make $SOME_TEST" is supposed to fail to build at all, > # because this Makefile only supports either "make" (all), or "make /ful= l/path". > # However, the built-in rules, if not suppressed, will pick up CFLAGS a= nd the > # initial LDLIBS (but not the target-specific LDLIBS, because those are = only > @@ -57,7 +57,8 @@ TEST_GEN_PROGS +=3D mremap_test > TEST_GEN_PROGS +=3D on-fault-limit > TEST_GEN_PROGS +=3D thuge-gen > TEST_GEN_PROGS +=3D transhuge-stress > -TEST_GEN_PROGS +=3D userfaultfd > +TEST_GEN_PROGS +=3D uffd-stress > +TEST_GEN_PROGS +=3D uffd-unit-tests > TEST_GEN_PROGS +=3D soft-dirty > TEST_GEN_PROGS +=3D split_huge_page_test > TEST_GEN_PROGS +=3D ksm_tests > @@ -108,7 +109,8 @@ include ../lib.mk > > $(TEST_GEN_PROGS): vm_util.c > > -$(OUTPUT)/userfaultfd: uffd-common.c > +$(OUTPUT)/uffd-stress: uffd-common.c > +$(OUTPUT)/uffd-unit-tests: uffd-common.c > > ifeq ($(MACHINE),x86_64) > BINARIES_32 :=3D $(patsubst %,$(OUTPUT)/%,$(BINARIES_32)) > diff --git a/tools/testing/selftests/mm/run_vmtests.sh b/tools/testing/se= lftests/mm/run_vmtests.sh > index ddf40f883747..efe22dc569f0 100644 > --- a/tools/testing/selftests/mm/run_vmtests.sh > +++ b/tools/testing/selftests/mm/run_vmtests.sh > @@ -196,14 +196,16 @@ CATEGORY=3D"gup_test" run_test ./gup_test -a > # Dump pages 0, 19, and 4096, using pin_user_pages: > CATEGORY=3D"gup_test" run_test ./gup_test -ct -F 0x1 0 19 0x1000 > > +CATEGORY=3D"userfaultfd" run_test ./uffd-unit-tests > uffd_mods=3D("" ":dev") > +uffd_stress_bin=3D./uffd-stress > for mod in "${uffd_mods[@]}"; do > - CATEGORY=3D"userfaultfd" run_test ./userfaultfd anon${mod} 20 16 > + CATEGORY=3D"userfaultfd" run_test ${uffd_stress_bin} anon${mod} 2= 0 16 > # Hugetlb tests require source and destination huge pages. Pass i= n half > # the size ($half_ufd_size_MB), which is used for *each*. > - CATEGORY=3D"userfaultfd" run_test ./userfaultfd hugetlb${mod} "$h= alf_ufd_size_MB" 32 > - CATEGORY=3D"userfaultfd" run_test ./userfaultfd hugetlb_shared${m= od} "$half_ufd_size_MB" 32 > - CATEGORY=3D"userfaultfd" run_test ./userfaultfd shmem${mod} 20 16 > + CATEGORY=3D"userfaultfd" run_test ${uffd_stress_bin} hugetlb${mod= } "$half_ufd_size_MB" 32 > + CATEGORY=3D"userfaultfd" run_test ${uffd_stress_bin} hugetlb_shar= ed${mod} "$half_ufd_size_MB" 32 > + CATEGORY=3D"userfaultfd" run_test ${uffd_stress_bin} shmem${mod} = 20 16 > done > > #cleanup > diff --git a/tools/testing/selftests/mm/userfaultfd.c b/tools/testing/sel= ftests/mm/uffd-stress.c > similarity index 100% > rename from tools/testing/selftests/mm/userfaultfd.c > rename to tools/testing/selftests/mm/uffd-stress.c > diff --git a/tools/testing/selftests/mm/uffd-unit-tests.c b/tools/testing= /selftests/mm/uffd-unit-tests.c > new file mode 100644 > index 000000000000..6857388783be > --- /dev/null > +++ b/tools/testing/selftests/mm/uffd-unit-tests.c > @@ -0,0 +1,27 @@ > +// SPDX-License-Identifier: GPL-2.0-only > +/* > + * Userfaultfd unit tests. > + * > + * Copyright (C) 2015-2023 Red Hat, Inc. > + */ > + > +#include "uffd-common.h" > + > +#ifdef __NR_userfaultfd > + > +int main(int argc, char *argv[]) > +{ > + return KSFT_PASS; > +} > + > +#else /* __NR_userfaultfd */ > + > +#warning "missing __NR_userfaultfd definition" > + > +int main(void) > +{ > + printf("Skipping %s (missing __NR_userfaultfd)\n", __file__); > + return KSFT_SKIP; > +} > + > +#endif /* __NR_userfaultfd */ > -- > 2.39.1 >