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 97B27C0015E for ; Thu, 6 Jul 2023 22:51:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A19E48E0002; Thu, 6 Jul 2023 18:51:07 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 97BF68E0001; Thu, 6 Jul 2023 18:51:07 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7592C8E0002; Thu, 6 Jul 2023 18:51:07 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 64BA18E0001 for ; Thu, 6 Jul 2023 18:51:07 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 19E78806CE for ; Thu, 6 Jul 2023 22:51:07 +0000 (UTC) X-FDA: 80982684174.25.78459A3 Received: from mail-yb1-f202.google.com (mail-yb1-f202.google.com [209.85.219.202]) by imf19.hostedemail.com (Postfix) with ESMTP id 438371A001D for ; Thu, 6 Jul 2023 22:51:05 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=zVK6nDx2; spf=pass (imf19.hostedemail.com: domain of 3WEWnZA0KCKsLiPWcLdXfddPYRZZRWP.NZXWTYfi-XXVgLNV.ZcR@flex--axelrasmussen.bounces.google.com designates 209.85.219.202 as permitted sender) smtp.mailfrom=3WEWnZA0KCKsLiPWcLdXfddPYRZZRWP.NZXWTYfi-XXVgLNV.ZcR@flex--axelrasmussen.bounces.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=1688683865; 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=0eR1m0YpsGhZ6GlqZ9XuYhhV42VymJr50nJOc8nZiNo=; b=eAe+9W4QFAtfUXcQRRwl94udp4bagyjbxgyezGm+pEc3MUQsZM04UlUFqkmO1kLwUbNp/7 LPC8mSCM/5/PtSv2uKJptBoBFZl7vl1ujMHcQJpZ0ewf4G5mas0soS77bRIEcHShOsW3Ll QG3OVedJnY7q6bB5of/JCDEBnm9B414= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1688683865; a=rsa-sha256; cv=none; b=2ciC5NHxRBY9z9i8fQV8ghKXheILcBMNLMCkRaJnhfEgKG4FsWzQnR60uTRRjxIwGPO3kb Xxv3uLTIVRsT2cU4KUEujZ0svJJ1j6bpx7HAnrhkMKmy97nnWNJBldYgvd/s2bz45qeqb+ XNo05RNdBGeF6NZoPp783dz1aC1nT7k= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=zVK6nDx2; spf=pass (imf19.hostedemail.com: domain of 3WEWnZA0KCKsLiPWcLdXfddPYRZZRWP.NZXWTYfi-XXVgLNV.ZcR@flex--axelrasmussen.bounces.google.com designates 209.85.219.202 as permitted sender) smtp.mailfrom=3WEWnZA0KCKsLiPWcLdXfddPYRZZRWP.NZXWTYfi-XXVgLNV.ZcR@flex--axelrasmussen.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com Received: by mail-yb1-f202.google.com with SMTP id 3f1490d57ef6-c5a17bfb38bso1257102276.3 for ; Thu, 06 Jul 2023 15:51:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1688683864; x=1691275864; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=0eR1m0YpsGhZ6GlqZ9XuYhhV42VymJr50nJOc8nZiNo=; b=zVK6nDx2/vIL1dc7h7hFZDfr/rEOBcNDC5lzAQ8fMfaY2kDXm1d90zN+sAdZBRkAVy eS0e/cYLAI5GlN5hCyqzAZsI3npJTnOPGdGRNCf5Z9XQRS26+3V3iKb68AeK1pqfrrK/ xI0bVwy1i7i/os5XjQVIXRLYlXw2zGr2RbOxqfH7TjC+dya4aBmpaEQwquOV67eYDYli EHdK6eJUGxQqPuxQuTMsQewM+3qR50sGQFaisJznV2893CLPnbjYkC1qV0z6IJvBHP2Q Qm/1xZWrhlds7/VAWCEpvN4M1cI6E8ouf/4BdK8WRTe5GRh7RJaWO+df/EurZS1IsV5C ESHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1688683864; x=1691275864; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=0eR1m0YpsGhZ6GlqZ9XuYhhV42VymJr50nJOc8nZiNo=; b=Gsr5zCkNj4kBKfND6JSdZuuSR/E0Jz1JL1FDf+AA/91liB5ppGh8aTtkW80dWP/pMJ 7qiBPBCjLx5r99hZWQrXlwKAyHOdufJeEzdf7JBa5PW/W5uFEodo2fj87rBeA1L3NbEq 484v6cMTLQhHevnzLwp5gkCJYwqQgmAwJjQSi1M91DNVM2kDEVLUShrcjoPzDuNNZiVJ cwNFYpNiZkLhEXVDATv8xPHrV+yIsEs5NHyeVDh23H4n/bvPiBSLn76qZdwUd/gctlBj LkGKa2RKFXeMA1V9LICIMP1YPLKItpf8UM2i7Gsg0bF43PEQ+3bXePhKCZhEke961NFT ZHQw== X-Gm-Message-State: ABy/qLbj7Jefu23Sh7cwXjUH8cVdUG4e7K5GqdzlUV/3GjZOI+kOlpOq QNUVo+xU+G4QuVY5ov82TvkTOV5BJkfZcPnKR4fi X-Google-Smtp-Source: APBJJlGqdtbTPga9QJm8ffVaUw6WvKONQskr2t33RDHlmoUv4ugqzz1h75IhlcTDYghh9LVvfKAy5QaL8bfvdcxVM2r/ X-Received: from axel.svl.corp.google.com ([2620:15c:2a3:200:bec3:2b1c:87a:fca2]) (user=axelrasmussen job=sendgmr) by 2002:a25:b193:0:b0:c01:e1c0:3b8f with SMTP id h19-20020a25b193000000b00c01e1c03b8fmr16283ybj.6.1688683864381; Thu, 06 Jul 2023 15:51:04 -0700 (PDT) Date: Thu, 6 Jul 2023 15:50:35 -0700 In-Reply-To: <20230706225037.1164380-1-axelrasmussen@google.com> Mime-Version: 1.0 References: <20230706225037.1164380-1-axelrasmussen@google.com> X-Mailer: git-send-email 2.41.0.255.g8b1d071c50-goog Message-ID: <20230706225037.1164380-8-axelrasmussen@google.com> Subject: [PATCH v3 7/8] selftests/mm: refactor uffd_poll_thread to allow custom fault handlers From: Axel Rasmussen To: Alexander Viro , Andrew Morton , Brian Geffon , Christian Brauner , David Hildenbrand , Gaosheng Cui , Huang Ying , Hugh Dickins , James Houghton , "Jan Alexander Steffens (heftig)" , Jiaqi Yan , Jonathan Corbet , Kefeng Wang , "Liam R. Howlett" , Miaohe Lin , Mike Kravetz , "Mike Rapoport (IBM)" , Muchun Song , Nadav Amit , Naoya Horiguchi , Peter Xu , Ryan Roberts , Shuah Khan , Suleiman Souhlal , Suren Baghdasaryan , "T.J. Alumbaugh" , Yu Zhao , ZhangPeng Cc: linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, Axel Rasmussen Content-Type: text/plain; charset="UTF-8" X-Stat-Signature: n5o7hxegm4do564ej8o1sfmwdo4759hn X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 438371A001D X-Rspam-User: X-HE-Tag: 1688683865-28292 X-HE-Meta: U2FsdGVkX1+zx4DHXTUKpAqsB0ajdYAFLpeW7Q+72o8ym8mL3VKrEGalxrkjHDsOnpqyDSOz6a5TUGZ2Z7bsowWhnFacYBHEJlKtiO7eqEC/H2qTlgRBAxSRHHzn2B2Bm4slBwbIESHKmfyLSeH2hCbmJZFpcBbCVwrLtg84TjWsr1eqIPfzUbUPNP8Wda4DrMWNfkaIWdNxnEGdXCVPcuJ77Q/2j68TljHhMOfUpqCuprSDjhL9yqNmmmE3lIVG3cHCZ59heT+b1g8iyCtWJUUzXOt23g4+gexHmwZfnDUEsiZcvqTZscDY9en0Z5+rRG3GDVirF+Oc9vnraJMFu675f8fFuvpo2udcHvN/0JfCS4+VzTINmGcEEcywRO6jxTFvvquMFrQ5ouOvQqwR47PrFspTA8y+WgG3GQywCFTpDWAzse6fyMmH1OmBHLtt6CJbrMZem4q1L8TQlHAsH2ZGxHSZN9jBbw/xeQtxFFdRS7jgGf9gX6o3oRG96G9zSaXrqs261nHSmvu+E3W2N/e3Zo85+GUBlP0Ba+trJFXf9/z+T0r+FIPPpxnD0UIzbrCnUU7eRBZaPa2PR19R7piO7DH0KuC3uA/vshJwATke0JZ+RqrVUHjlgTZOa5Kka3cELAl6nxezHqND0wCZpn3wS0M0Dmbst/dHWiO6iqVfeteanN7fqakAKvWnOuFfY1rmfPKzFYBgREF8mWZCjYU6IZUMcBijFqE5Xz61qz4vDTI/F8x+iVmGoLv6PuHsH4JxM2u4db4ik7Wu8g3f7VoLYFjpJEAVW65uGj/0HvhjmixMzgrl/5rcdl/NXycF0dW0IXJll4oRG67v7uqguGMYmRMmx43fxDb+PcHEP13bCEuOufFtk4jn11tNybeQqXpZQ2vylVJfJuasbRyRa1UhQhqt4OdNKe2IsaBv1VFiUHX650Bj7pewnSTiRPcmo2gREoZCNz8olGS8fvg 2W5M60NH fL7rnL5IyVlCwDoqIgwNb50rxYaD8PTKE+8/JKKxrxx2qiSKUgWduEVlBX/1BZTCf0TY9iaQw1M4YU5RWopGIijuDHbArtHeDF2OlIsFuR3Aib6tGzySrOw2Ln7M5F9meGtQm70l1cIJc0UdLXhydKEajB1P2sAXDnopEfD31+py6Mygg4d9AUPqiiOmnN0ql3pHnqRU/d3CqmDvXs33sRysL03gf1vxnVPEMtx5wOc4UGrDliDz2CmwjBGOFhwjUg2gXoR/1dr8WbQ/GNZsnu6Gvh1GuaTG3C/M+qohFSJXnl98JVRkdGTjlqlGdf74jVFpO5ewL/IjY471LuU+nzaTgx7uToq5e9CBM/vx8ZALz1EordgeSLqdlLfzLUITFFgigJsRR8KfNBSYPgV1k1Ypd0K7ZpG7s+qvYIFG7u4PpYK6fIioxXifV9VuBWeTrBRaeZUH7XH0d727pHJqZt60gxBsoOOpUyXPIIOaRMNhL4k/I1I8z75B2CeGgqdXBaOANMz99JuYDh3QdhUqBdwLRUoV81rpvvR6kLpHtbYlWMd0Z1wti0w7G9x0+MrFlhojzG/I5xSV7DeVLCOEtQlPOIydYTGthbvy9O2uSgdD/X4QI8M7NhGp3nXB2jgK634IWzuGC/nbDxKsPldxglC/9syyHIL8NMN93VTqKNtF1AJJEdiEiZCYE4Rfx6aYjOLAp0xh5mCWLtiTN6EDaNdnDRA== 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: Previously, we had "one fault handler to rule them all", which used several branches to deal with all of the scenarios required by all of the various tests. In upcoming patches, I plan to add a new test, which has its own slightly different fault handling logic. Instead of continuing to add cruft to the existing fault handler, let's allow tests to define custom ones, separate from other tests. Signed-off-by: Axel Rasmussen --- tools/testing/selftests/mm/uffd-common.c | 5 ++++- tools/testing/selftests/mm/uffd-common.h | 3 +++ tools/testing/selftests/mm/uffd-stress.c | 12 +++++++----- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/tools/testing/selftests/mm/uffd-common.c b/tools/testing/selftests/mm/uffd-common.c index ba20d7504022..02b89860e193 100644 --- a/tools/testing/selftests/mm/uffd-common.c +++ b/tools/testing/selftests/mm/uffd-common.c @@ -499,6 +499,9 @@ void *uffd_poll_thread(void *arg) int ret; char tmp_chr; + if (!args->handle_fault) + args->handle_fault = uffd_handle_page_fault; + pollfd[0].fd = uffd; pollfd[0].events = POLLIN; pollfd[1].fd = pipefd[cpu*2]; @@ -527,7 +530,7 @@ void *uffd_poll_thread(void *arg) err("unexpected msg event %u\n", msg.event); break; case UFFD_EVENT_PAGEFAULT: - uffd_handle_page_fault(&msg, args); + args->handle_fault(&msg, args); break; case UFFD_EVENT_FORK: close(uffd); diff --git a/tools/testing/selftests/mm/uffd-common.h b/tools/testing/selftests/mm/uffd-common.h index 197f5262fe0d..7c4fa964c3b0 100644 --- a/tools/testing/selftests/mm/uffd-common.h +++ b/tools/testing/selftests/mm/uffd-common.h @@ -77,6 +77,9 @@ struct uffd_args { unsigned long missing_faults; unsigned long wp_faults; unsigned long minor_faults; + + /* A custom fault handler; defaults to uffd_handle_page_fault. */ + void (*handle_fault)(struct uffd_msg *msg, struct uffd_args *args); }; struct uffd_test_ops { diff --git a/tools/testing/selftests/mm/uffd-stress.c b/tools/testing/selftests/mm/uffd-stress.c index 995ff13e74c7..50b1224d72c7 100644 --- a/tools/testing/selftests/mm/uffd-stress.c +++ b/tools/testing/selftests/mm/uffd-stress.c @@ -189,10 +189,8 @@ static int stress(struct uffd_args *args) locking_thread, (void *)cpu)) return 1; if (bounces & BOUNCE_POLL) { - if (pthread_create(&uffd_threads[cpu], &attr, - uffd_poll_thread, - (void *)&args[cpu])) - return 1; + if (pthread_create(&uffd_threads[cpu], &attr, uffd_poll_thread, &args[cpu])) + err("uffd_poll_thread create"); } else { if (pthread_create(&uffd_threads[cpu], &attr, uffd_read_thread, @@ -247,9 +245,13 @@ static int userfaultfd_stress(void) { void *area; unsigned long nr; - struct uffd_args args[nr_cpus]; + struct uffd_args *args; uint64_t mem_size = nr_pages * page_size; + args = calloc(nr_cpus, sizeof(struct uffd_args)); + if (!args) + err("allocating args array failed"); + if (uffd_test_ctx_init(UFFD_FEATURE_WP_UNPOPULATED, NULL)) err("context init failed"); -- 2.41.0.255.g8b1d071c50-goog