From patchwork Thu Jun 15 08:42:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Zhang X-Patchwork-Id: 13280889 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 3602CEB64D9 for ; Thu, 15 Jun 2023 08:43:19 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C9BB18E0001; Thu, 15 Jun 2023 04:43:18 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id BFDE76B007B; Thu, 15 Jun 2023 04:43:18 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A77418E0001; Thu, 15 Jun 2023 04:43:18 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 96C6C6B0078 for ; Thu, 15 Jun 2023 04:43:18 -0400 (EDT) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 74706120B4C for ; Thu, 15 Jun 2023 08:43:18 +0000 (UTC) X-FDA: 80904342876.08.BBC88DE Received: from mail-pf1-f182.google.com (mail-pf1-f182.google.com [209.85.210.182]) by imf02.hostedemail.com (Postfix) with ESMTP id 95C3980006 for ; Thu, 15 Jun 2023 08:43:16 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=f5u5ND5n; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf02.hostedemail.com: domain of zhangpeng.00@bytedance.com designates 209.85.210.182 as permitted sender) smtp.mailfrom=zhangpeng.00@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1686818596; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=FpzykzsbiMOLk6qot3spisUo8VNsB6lkGRakXgvX2Lw=; b=mDkAAKx6fDqnLUQX15R7pUGZlXcsnGNjOf+G0nsqfAkVAUUFZgM/cVPVjCr/okqxf+biop 7tSfSLKyCLkQJKGdRQOp0QniVceGm+AnnR9KzXlIkCuaFr5w9mOAqnsLOyA5b4vdIKEMlp MAz1e20wfaN7Vn/p05fYK5ybHUOLzV4= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=f5u5ND5n; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf02.hostedemail.com: domain of zhangpeng.00@bytedance.com designates 209.85.210.182 as permitted sender) smtp.mailfrom=zhangpeng.00@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1686818596; a=rsa-sha256; cv=none; b=5DedxLX6MQIhBWpxfuZ3psxqab9txoMyrmSh5hpOufQ+HzenpLlsPR7EZFJHOB3U7aWwgD 1b4Djye2/GxqGkIwdKO7tQg1VzVLJpJO1/0kWZZRxIUcMtjPlPgAPLuYeQNClm683guqlX n1eshf6Sm+IEaGHYOJua3sNvuvlCyeo= Received: by mail-pf1-f182.google.com with SMTP id d2e1a72fcca58-666779dcc8aso1158346b3a.0 for ; Thu, 15 Jun 2023 01:43:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1686818595; x=1689410595; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=FpzykzsbiMOLk6qot3spisUo8VNsB6lkGRakXgvX2Lw=; b=f5u5ND5nwplGrN2UmPJkv0viCKJSKGsY/UI4A0vMG82lz601xyYPuSRYCh50ZPBdKc xZfMnrR2BUQmQZD1dLgTlZgt6DHNqhuw1uWV17tAjGf8aTLgGuQJOB5Rp+ETMqhBhEIe e9xOrmZd7CJebdQh/HkiPyMeMSA1f3mVlQ2WRanzU9FQhLWN2EZhlhLxjOVdUnOVFOk6 nF7tkC5CoW4iBhGnjs59/j96iVnqhzidhQy9ukii/QT/USuxV+nT/U3Z7DEL4MmyKltJ yM0d3URmYutsVKMrFIr75MB8eACGTg3uOEE/J2eqxWFngrikhAAOtOUSirS1ATZyVLqe c3Cg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686818595; x=1689410595; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=FpzykzsbiMOLk6qot3spisUo8VNsB6lkGRakXgvX2Lw=; b=P1nbXKlFzyPjujseledjSBzsI2kBo0UGpMaBGwahRD8un5NUEYps4PA9B9AWbRVwwZ QOSWmOyK1c/dw0pZz5YV6v0hHj3tkk+F50iuQ+fIbHOycNItG0NmmhYfq1mDarRtVs1m 1HUOOuuCEhAIgpT7/QyrnjnosBS0+frNTjgsALprefCAmo4+pwtsikxBeBQ7PTCX68vA nm0WrQ/jtB0Uq8orLvBTDT4e3OYWLL2aWQKeVQ/oh8MIT7/Tk9Dm48/haPIXPpt2Pk/T fO2kBVq7sEbIPgQpL62ZiuoeIrjbXF9i4rtLyFjbA6GX04DPsSTJl4HCt6vaAbakY9eE xK8w== X-Gm-Message-State: AC+VfDwjWEPKb5XVD3L18U5wKw8TavL55+R+ixhTA8k2nmOCww9nsOJo 3w7aSZ9WD/oLJMf1oRnBkZ4740GUun7lCEzfx/E= X-Google-Smtp-Source: ACHHUZ4VQWfVCwhn8hOlPVP9rhgoXWi3pKF2VBEqo221ku0kE/CNCTN7a+kbBIJsTlD3klPehwhA6w== X-Received: by 2002:a05:6a00:c92:b0:64c:a554:f577 with SMTP id a18-20020a056a000c9200b0064ca554f577mr5393636pfv.11.1686818595126; Thu, 15 Jun 2023 01:43:15 -0700 (PDT) Received: from GL4FX4PXWL.bytedance.net ([139.177.225.249]) by smtp.gmail.com with ESMTPSA id i21-20020aa78b55000000b0064fe06fe712sm11139783pfd.129.2023.06.15.01.43.12 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Thu, 15 Jun 2023 01:43:14 -0700 (PDT) From: Peng Zhang To: Liam.Howlett@oracle.com Cc: akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, maple-tree@lists.infradead.org, Peng Zhang Subject: [PATCH v3 2/4] maple_tree: add test for expanding range in RCU mode Date: Thu, 15 Jun 2023 16:42:59 +0800 Message-Id: <20230615084301.97701-3-zhangpeng.00@bytedance.com> X-Mailer: git-send-email 2.37.0 (Apple Git-136) In-Reply-To: <20230615084301.97701-1-zhangpeng.00@bytedance.com> References: <20230615084301.97701-1-zhangpeng.00@bytedance.com> MIME-Version: 1.0 X-Rspam-User: X-Stat-Signature: f811dcu5zui9no87mcar64xm81o3wpsk X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 95C3980006 X-HE-Tag: 1686818596-595913 X-HE-Meta: U2FsdGVkX19n6xwf+FTI+t8QCnbBzomIvUmsxIt2NzG3IdsdgSdMfx1cs42TiZ8iDR4OfithXPL9C4zz0l0bjN/L4Ye1O24wzWdTHmTrScZMlxrP849v06N+2q7r3YrvBPIYjjS1igCtaL1RFanDlOxUy8mtYP1GhfDJujamxJnAm+aonXcfYD8GESo4cv1kBg4qWE9qByt16OBnIe/EtNKDBTdfJha7fuTd8djr5ddWSbXw4+/UlG7J2Zg9hi+JjzL+JmE49QkXGCiTifMhXsPEfE5NcHo6ZGdRWbKadOWLkpN8ZzR17c8KQ2Awi5jTV7IhruExuxDmv2F/xydnQdffuAyLUL6mVmsvYB8A9WkmEXpG+eqEoutx+ObXmC6P0czDGld/7b2PdI+do7Sx5XXSESIkRDk/b4kthRmRifBecjWx7giqWVjIkaMVmAn88573tJQM0kvRgJyppgMMdJTf4WK75c4smaFufzstxI8EyedYn8kCTAJIb7h+7DqzzGbVSmeOSaFvc9JId1TqYYEDGLmR/5RXbHMfXOpCH81DQsJCYVNxgiQmnECDQIo2dXzT2rrf8If8NbfovyaBIAKsCUb5Dr7rWXq6Jnm1dnWBwJlVNqpGGPrE/9vl80fyOmZkJXW0x7UK+nLoWvObRmgs8ia5aUPbCtdzzgbOYoWyG2tnZBDR9c/eE8te1Xm3l4VhmB/kt6qTpZa0x/kqOvxzmWsZtujsTa3KJ6nHl4+wcd4iOr4nxGWAs+h9l2ec4JeaDH/QdkbCix0fPZXf/SPO55TQ3uUaoGpNG9yinx0yRYdsdw2uuH/Y/2pfQWmZIg0UAlyJtGMXd1p3TqMBe1fUjvhqnRScpMbYOrsrgkd/ik8OfuyOVvYyPNwgHgAzZ1oHtAcwqg8gX9OmTUAxCKCoHzzgx39Mo4KD4NqaMdONkeCMf+FJmfGiF1ELWG4NNPYafP1sTSnDXZCFtqn Q2WDOG23 2M1gLNQnvshYrPCcea9c+gj0KVNUJewvKXjqPbZBRt/eupLuLNekWppZUYV8I+fSwwBw+InCQyJRhB2/TeKNXAY+c1dDWHpfoSwP59IQDS4DMgvbE0sXICtpzGhbixIILy+Ozct7crTF+lnqFjfGlNLZ2thO6h6HvJF0OD1sRYCw3+ZFVJCLjOJA/tWzSIFqGbt9HnnbZXQQwLQR9zj5QpyFASiu9U+COazA0im4uwCnG+26oF0NiIYpVzs13ZN3FgDtXlZHhxJUF6HPIXVUlHy2QGkRL2m4QTmPKMcF2A0BgaCfmZGbn6pHgWS+tvMq4A8nvJTa6SYRbolieVEvxcxLHoGf1BCMALUZv0yXiHLVhThprFuTLTsqq3S4Qj4xkU23V/C+Zq306TLs6mgJoh/Q/ytHeZIwg82fSf0rjvSLvZt3ziw4FggpV8bFjZpHUsKGqczzgSNvMAss= 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: Add test for expanding range in RCU mode. If we use the fast path of the slot store to expand range in RCU mode, this test will fail. Signed-off-by: Peng Zhang --- tools/testing/radix-tree/maple.c | 75 ++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/tools/testing/radix-tree/maple.c b/tools/testing/radix-tree/maple.c index c42033172276..0887826946f9 100644 --- a/tools/testing/radix-tree/maple.c +++ b/tools/testing/radix-tree/maple.c @@ -45,6 +45,13 @@ struct rcu_test_struct2 { unsigned long last[RCU_RANGE_COUNT]; }; +struct rcu_test_struct3 { + struct maple_tree *mt; + unsigned long index; + unsigned long last; + bool stop; +}; + struct rcu_reader_struct { unsigned int id; int mod; @@ -34954,6 +34961,70 @@ void run_check_rcu(struct maple_tree *mt, struct rcu_test_struct *vals) MT_BUG_ON(mt, !vals->seen_entry2); } +static void *rcu_slot_store_reader(void *ptr) +{ + struct rcu_test_struct3 *test = ptr; + MA_STATE(mas, test->mt, test->index, test->index); + + rcu_register_thread(); + + rcu_read_lock(); + while (!test->stop) { + mas_walk(&mas); + /* The length of growth to both sides must be equal. */ + RCU_MT_BUG_ON(test, (test->index - mas.index) != + (mas.last - test->last)); + } + rcu_read_unlock(); + + rcu_unregister_thread(); + return NULL; +} + +static noinline void run_check_rcu_slot_store(struct maple_tree *mt) +{ + pthread_t readers[20]; + int range_cnt = 200, i, limit = 10000; + unsigned long len = ULONG_MAX / range_cnt, start, end; + struct rcu_test_struct3 test = {.stop = false, .mt = mt}; + + start = range_cnt / 2 * len; + end = start + len - 1; + test.index = start; + test.last = end; + + for (i = 0; i < range_cnt; i++) { + mtree_store_range(mt, i * len, i * len + len - 1, + xa_mk_value(i * 100), GFP_KERNEL); + } + + mt_set_in_rcu(mt); + MT_BUG_ON(mt, !mt_in_rcu(mt)); + + for (i = 0; i < ARRAY_SIZE(readers); i++) { + if (pthread_create(&readers[i], NULL, rcu_slot_store_reader, + &test)) { + perror("creating reader thread"); + exit(1); + } + } + + usleep(5); + + while (limit--) { + /* Step by step, expand the most middle range to both sides. */ + mtree_store_range(mt, --start, ++end, xa_mk_value(100), + GFP_KERNEL); + } + + test.stop = true; + + while (i--) + pthread_join(readers[i], NULL); + + mt_validate(mt); +} + static noinline void run_check_rcu_slowread(struct maple_tree *mt, struct rcu_test_struct *vals) { @@ -35206,6 +35277,10 @@ static noinline void __init check_rcu_threaded(struct maple_tree *mt) run_check_rcu(mt, &vals); mtree_destroy(mt); + /* Check expanding range in RCU mode */ + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + run_check_rcu_slot_store(mt); + mtree_destroy(mt); /* Forward writer for rcu stress */ mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE);