From nobody Wed Nov 5 14:35:43 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1534874831861182.03827663033496; Tue, 21 Aug 2018 11:07:11 -0700 (PDT) Received: from localhost ([::1]:55292 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsB3d-00083i-AQ for importer@patchew.org; Tue, 21 Aug 2018 14:07:09 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33732) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fsA4o-0002IR-2h for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fsA4V-0006n2-Mw for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:04:13 -0400 Received: from mail-wr1-x430.google.com ([2a00:1450:4864:20::430]:41977) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fsA4U-0006Xl-SJ for qemu-devel@nongnu.org; Tue, 21 Aug 2018 13:03:59 -0400 Received: by mail-wr1-x430.google.com with SMTP id z96-v6so7812716wrb.8 for ; Tue, 21 Aug 2018 10:03:50 -0700 (PDT) Received: from 640k.lan (dynamic-adsl-78-12-184-244.clienti.tiscali.it. [78.12.184.244]) by smtp.gmail.com with ESMTPSA id v6-v6sm2608955wmc.43.2018.08.21.10.03.48 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Aug 2018 10:03:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=b65nkwu+id8IbL8bANLc6YNjQ3I7Ytw6+hbXnoyAzEI=; b=mZtIQbDG460tFnXdg8a6ifYaQg+otPoTCobjuSopi8Ekj6mP0E8S8E6P0haZtR85r/ U1iEkJ+uvQ4yszGE3b0mIOPfdPwJIel7ShyOR7zpRq8GGi8AyQ0XMKZZCd7fWuPoHpLJ Fh1Jk49/0N/uq40ujaOHY1NZuNqGxspbj9eJm46w0zeiRq6cbN0XNlrsXNyQvdS0Tia2 jjC6Cx+dswEXIPCcaC0HdYwI1B4Aciaolzgu26w5Cj5jmcquxlyTdYpEgVl9LDn8XfMt nQ5eFrnc7hp8TbdGunKWePjn9NRqc1ZKgWtGKibq7uiQZRGEfTPSaqZRdzUeX7JHhYWp PZFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=b65nkwu+id8IbL8bANLc6YNjQ3I7Ytw6+hbXnoyAzEI=; b=dahKAlXZ4Q012JxXB+G+HFSg+nrg8NklBdtTIGeAEj3NfnAGqLYL/xUE7A/hvNbc/M gLguMzkTqWtjbqcV4Gl2ZhU/TONHhE9DM5oJdWedJ2QE+TCF7TL/IPjHspRQE9y+ssIr solSB0yY2d5nx7tb4ePNBLTH+KCcvI/nzt3e98mi2QUExnoEUbFdKNlrmNuD68J8Agd8 J/Ke5fPTPyOBovDJULfanqvRU1+IZm0lipZ2wuqsAAKva9/4YTHGZrJDBZfdm1A3igRE ddGDKixd9mSRPI2RF3WyQLtvXs1Kudmq1/QJKBZSKJj23V8qhgztyxauH72gmy5XySpD 4YQQ== X-Gm-Message-State: APzg51AlytAPsj28sYlqqnl3Gv+H/RivWkFeqcADs5yzYus2uHcXjjuN Fi2S63lLcuSQY1TXUsO0j/J+qs/H X-Google-Smtp-Source: ANB0VdY/vV2EjRsvQC9Wi/imwWteXsf+7EmwPwWh4Sz6m+66ByjN7D0kNsPjLCnUpQxDwe0gHDBbSQ== X-Received: by 2002:adf:f7c4:: with SMTP id a4-v6mr8816085wrq.86.1534871029770; Tue, 21 Aug 2018 10:03:49 -0700 (PDT) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 21 Aug 2018 19:02:14 +0200 Message-Id: <1534870966-9287-43-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> References: <1534870966-9287-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::430 Subject: [Qemu-devel] [PULL 42/74] test-rcu-list: abstract the list implementation X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Emilio G. Cota" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDMRC_1 RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: "Emilio G. Cota" So that we can test other implementations. Signed-off-by: Emilio G. Cota Message-Id: <20180819091335.22863-8-cota@braap.org> Signed-off-by: Paolo Bonzini --- tests/test-rcu-list.c | 42 ++++++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/tests/test-rcu-list.c b/tests/test-rcu-list.c index dc58091..9bd1136 100644 --- a/tests/test-rcu-list.c +++ b/tests/test-rcu-list.c @@ -82,9 +82,16 @@ static void wait_all_threads(void) n_threads =3D 0; } =20 +#ifndef TEST_LIST_TYPE +#define TEST_LIST_TYPE 1 +#endif =20 struct list_element { +#if TEST_LIST_TYPE =3D=3D 1 QLIST_ENTRY(list_element) entry; +#else +#error Invalid TEST_LIST_TYPE +#endif struct rcu_head rcu; }; =20 @@ -96,8 +103,19 @@ static void reclaim_list_el(struct rcu_head *prcu) atomic_set(&n_reclaims, n_reclaims + 1); } =20 +#if TEST_LIST_TYPE =3D=3D 1 static QLIST_HEAD(q_list_head, list_element) Q_list_head; =20 +#define TEST_NAME "qlist" +#define TEST_LIST_REMOVE_RCU QLIST_REMOVE_RCU +#define TEST_LIST_INSERT_AFTER_RCU QLIST_INSERT_AFTER_RCU +#define TEST_LIST_INSERT_HEAD_RCU QLIST_INSERT_HEAD_RCU +#define TEST_LIST_FOREACH_RCU QLIST_FOREACH_RCU +#define TEST_LIST_FOREACH_SAFE_RCU QLIST_FOREACH_SAFE_RCU +#else +#error Invalid TEST_LIST_TYPE +#endif + static void *rcu_q_reader(void *arg) { long long n_reads_local =3D 0; @@ -113,7 +131,7 @@ static void *rcu_q_reader(void *arg) =20 while (atomic_read(&goflag) =3D=3D GOFLAG_RUN) { rcu_read_lock(); - QLIST_FOREACH_RCU(el, &Q_list_head, entry) { + TEST_LIST_FOREACH_RCU(el, &Q_list_head, entry) { n_reads_local++; if (atomic_read(&goflag) =3D=3D GOFLAG_STOP) { break; @@ -150,10 +168,10 @@ static void *rcu_q_updater(void *arg) target_el =3D select_random_el(RCU_Q_LEN); j =3D 0; /* FOREACH_RCU could work here but let's use both macros */ - QLIST_FOREACH_SAFE_RCU(prev_el, &Q_list_head, entry, el) { + TEST_LIST_FOREACH_SAFE_RCU(prev_el, &Q_list_head, entry, el) { j++; if (target_el =3D=3D j) { - QLIST_REMOVE_RCU(prev_el, entry); + TEST_LIST_REMOVE_RCU(prev_el, entry); /* may be more than one updater in the future */ call_rcu1(&prev_el->rcu, reclaim_list_el); n_removed_local++; @@ -165,12 +183,12 @@ static void *rcu_q_updater(void *arg) } target_el =3D select_random_el(RCU_Q_LEN); j =3D 0; - QLIST_FOREACH_RCU(el, &Q_list_head, entry) { + TEST_LIST_FOREACH_RCU(el, &Q_list_head, entry) { j++; if (target_el =3D=3D j) { - prev_el =3D g_new(struct list_element, 1); + struct list_element *new_el =3D g_new(struct list_element,= 1); n_nodes +=3D n_nodes_local; - QLIST_INSERT_BEFORE_RCU(el, prev_el, entry); + TEST_LIST_INSERT_AFTER_RCU(el, new_el, entry); break; } } @@ -195,7 +213,7 @@ static void rcu_qtest_init(void) srand(time(0)); for (i =3D 0; i < RCU_Q_LEN; i++) { new_el =3D g_new(struct list_element, 1); - QLIST_INSERT_HEAD_RCU(&Q_list_head, new_el, entry); + TEST_LIST_INSERT_HEAD_RCU(&Q_list_head, new_el, entry); } qemu_mutex_lock(&counts_mutex); n_nodes +=3D RCU_Q_LEN; @@ -230,8 +248,8 @@ static void rcu_qtest(const char *test, int duration, i= nt nreaders) create_thread(rcu_q_updater); rcu_qtest_run(duration, nreaders); =20 - QLIST_FOREACH_SAFE_RCU(prev_el, &Q_list_head, entry, el) { - QLIST_REMOVE_RCU(prev_el, entry); + TEST_LIST_FOREACH_SAFE_RCU(prev_el, &Q_list_head, entry, el) { + TEST_LIST_REMOVE_RCU(prev_el, entry); call_rcu1(&prev_el->rcu, reclaim_list_el); n_removed_local++; } @@ -292,9 +310,9 @@ int main(int argc, char *argv[]) } else { gtest_seconds =3D 20; } - g_test_add_func("/rcu/qlist/single-threaded", gtest_rcuq_one); - g_test_add_func("/rcu/qlist/short-few", gtest_rcuq_few); - g_test_add_func("/rcu/qlist/long-many", gtest_rcuq_many); + g_test_add_func("/rcu/"TEST_NAME"/single-threaded", gtest_rcuq= _one); + g_test_add_func("/rcu/"TEST_NAME"/short-few", gtest_rcuq_few); + g_test_add_func("/rcu/"TEST_NAME"/long-many", gtest_rcuq_many); g_test_in_charge =3D 1; return g_test_run(); } --=20 1.8.3.1