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 0AF64C77B6E for ; Wed, 12 Apr 2023 19:48:20 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1CF51900002; Wed, 12 Apr 2023 15:48:20 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 158D56B0075; Wed, 12 Apr 2023 15:48:20 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id F3B16900002; Wed, 12 Apr 2023 15:48:19 -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 E08EB6B0074 for ; Wed, 12 Apr 2023 15:48:19 -0400 (EDT) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 955E5C023B for ; Wed, 12 Apr 2023 19:48:19 +0000 (UTC) X-FDA: 80673775518.08.06890CE Received: from mail-lj1-f175.google.com (mail-lj1-f175.google.com [209.85.208.175]) by imf09.hostedemail.com (Postfix) with ESMTP id AD41A140010 for ; Wed, 12 Apr 2023 19:48:17 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=3jBVuSAe; spf=pass (imf09.hostedemail.com: domain of axelrasmussen@google.com designates 209.85.208.175 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=1681328897; 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=ivsW0wdegcgGGPqK1SdV6k/Owfxdr2w4uEXcSN1jEOE=; b=VhjUPOg7Wx+fy4Ay4IUkJmEMkDnT4Fmq1tYttQsmF/FP5zV2A+los2UAS1hYvx8334XRSm zf/6Xal5h3HRqDNonJUqsmPPtUU+QPIEWG63dymVnuog3rFEHEKHdFB5t5MEnOQ6JkIcKd c438SSUny36TOUY5aYEFz3GRQPrOfdE= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=3jBVuSAe; spf=pass (imf09.hostedemail.com: domain of axelrasmussen@google.com designates 209.85.208.175 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=1681328897; a=rsa-sha256; cv=none; b=5LZ1uVyYEWN9E1mIFk3WAA9LP1lsRO1RQqGzXEniLBG1YVOuzOeacrJRi3UbgBndmC4jt3 q1sjLlj1Ll5c3uLQDNo1LbBtoYtoFrRsRLlGK6N08Eimk0uW63NnDtQQJw8nfCNjBTnmIq CZFkvBLAT2k393bwWzRXxuFT99Z6cUI= Received: by mail-lj1-f175.google.com with SMTP id by8so12908854ljb.13 for ; Wed, 12 Apr 2023 12:48:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1681328896; x=1683920896; 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=ivsW0wdegcgGGPqK1SdV6k/Owfxdr2w4uEXcSN1jEOE=; b=3jBVuSAeXEse5i95AaF8Klk7mVw+tazc4qD7DIlU5c2+KRBjdjJoyEgHWRFeAZ0WdU SyF7z/LMZOl8MbcMpP17JvzzXg1PLj/pTiA3pacdm+a/x+W/OfZdEXyKTh5FWadhYExx DM3zFKefK0hSSxIAI9KdqU92MM3XevjKtJjnRrGoDMQvTP7MtP1TkpLph3BpIcIRxEoQ MlBiGx+EeeMfTJ4nz0jekMQgw+cHNztUgd2U3plVpY7vjgo/eLDPvhCJGmplcuArUU+u Mfz2xdZqgIoQmz7nNT+s1w59+DgB1O5ABvdLudnpa+8Ah7RyQZ5j71P9Q1rj7xhRkXsY PdSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681328896; x=1683920896; 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=ivsW0wdegcgGGPqK1SdV6k/Owfxdr2w4uEXcSN1jEOE=; b=He9lWYu9nt+89yQseDbQ7tZQfA80EExi2HuxWufIfVHRkbNT13EuoCaKhYcohrbtV5 DrP27zGvVBkqXVQyeXEEN1BgFWghuAyH92v6cdoyF/fHL/he9BDVLu7k79Qx+O94Fa4b 9s6dCD9IBMZtMH9eZqjcKlHpC9LUmUAyvlVvkibh09BmcFKfOI6kD46LIKMG7XQVL1x6 /uowACowwxBghEC6muWukgpKHj21IGtjngyRxFmZvLT9MgT+IKzlQ1oyrgMtS3gUFkc0 Nio9Pfj4TpXV3nVhJfZ99TJSYPM670fGRiUP20ltmkh5GtsFTwuAyu8lbYSAudIyc5We Le5g== X-Gm-Message-State: AAQBX9e0Ncmfin893zJP5js7STru8p8qVFBYd3CA9CguzwvRXcu6sMH2 uW78nokmNrZ2/IsYl/Gr+ZmSHMloJwquHNXNQyD8TA== X-Google-Smtp-Source: AKy350aoz5XaL5YPxBof6Akn8PaWXGQPq+FO6dRNt4wUCa5GCN0wPx73al9GgX1FRWKa4tn5UYENP76F1zAZX95RGWk= X-Received: by 2002:a05:651c:20c:b0:2a7:8203:152c with SMTP id y12-20020a05651c020c00b002a78203152cmr3159739ljn.6.1681328895663; Wed, 12 Apr 2023 12:48:15 -0700 (PDT) MIME-Version: 1.0 References: <20230412163922.327282-1-peterx@redhat.com> <20230412164257.328375-1-peterx@redhat.com> In-Reply-To: <20230412164257.328375-1-peterx@redhat.com> From: Axel Rasmussen Date: Wed, 12 Apr 2023 12:47:39 -0700 Message-ID: Subject: Re: [PATCH v2 16/31] selftests/mm: UFFDIO_API test 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 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Stat-Signature: pjcs49p7hn6qe3ucodtk68xt3fz4jy1r X-Rspam-User: X-Rspamd-Queue-Id: AD41A140010 X-Rspamd-Server: rspam06 X-HE-Tag: 1681328897-636420 X-HE-Meta: U2FsdGVkX1+R3hdrMotaV8wyozNkRRLJfbinsJ+D1n2xnZl0OknDYePCD6009mO0wBmtqNMl7v3nWT23XBol9zx8E5nOCAzKFcF5Q9+Nq5n0tZASQJ55lBOhE5yTZG9Ji8x6tiLSDrnIjxVltjYpkQWQl9dggzsthOBUejwNTo57fjSHGSGMaWahKi5cZTPItVrm42/pGzKyRrvtD0SiQ7qzuMqxUtX5vV5JfURahupMgKpJRjgh7BVDUYDWjkGy0QWUNc9PYSrH4eGmJJCFosGLzBW6CGpNvDIoBZc+c4QRmbotaFtKsWbAi4AhqSd4sspgZCGwM+f8Wo52S20BzeFVzbyXscRfAXvE364puWXJqM46xs5rkOHIK0C2wuHP/F+hoOj5p1xJ4Di9Cxt+o/p6Qe3+YxTGVdCqVf6bTDC6ryPY4pxYGPcGF04JikQJ2QCjkWQ/dlqrALZ9EQIllqcIVYy4LR3COYlU3XAKb0ossZLSXuEZ4z+Rg0VuEADNwMyoHT2i3HV2k7veg/ZLBFoKpDo/4KCxsjB1YM6f9f+xG44N7rmCP/kSxE/U7XYJTe4HSYAwkoTooi1CD1Q2nArgfkAMXE6mn4DvCemtsDAvCDVXuYQnxRJilCDE8PZfs4Mbd04qW9h+LMp3QnnXu1HFc6jjmVtpUxBlgjksebO+OT/1o09C7BhD4KAIakhiBpyDwSb6puivkJ2pQtxwNAlZMGuiVHWIIWQmEqffRGa8a08LKuTNMaKEQz/+nStVE077z+kRaraC+vvm/s84k1Xb+4FCJqjpSZEe4nGCmN+DnY5LKKmB0J8PEjl40mUZCbIxVWJCAzP1Ln2rLlZs0hKDvotBhrgrUMcdxfttIElX2nhAZBnM/KZ9QN1MQn2kSDFRLfXwFdTEpsCBRHGZ/f6OXtsz9OSYgli5yCLwGAIXaofrip3BpwixoRWLnqPGskmFQquqcEup0Nnh6gf Elipu/ne G6t1ZUdF3aHOjAqkwtS8N/5rqjcAq0FrUIuW+dNbi9tDQA8RWTcZceh5Am5aT7yUUaIBK0I+cvz2WvhKBhlqtpFhvKle3lVw6TDxi40pyXFl3q+wb/jnu7Re8nqwvaTzJTkc06kG8Lz+dYUAAiLUs1cuPavlJtSOqTwp2ij2XKADXd8d5bwhG0LJPnQUnKfvbOiBZAuOOjPRLOhsTu7Afkmf8T4m6kinfY+zJFGYFp/XK7v03/fz+DZ3RUycTRbguxXYDglwY1h96iKFKk1kiO/WWsywnA3k3CsornnxPNNun9kfpsKViBxHfPLq5jxEBxX7iuYf8gcRxAh0ZQVOO60PZfOpxO5fjnm3meboqgJJAFecaq+EAJJZOGF07YEtaawZ5 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000006, 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:43=E2=80=AFAM Peter Xu wrote: > > Add one simple test for UFFDIO_API. With that, I also added a bunch of > small but handy helpers along the way. > > Signed-off-by: Peter Xu > --- > tools/testing/selftests/mm/uffd-unit-tests.c | 109 ++++++++++++++++++- > 1 file changed, 108 insertions(+), 1 deletion(-) > > diff --git a/tools/testing/selftests/mm/uffd-unit-tests.c b/tools/testing= /selftests/mm/uffd-unit-tests.c > index 6857388783be..bb492c258486 100644 > --- a/tools/testing/selftests/mm/uffd-unit-tests.c > +++ b/tools/testing/selftests/mm/uffd-unit-tests.c > @@ -9,9 +9,116 @@ > > #ifdef __NR_userfaultfd > > +static void uffd_test_report(void) > +{ > + printf("Userfaults unit tests: pass=3D%u, skip=3D%u, fail=3D%u (t= otal=3D%u)\n", > + ksft_get_pass_cnt(), > + ksft_get_xskip_cnt(), > + ksft_get_fail_cnt(), > + ksft_test_num()); > +} > + > +static void uffd_test_pass(void) > +{ > + printf("done\n"); > + ksft_inc_pass_cnt(); > +} > + > +#define uffd_test_start(...) do { \ > + printf("Testing "); \ > + printf(__VA_ARGS__); \ > + printf("... "); \ > + fflush(stdout); \ > + } while (0) > + > +#define uffd_test_fail(...) do { \ > + printf("failed [reason: "); \ > + printf(__VA_ARGS__); \ > + printf("]\n"); \ > + ksft_inc_fail_cnt(); \ > + } while (0) > + > +#define uffd_test_skip(...) do { \ > + printf("skipped [reason: "); \ > + printf(__VA_ARGS__); \ > + printf("]\n"); \ > + ksft_inc_xskip_cnt(); \ > + } while (0) Some of this is duplicating what's in kselftest_harness.h - e.g. assertions, printing test summary, keeping track of pass/fail/skip counts, etc. I wonder how you feel about using the standard harness? E.g. is the plan to do this (more straightforward?) refactor first, and then switch later? Or is there some reason it can't be used? > + > +/* > + * Returns 1 if specific userfaultfd supported, 0 otherwise. Note, we'l= l > + * return 1 even if some test failed as long as uffd supported, because = in > + * that case we still want to proceed with the rest uffd unit tests. > + */ > +static int test_uffd_api(bool use_dev) > +{ > + struct uffdio_api uffdio_api; > + int uffd; > + > + uffd_test_start("UFFDIO_API (with %s)", > + use_dev ? "/dev/userfaultfd" : "syscall"); > + > + if (use_dev) > + uffd =3D uffd_open_dev(UFFD_FLAGS); > + else > + uffd =3D uffd_open_sys(UFFD_FLAGS); > + if (uffd < 0) { > + uffd_test_skip("cannot open userfaultfd handle"); > + return 0; > + } > + > + /* Test wrong UFFD_API */ > + uffdio_api.api =3D 0xab; > + uffdio_api.features =3D 0; > + if (ioctl(uffd, UFFDIO_API, &uffdio_api) =3D=3D 0) { > + uffd_test_fail("UFFDIO_API should fail with wrong api but= didn't"); > + goto out; > + } > + > + /* Test wrong feature bit */ > + uffdio_api.api =3D UFFD_API; > + uffdio_api.features =3D BIT_ULL(63); > + if (ioctl(uffd, UFFDIO_API, &uffdio_api) =3D=3D 0) { > + uffd_test_fail("UFFDIO_API should fail with wrong feature= but didn't"); > + goto out; > + } > + > + /* Test normal UFFDIO_API */ > + uffdio_api.api =3D UFFD_API; > + uffdio_api.features =3D 0; > + if (ioctl(uffd, UFFDIO_API, &uffdio_api)) { > + uffd_test_fail("UFFDIO_API should succeed but failed"); > + goto out; > + } > + > + /* Test double requests of UFFDIO_API with a random feature set *= / > + uffdio_api.features =3D BIT_ULL(0); > + if (ioctl(uffd, UFFDIO_API, &uffdio_api) =3D=3D 0) { > + uffd_test_fail("UFFDIO_API should reject initialized uffd= "); > + goto out; > + } > + > + uffd_test_pass(); > +out: > + close(uffd); > + /* We have a valid uffd handle */ > + return 1; > +} > + > int main(int argc, char *argv[]) > { > - return KSFT_PASS; > + int has_uffd; > + > + has_uffd =3D test_uffd_api(false); > + has_uffd |=3D test_uffd_api(true); > + > + if (!has_uffd) { > + printf("Userfaultfd not supported or unprivileged, skip a= ll tests\n"); > + exit(KSFT_SKIP); > + } > + uffd_test_report(); > + > + return ksft_get_fail_cnt() ? KSFT_FAIL : KSFT_PASS; > } > > #else /* __NR_userfaultfd */ > -- > 2.39.1 >