From nobody Wed Nov 5 07:15:25 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; 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 Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1534670180186886.6868360242814; Sun, 19 Aug 2018 02:16:20 -0700 (PDT) Received: from localhost ([::1]:42134 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frJoe-0003wt-Jo for importer@patchew.org; Sun, 19 Aug 2018 05:16:08 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57169) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frJmS-0002N6-85 for qemu-devel@nongnu.org; Sun, 19 Aug 2018 05:13:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1frJmP-0000da-NB for qemu-devel@nongnu.org; Sun, 19 Aug 2018 05:13:52 -0400 Received: from out1-smtp.messagingengine.com ([66.111.4.25]:51711) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1frJmP-0000cK-8B; Sun, 19 Aug 2018 05:13:49 -0400 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.nyi.internal (Postfix) with ESMTP id 2E5A021AFB; Sun, 19 Aug 2018 05:13:48 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute4.internal (MEProxy); Sun, 19 Aug 2018 05:13:48 -0400 Received: from localhost (flamenco.cs.columbia.edu [128.59.20.216]) by mail.messagingengine.com (Postfix) with ESMTPA id 094BF10286; Sun, 19 Aug 2018 05:13:46 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=braap.org; h=cc :date:from:in-reply-to:message-id:references:subject:to :x-me-sender:x-me-sender:x-sasl-enc; s=mesmtp; bh=mnEnd6+OngbtoF QKaX5wMyPTIOlP1IBVd1afafuiqHY=; b=orr8CiLo1C6PV6WAJ8WPONzhmSlfb8 yWRdm31bUP4OQJkYXQa+USEfUrvfpYyexk+dDdXTfeoFftORgsUVZNlW7XmhPMIY v1WxboUzLXQLJ8ad7kln8gr6OrizijPQpoz0a9Hg30vLx3Osc9O5+VKarFvLRmii pDbWe87W4G8UQ= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:date:from:in-reply-to:message-id :references:subject:to:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=mnEnd6+OngbtoFQKaX5wMyPTIOlP1IBVd1afafuiqHY=; b=ITWhPXBg AZ+ZnQGDOdx26VGvz5ErrHuT4CA4PavLIjiL92zqM2W3zN7su+WzgXAhfGudo9u1 dECUEV6pUYQVhuteTw2WZ+XV8Q60vDaOqKyh4WF21Ncu8Gymda/1X1t5nQAWE97w jHKBNO01BPDLCcwQwEQKnZn+BHlLOcpPxtjiGvSz/IY8DVtptCEYq3nV7OP0abeq 0Z0+WmJ61lSlaKOc+JyYa/ykh2TtZ24gW3Zngncmf5pFLoOf2TZwpuN/gXIqaoXB gx2qITHdwzqKdqNPKKoEdkDCEUmuIZPuaU0hnpWC1lvfZkGiIICAyBsf4vIXu07r x6f1mVnBGRHcuQ== X-ME-Proxy: X-ME-Sender: From: "Emilio G. Cota" To: qemu-devel@nongnu.org Date: Sun, 19 Aug 2018 05:13:25 -0400 Message-Id: <20180819091335.22863-2-cota@braap.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180819091335.22863-1-cota@braap.org> References: <20180819091335.22863-1-cota@braap.org> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 66.111.4.25 Subject: [Qemu-devel] [PATCH v2 01/11] rcu_queue: use atomic_set in QLIST_REMOVE_RCU 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: Peter Crosthwaite , Riku Voipio , Alexander Graf , Laurent Vivier , qemu-ppc@nongnu.org, Paolo Bonzini , David Gibson , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" To avoid undefined behaviour. Signed-off-by: Emilio G. Cota --- include/qemu/rcu_queue.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/qemu/rcu_queue.h b/include/qemu/rcu_queue.h index 01be77407b..dd7b3be043 100644 --- a/include/qemu/rcu_queue.h +++ b/include/qemu/rcu_queue.h @@ -112,7 +112,7 @@ extern "C" { (elm)->field.le_next->field.le_prev =3D \ (elm)->field.le_prev; \ } \ - *(elm)->field.le_prev =3D (elm)->field.le_next; \ + atomic_set((elm)->field.le_prev, (elm)->field.le_next); \ } while (/*CONSTCOND*/0) =20 /* List traversal must occur within an RCU critical section. */ --=20 2.17.1 From nobody Wed Nov 5 07:15:25 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; 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 Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1534670178426349.9901060300807; Sun, 19 Aug 2018 02:16:18 -0700 (PDT) Received: from localhost ([::1]:42135 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frJoe-0003xT-3N for importer@patchew.org; Sun, 19 Aug 2018 05:16:08 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57167) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frJmS-0002N4-83 for qemu-devel@nongnu.org; Sun, 19 Aug 2018 05:13:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1frJmO-0000cs-TP for qemu-devel@nongnu.org; Sun, 19 Aug 2018 05:13:52 -0400 Received: from out1-smtp.messagingengine.com ([66.111.4.25]:36535) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1frJmO-0000c7-MV; Sun, 19 Aug 2018 05:13:48 -0400 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.nyi.internal (Postfix) with ESMTP id 2E60821B01; Sun, 19 Aug 2018 05:13:48 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute4.internal (MEProxy); Sun, 19 Aug 2018 05:13:48 -0400 Received: from localhost (flamenco.cs.columbia.edu [128.59.20.216]) by mail.messagingengine.com (Postfix) with ESMTPA id 40CB510288; Sun, 19 Aug 2018 05:13:46 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=braap.org; h=cc :date:from:in-reply-to:message-id:references:subject:to :x-me-sender:x-me-sender:x-sasl-enc; s=mesmtp; bh=8gNvhbWW83SstK R15cwlZeTlWyzZ8QjeFrYICahEEck=; b=XV6K/flliLRunEELUqdzB/PXu1gumM wI+nUE/b4DUxoP/e/XU5OWnd7YEicvQDyeiYLMoKyHKur1mKuUbTe8E3xMT69FQ5 1PakmlPWIuJ5aqbHcYPIdvrV9X/DpC0nplWtbr2uGinmZPfpJLT6g0vgrzI1++uw 0OsjH/tbER3wg= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:date:from:in-reply-to:message-id :references:subject:to:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=8gNvhbWW83SstKR15cwlZeTlWyzZ8QjeFrYICahEEck=; b=vQ0MEohr hE2TbvhBxM25ZOVt39vmbhBksd/2R+3RYlcjFASwQl3JhbhZqCpkdzKZ5KdP9056 PyVIWTu8Qr5Ok/ZJslpapt9/czGlYmF3wLgEslLil+AfyCkmfBv5bCuPqCR+rDx3 PecB/dCaLfYO3n/Syiz9xKDsADRLh7d2A2tQ6a2GMn0Pm9qEElUKNS98YxfNfoaf ODwTA8wF3mQfrk2pZFqOBVNZbE/RoeMO5eD4jJ1+XWQf9E4x+4ByPQ5WsBXWS72V ExPehg4ID/ZQVmwanrzwTiSsVMzcVry9jugcEz72qEbMIM7MDXopRugFMGJlmWqF O6zRXMC8CNOFmA== X-ME-Proxy: X-ME-Sender: From: "Emilio G. Cota" To: qemu-devel@nongnu.org Date: Sun, 19 Aug 2018 05:13:26 -0400 Message-Id: <20180819091335.22863-3-cota@braap.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180819091335.22863-1-cota@braap.org> References: <20180819091335.22863-1-cota@braap.org> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 66.111.4.25 Subject: [Qemu-devel] [PATCH v2 02/11] rcu_queue: remove barrier from QLIST_EMPTY_RCU 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: Peter Crosthwaite , Riku Voipio , Alexander Graf , Laurent Vivier , qemu-ppc@nongnu.org, Paolo Bonzini , David Gibson , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" It's unnecessary because the pointer isn't dereferenced. Signed-off-by: Emilio G. Cota --- include/qemu/rcu_queue.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/qemu/rcu_queue.h b/include/qemu/rcu_queue.h index dd7b3be043..6881ea5274 100644 --- a/include/qemu/rcu_queue.h +++ b/include/qemu/rcu_queue.h @@ -36,7 +36,7 @@ extern "C" { /* * List access methods. */ -#define QLIST_EMPTY_RCU(head) (atomic_rcu_read(&(head)->lh_first) =3D=3D N= ULL) +#define QLIST_EMPTY_RCU(head) (atomic_read(&(head)->lh_first) =3D=3D NULL) #define QLIST_FIRST_RCU(head) (atomic_rcu_read(&(head)->lh_first)) #define QLIST_NEXT_RCU(elm, field) (atomic_rcu_read(&(elm)->field.le_next)) =20 --=20 2.17.1 From nobody Wed Nov 5 07:15:25 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; 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 Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1534670178499726.5770709655233; Sun, 19 Aug 2018 02:16:18 -0700 (PDT) Received: from localhost ([::1]:42137 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frJog-0003z6-Fn for importer@patchew.org; Sun, 19 Aug 2018 05:16:10 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57165) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frJmS-0002N2-7R for qemu-devel@nongnu.org; Sun, 19 Aug 2018 05:13:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1frJmO-0000cO-Qq for qemu-devel@nongnu.org; Sun, 19 Aug 2018 05:13:52 -0400 Received: from out1-smtp.messagingengine.com ([66.111.4.25]:56651) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1frJmO-0000bx-K8; Sun, 19 Aug 2018 05:13:48 -0400 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.nyi.internal (Postfix) with ESMTP id 2FC6921B10; Sun, 19 Aug 2018 05:13:48 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute4.internal (MEProxy); Sun, 19 Aug 2018 05:13:48 -0400 Received: from localhost (flamenco.cs.columbia.edu [128.59.20.216]) by mail.messagingengine.com (Postfix) with ESMTPA id 7776B1025D; Sun, 19 Aug 2018 05:13:46 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=braap.org; h=cc :date:from:in-reply-to:message-id:references:subject:to :x-me-sender:x-me-sender:x-sasl-enc; s=mesmtp; bh=0KjbXVqCCBCfrs SZYrSMztKsFeEBc7OXmevoNtrMLiQ=; b=vRA+fnld39CxqYaq0tyNLUY2YLi1kG tvhOrFgUYpm8q9y1K/fWQ8sWFj7pm1jcPQlhF5M2FM3DIvStiFILcFYmhg17/Rc8 QbaR93pgf8vSEY0ocbpqfP+j0cTO6ZsFll1y45t9MLJb2cDLxm99mvVVc9YXaN3P VgSt1X9Y9TObE= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:date:from:in-reply-to:message-id :references:subject:to:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=0KjbXVqCCBCfrsSZYrSMztKsFeEBc7OXmevoNtrMLiQ=; b=uzM4vgMQ eajyk7draN08QsvC0zQYyEBy1GUnO1wfQnzlLgXqi6l1FATwfOKfrwOghb8SfLtz gx3RZ/sSL8Bbex4Ya9nhMtz7jv0TIPsz4vsFDF+Thjnxn9Pikm7vt9UoU/2b2MwJ Xp+fwurXsAQY6hWSiWoIh74VtRxh0cq/5H7+Yn573mFXowtxURNICwef5bXJ6/Ti df86NwzOTDijJv5B4yeBgUwFFfqPEMpZNl0InLyF9yNHbtfcls3uDZfyGMxjZJJT E2hMfwoVwd5sUjxirSWvVnTQxBFawL4KW7tSEda7/icU3jc0vvR5UclL9xULlbl3 YuqiJFHEeuuqNw== X-ME-Proxy: X-ME-Sender: From: "Emilio G. Cota" To: qemu-devel@nongnu.org Date: Sun, 19 Aug 2018 05:13:27 -0400 Message-Id: <20180819091335.22863-4-cota@braap.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180819091335.22863-1-cota@braap.org> References: <20180819091335.22863-1-cota@braap.org> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 66.111.4.25 Subject: [Qemu-devel] [PATCH v2 03/11] rcu_queue: add RCU QSIMPLEQ 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: Peter Crosthwaite , Riku Voipio , Alexander Graf , Laurent Vivier , qemu-ppc@nongnu.org, Paolo Bonzini , David Gibson , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Emilio G. Cota --- include/qemu/rcu_queue.h | 65 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/include/qemu/rcu_queue.h b/include/qemu/rcu_queue.h index 6881ea5274..e0395c989a 100644 --- a/include/qemu/rcu_queue.h +++ b/include/qemu/rcu_queue.h @@ -128,6 +128,71 @@ extern "C" { ((next_var) =3D atomic_rcu_read(&(var)->field.le_next), 1); \ (var) =3D (next_var)) =20 +/* + * RCU simple queue + */ + +/* Simple queue access methods */ +#define QSIMPLEQ_EMPTY_RCU(head) (atomic_read(&(head)->sqh_first) =3D= =3D NULL) +#define QSIMPLEQ_FIRST_RCU(head) atomic_rcu_read(&(head)->sqh_first) +#define QSIMPLEQ_NEXT_RCU(elm, field) atomic_rcu_read(&(elm)->field.sqe_n= ext) + +/* Simple queue functions */ +#define QSIMPLEQ_INSERT_HEAD_RCU(head, elm, field) do { \ + (elm)->field.sqe_next =3D (head)->sqh_first; \ + if ((elm)->field.sqe_next =3D=3D NULL) { \ + (head)->sqh_last =3D &(elm)->field.sqe_next; \ + } \ + atomic_rcu_set(&(head)->sqh_first, (elm)); \ +} while (/*CONSTCOND*/0) + +#define QSIMPLEQ_INSERT_TAIL_RCU(head, elm, field) do { \ + (elm)->field.sqe_next =3D NULL; \ + atomic_rcu_set((head)->sqh_last, (elm)); \ + (head)->sqh_last =3D &(elm)->field.sqe_next; \ +} while (/*CONSTCOND*/0) + +#define QSIMPLEQ_INSERT_AFTER_RCU(head, listelm, elm, field) do { \ + (elm)->field.sqe_next =3D (listelm)->field.sqe_next; \ + if ((elm)->field.sqe_next =3D=3D NULL) { = \ + (head)->sqh_last =3D &(elm)->field.sqe_next; \ + } \ + atomic_rcu_set(&(listelm)->field.sqe_next, (elm)); \ +} while (/*CONSTCOND*/0) + +#define QSIMPLEQ_REMOVE_HEAD_RCU(head, field) do { \ + atomic_set(&(head)->sqh_first, (head)->sqh_first->field.sqe_next); \ + if ((head)->sqh_first =3D=3D NULL) { = \ + (head)->sqh_last =3D &(head)->sqh_first; \ + } \ +} while (/*CONSTCOND*/0) + +#define QSIMPLEQ_REMOVE_RCU(head, elm, type, field) do { \ + if ((head)->sqh_first =3D=3D (elm)) { \ + QSIMPLEQ_REMOVE_HEAD_RCU((head), field); \ + } else { \ + struct type *curr =3D (head)->sqh_first; \ + while (curr->field.sqe_next !=3D (elm)) { \ + curr =3D curr->field.sqe_next; \ + } \ + atomic_set(&curr->field.sqe_next, \ + curr->field.sqe_next->field.sqe_next); \ + if (curr->field.sqe_next =3D=3D NULL) { \ + (head)->sqh_last =3D &(curr)->field.sqe_next; \ + } \ + } \ +} while (/*CONSTCOND*/0) + +#define QSIMPLEQ_FOREACH_RCU(var, head, field) \ + for ((var) =3D atomic_rcu_read(&(head)->sqh_first); \ + (var); \ + (var) =3D atomic_rcu_read(&(var)->field.sqe_next)) + +#define QSIMPLEQ_FOREACH_SAFE_RCU(var, head, field, next) \ + for ((var) =3D atomic_rcu_read(&(head)->sqh_first); = \ + (var) && ((next) =3D atomic_rcu_read(&(var)->field.sqe_next), 1);= \ + (var) =3D (next)) + #ifdef __cplusplus } #endif --=20 2.17.1 From nobody Wed Nov 5 07:15:25 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; 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 Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1534670541211737.534312749237; Sun, 19 Aug 2018 02:22:21 -0700 (PDT) Received: from localhost ([::1]:42166 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frJuU-000109-Ex for importer@patchew.org; Sun, 19 Aug 2018 05:22:10 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57168) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frJmS-0002N5-81 for qemu-devel@nongnu.org; Sun, 19 Aug 2018 05:13:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1frJmO-0000ch-Rr for qemu-devel@nongnu.org; Sun, 19 Aug 2018 05:13:52 -0400 Received: from out1-smtp.messagingengine.com ([66.111.4.25]:39845) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1frJmO-0000bz-KK; Sun, 19 Aug 2018 05:13:48 -0400 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.nyi.internal (Postfix) with ESMTP id 31B2621B25; Sun, 19 Aug 2018 05:13:48 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute4.internal (MEProxy); Sun, 19 Aug 2018 05:13:48 -0400 Received: from localhost (flamenco.cs.columbia.edu [128.59.20.216]) by mail.messagingengine.com (Postfix) with ESMTPA id A947110289; Sun, 19 Aug 2018 05:13:46 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=braap.org; h=cc :date:from:in-reply-to:message-id:references:subject:to :x-me-sender:x-me-sender:x-sasl-enc; s=mesmtp; bh=zWVh82SrZ/FFWt UWQwEuw4yHQDntubnMVguzfwSptRs=; b=K5Eim/ApQvDSQY+izAy4d/zmQ8Qor0 MaMIHl/9Jt6EkqOlvTKB7kJOqKqiWh9wpYV+0acFP2ShhqBxZnicy8V6Y9rSsrej PRZov8VrcYdKqkz/Vt5Is557LC17+oDNgoOgfvVtUxEN+vAq4Msly5usJaGgYW5D k5idXnwu3rlSE= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:date:from:in-reply-to:message-id :references:subject:to:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=zWVh82SrZ/FFWtUWQwEuw4yHQDntubnMVguzfwSptRs=; b=UTkUizCM bs+FqfJhYb8MTm740UtgCuD6fNKAurIp+KmQJkbH/vuyAP/CSgW9Y/aSbHLw6MTt Jb2uUrfP5Vc3DK0P5TOUmybJ0iH/IWdgSL6oM6Jy+xZz9AtdPUeB2SZzhxpa1CFI W4T1Whx0Hs5QBCCuP0DampPAebZ+Z+yVCjxnlOMytNFwzePHTPL/a3vV9gFWGfCC eLWSp3ZRr2Tuto2HGPdJUkCaxCviZUnIDuHqZeEp4GQRG43iXjtRdsWY//TDMYlb t7jAt6lYUBsbdod8tH+uzX6nTca7US1hWOr/Sy9wTR8nyz6g3ppCdF13PJNqeWRu 5jXlQKRa3+3mwQ== X-ME-Proxy: X-ME-Sender: From: "Emilio G. Cota" To: qemu-devel@nongnu.org Date: Sun, 19 Aug 2018 05:13:28 -0400 Message-Id: <20180819091335.22863-5-cota@braap.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180819091335.22863-1-cota@braap.org> References: <20180819091335.22863-1-cota@braap.org> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 66.111.4.25 Subject: [Qemu-devel] [PATCH v2 04/11] rcu_queue: add RCU QTAILQ 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: Peter Crosthwaite , Riku Voipio , Alexander Graf , Laurent Vivier , qemu-ppc@nongnu.org, Paolo Bonzini , David Gibson , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Emilio G. Cota --- include/qemu/rcu_queue.h | 66 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/include/qemu/rcu_queue.h b/include/qemu/rcu_queue.h index e0395c989a..904b3372dc 100644 --- a/include/qemu/rcu_queue.h +++ b/include/qemu/rcu_queue.h @@ -193,6 +193,72 @@ extern "C" { (var) && ((next) =3D atomic_rcu_read(&(var)->field.sqe_next), 1);= \ (var) =3D (next)) =20 +/* + * RCU tail queue + */ + +/* Tail queue access methods */ +#define QTAILQ_EMPTY_RCU(head) (atomic_read(&(head)->tqh_first) =3D= =3D NULL) +#define QTAILQ_FIRST_RCU(head) atomic_rcu_read(&(head)->tqh_first) +#define QTAILQ_NEXT_RCU(elm, field) atomic_rcu_read(&(elm)->field.tqe_nex= t) + +/* Tail queue functions */ +#define QTAILQ_INSERT_HEAD_RCU(head, elm, field) do { \ + (elm)->field.tqe_next =3D (head)->tqh_first; \ + if ((elm)->field.tqe_next !=3D NULL) { \ + (head)->tqh_first->field.tqe_prev =3D &(elm)->field.tqe_next; \ + } else { \ + (head)->tqh_last =3D &(elm)->field.tqe_next; \ + } \ + atomic_rcu_set(&(head)->tqh_first, (elm)); \ + (elm)->field.tqe_prev =3D &(head)->tqh_first; \ +} while (/*CONSTCOND*/0) + +#define QTAILQ_INSERT_TAIL_RCU(head, elm, field) do { \ + (elm)->field.tqe_next =3D NULL; \ + (elm)->field.tqe_prev =3D (head)->tqh_last; \ + atomic_rcu_set((head)->tqh_last, (elm)); \ + (head)->tqh_last =3D &(elm)->field.tqe_next; \ +} while (/*CONSTCOND*/0) + +#define QTAILQ_INSERT_AFTER_RCU(head, listelm, elm, field) do { \ + (elm)->field.tqe_next =3D (listelm)->field.tqe_next; \ + if ((elm)->field.tqe_next !=3D NULL) { \ + (elm)->field.tqe_next->field.tqe_prev =3D &(elm)->field.tqe_next; \ + } else { \ + (head)->tqh_last =3D &(elm)->field.tqe_next; \ + } \ + atomic_rcu_set(&(listelm)->field.tqe_next, (elm)); \ + (elm)->field.tqe_prev =3D &(listelm)->field.tqe_next; \ +} while (/*CONSTCOND*/0) + +#define QTAILQ_INSERT_BEFORE_RCU(listelm, elm, field) do { \ + (elm)->field.tqe_prev =3D (listelm)->field.tqe_prev; \ + (elm)->field.tqe_next =3D (listelm); \ + atomic_rcu_set((listelm)->field.tqe_prev, (elm)); \ + (listelm)->field.tqe_prev =3D &(elm)->field.tqe_next; \ + } while (/*CONSTCOND*/0) + +#define QTAILQ_REMOVE_RCU(head, elm, field) do { \ + if (((elm)->field.tqe_next) !=3D NULL) { \ + (elm)->field.tqe_next->field.tqe_prev =3D (elm)->field.tqe_prev; \ + } else { \ + (head)->tqh_last =3D (elm)->field.tqe_prev; \ + } \ + atomic_set((elm)->field.tqe_prev, (elm)->field.tqe_next); \ + (elm)->field.tqe_prev =3D NULL; \ +} while (/*CONSTCOND*/0) + +#define QTAILQ_FOREACH_RCU(var, head, field) \ + for ((var) =3D atomic_rcu_read(&(head)->tqh_first); \ + (var); \ + (var) =3D atomic_rcu_read(&(var)->field.tqe_next)) + +#define QTAILQ_FOREACH_SAFE_RCU(var, head, field, next) \ + for ((var) =3D atomic_rcu_read(&(head)->tqh_first); = \ + (var) && ((next) =3D atomic_rcu_read(&(var)->field.tqe_next), 1);= \ + (var) =3D (next)) + #ifdef __cplusplus } #endif --=20 2.17.1 From nobody Wed Nov 5 07:15:25 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; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1534670369965163.2424705470561; Sun, 19 Aug 2018 02:19:29 -0700 (PDT) Received: from localhost ([::1]:42148 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frJrt-0006gP-0b for importer@patchew.org; Sun, 19 Aug 2018 05:19:29 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57181) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frJmS-0002NB-9M for qemu-devel@nongnu.org; Sun, 19 Aug 2018 05:13:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1frJmO-0000cS-Rx for qemu-devel@nongnu.org; Sun, 19 Aug 2018 05:13:52 -0400 Received: from out1-smtp.messagingengine.com ([66.111.4.25]:36889) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1frJmO-0000by-KO; Sun, 19 Aug 2018 05:13:48 -0400 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.nyi.internal (Postfix) with ESMTP id 2E68921B0B; Sun, 19 Aug 2018 05:13:48 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute4.internal (MEProxy); Sun, 19 Aug 2018 05:13:48 -0400 Received: from localhost (flamenco.cs.columbia.edu [128.59.20.216]) by mail.messagingengine.com (Postfix) with ESMTPA id D9E2F1028A; Sun, 19 Aug 2018 05:13:46 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=braap.org; h=cc :date:from:in-reply-to:message-id:references:subject:to :x-me-sender:x-me-sender:x-sasl-enc; s=mesmtp; bh=UWe7gbeHKPA7MQ OWnP7ye1WOnLzOpDb9QT2SVmI0Ruc=; b=DifJwtzVpRv8gBUL5entOZGYc8y0Um XM81FLBP7f45LY5yuyU9D1Kb+qDJTL4tj1bCC4qycrXECTfomwk1PwqvvQheyc1b QUhh3Yjx4PTt9IzH9r7JCjYIlbrkMEhzjvDL3pSohTGRUP0nA8ltmjhb8G1NxvZL ziglLn2Jx140M= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:date:from:in-reply-to:message-id :references:subject:to:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=UWe7gbeHKPA7MQOWnP7ye1WOnLzOpDb9QT2SVmI0Ruc=; b=YF4+zsfL vNHvAMvTs/8bifCFpbNWyxl0aW1DMi0lT4F4pPqz5F0M2IVCU8toQwlRh+YYTSuM YFq8n+JBK8bNAAoWBzHRQoZgvQ1tb36FXm+RqzeVUbGhGuBGIkfPFC/2ilmPed31 McUYSvmpFvfQhSdq7Ne6q3xkIXIDbvRmtDP3sl2anmWbq9rZKtVAED1eX7Ezfg16 K2DaVfJvuHBnOuGnJITlvriqAVaRwW0KOUZGgCt/3+BLlPn2XiGt3R8nlegBqp+2 ++ERZbi/ibPy3ARKDA9M4WOshjA3guak2YdB3tCWDkiUA5czupNzxb3+eWX8K+Vb Fq/gtLm6xdc/9A== X-ME-Proxy: X-ME-Sender: From: "Emilio G. Cota" To: qemu-devel@nongnu.org Date: Sun, 19 Aug 2018 05:13:29 -0400 Message-Id: <20180819091335.22863-6-cota@braap.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180819091335.22863-1-cota@braap.org> References: <20180819091335.22863-1-cota@braap.org> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 66.111.4.25 Subject: [Qemu-devel] [PATCH v2 05/11] test-rcu-list: access goflag with atomics 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: Peter Crosthwaite , Riku Voipio , Alexander Graf , Laurent Vivier , qemu-ppc@nongnu.org, Paolo Bonzini , David Gibson , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Instead of declaring it volatile. Signed-off-by: Emilio G. Cota --- tests/test-rcu-list.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/tests/test-rcu-list.c b/tests/test-rcu-list.c index 1514d7ec97..b4ed130081 100644 --- a/tests/test-rcu-list.c +++ b/tests/test-rcu-list.c @@ -44,7 +44,7 @@ static int nthreadsrunning; #define GOFLAG_RUN 1 #define GOFLAG_STOP 2 =20 -static volatile int goflag =3D GOFLAG_INIT; +static int goflag =3D GOFLAG_INIT; =20 #define RCU_READ_RUN 1000 #define RCU_UPDATE_RUN 10 @@ -107,15 +107,15 @@ static void *rcu_q_reader(void *arg) =20 *(struct rcu_reader_data **)arg =3D &rcu_reader; atomic_inc(&nthreadsrunning); - while (goflag =3D=3D GOFLAG_INIT) { + while (atomic_read(&goflag) =3D=3D GOFLAG_INIT) { g_usleep(1000); } =20 - while (goflag =3D=3D GOFLAG_RUN) { + while (atomic_read(&goflag) =3D=3D GOFLAG_RUN) { rcu_read_lock(); QLIST_FOREACH_RCU(el, &Q_list_head, entry) { n_reads_local++; - if (goflag =3D=3D GOFLAG_STOP) { + if (atomic_read(&goflag) =3D=3D GOFLAG_STOP) { break; } } @@ -142,11 +142,11 @@ static void *rcu_q_updater(void *arg) =20 *(struct rcu_reader_data **)arg =3D &rcu_reader; atomic_inc(&nthreadsrunning); - while (goflag =3D=3D GOFLAG_INIT) { + while (atomic_read(&goflag) =3D=3D GOFLAG_INIT) { g_usleep(1000); } =20 - while (goflag =3D=3D GOFLAG_RUN) { + while (atomic_read(&goflag) =3D=3D GOFLAG_RUN) { target_el =3D select_random_el(RCU_Q_LEN); j =3D 0; /* FOREACH_RCU could work here but let's use both macros */ @@ -160,7 +160,7 @@ static void *rcu_q_updater(void *arg) break; } } - if (goflag =3D=3D GOFLAG_STOP) { + if (atomic_read(&goflag) =3D=3D GOFLAG_STOP) { break; } target_el =3D select_random_el(RCU_Q_LEN); @@ -209,9 +209,9 @@ static void rcu_qtest_run(int duration, int nreaders) g_usleep(1000); } =20 - goflag =3D GOFLAG_RUN; + atomic_set(&goflag, GOFLAG_RUN); sleep(duration); - goflag =3D GOFLAG_STOP; + atomic_set(&goflag, GOFLAG_STOP); wait_all_threads(); } =20 --=20 2.17.1 From nobody Wed Nov 5 07:15:25 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; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1534670372476655.7394279983121; Sun, 19 Aug 2018 02:19:32 -0700 (PDT) Received: from localhost ([::1]:42150 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frJrv-0006i9-Au for importer@patchew.org; Sun, 19 Aug 2018 05:19:31 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57183) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frJmS-0002NC-9b for qemu-devel@nongnu.org; Sun, 19 Aug 2018 05:13:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1frJmP-0000dg-NV for qemu-devel@nongnu.org; Sun, 19 Aug 2018 05:13:52 -0400 Received: from out1-smtp.messagingengine.com ([66.111.4.25]:33277) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1frJmP-0000cN-77; Sun, 19 Aug 2018 05:13:49 -0400 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.nyi.internal (Postfix) with ESMTP id 8993C21B6D; Sun, 19 Aug 2018 05:13:48 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute4.internal (MEProxy); Sun, 19 Aug 2018 05:13:48 -0400 Received: from localhost (flamenco.cs.columbia.edu [128.59.20.216]) by mail.messagingengine.com (Postfix) with ESMTPA id 0F2B11028B; Sun, 19 Aug 2018 05:13:47 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=braap.org; h=cc :date:from:in-reply-to:message-id:references:subject:to :x-me-sender:x-me-sender:x-sasl-enc; s=mesmtp; bh=4IvA+m+UPvTXWN wYYKgKuCSUY6hJ5BbEJ2V6CqtJWA4=; b=NBSfR8Bl5PnGd8ZOp8qJQhDOPooZNQ 8PStgEV5BjyfhzgXQw+QVRSwNZ1p6fcim16Cy1Sr1dIsds5stBwt7Vt5j8Q2GbPF BMD5VMst2pi1LS4GoCGjn8iyXnFy828AFvsLHKlWdSJpnTBSd1djXEZ2vD1yALnR mdOMECDaxaKDs= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:date:from:in-reply-to:message-id :references:subject:to:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=4IvA+m+UPvTXWNwYYKgKuCSUY6hJ5BbEJ2V6CqtJWA4=; b=oKRkaHaY tYlJ+D8clz/SpexU8nYAxSOxSKfVYG0NDpTtdD9JO1iFhF722wLmfkBDqsV+o7Ur EFRSfAPZeqFkamPjM7k7PWs89u9/+D0j4Tn2IFpKNGAtEzhTPfvk5Dloo85amG2l SfWG372sFZ9U9U8OfFXv3TuvY+YEDvo55wLKwL8th0/zOLAIvYH449wS79elJkO1 PN/9HYnHJ2ueC3acEnk1UuSCMt/P6/9zb1Q3hllVhNG66ZmMq1ZcyqtW4Whsk1Ae 1tD5O7VK/Fn+NZ6Sx07lls1A7lvMRYOh2WeL1RxY2uDRG5mEv9KcSTKDoay2//zO GcjcVpIdNd09aw== X-ME-Proxy: X-ME-Sender: From: "Emilio G. Cota" To: qemu-devel@nongnu.org Date: Sun, 19 Aug 2018 05:13:30 -0400 Message-Id: <20180819091335.22863-7-cota@braap.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180819091335.22863-1-cota@braap.org> References: <20180819091335.22863-1-cota@braap.org> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 66.111.4.25 Subject: [Qemu-devel] [PATCH v2 06/11] test-rcu-list: access counters with atomics 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: Peter Crosthwaite , Riku Voipio , Alexander Graf , Laurent Vivier , qemu-ppc@nongnu.org, Paolo Bonzini , David Gibson , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Emilio G. Cota --- tests/test-rcu-list.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/tests/test-rcu-list.c b/tests/test-rcu-list.c index b4ed130081..dc58091996 100644 --- a/tests/test-rcu-list.c +++ b/tests/test-rcu-list.c @@ -93,7 +93,7 @@ static void reclaim_list_el(struct rcu_head *prcu) struct list_element *el =3D container_of(prcu, struct list_element, rc= u); g_free(el); /* Accessed only from call_rcu thread. */ - n_reclaims++; + atomic_set(&n_reclaims, n_reclaims + 1); } =20 static QLIST_HEAD(q_list_head, list_element) Q_list_head; @@ -182,7 +182,7 @@ static void *rcu_q_updater(void *arg) qemu_mutex_lock(&counts_mutex); n_nodes +=3D n_nodes_local; n_updates +=3D n_updates_local; - n_nodes_removed +=3D n_removed_local; + atomic_set(&n_nodes_removed, n_nodes_removed + n_removed_local); qemu_mutex_unlock(&counts_mutex); return NULL; } @@ -239,16 +239,18 @@ static void rcu_qtest(const char *test, int duration,= int nreaders) n_nodes_removed +=3D n_removed_local; qemu_mutex_unlock(&counts_mutex); synchronize_rcu(); - while (n_nodes_removed > n_reclaims) { + while (atomic_read(&n_nodes_removed) > atomic_read(&n_reclaims)) { g_usleep(100); synchronize_rcu(); } if (g_test_in_charge) { - g_assert_cmpint(n_nodes_removed, =3D=3D, n_reclaims); + g_assert_cmpint(atomic_read(&n_nodes_removed), =3D=3D, + atomic_read(&n_reclaims)); } else { printf("%s: %d readers; 1 updater; nodes read: " \ "%lld, nodes removed: %lld; nodes reclaimed: %lld\n", - test, nthreadsrunning - 1, n_reads, n_nodes_removed, n_recl= aims); + test, nthreadsrunning - 1, n_reads, + atomic_read(&n_nodes_removed), atomic_read(&n_reclaims)); exit(0); } } --=20 2.17.1 From nobody Wed Nov 5 07:15:25 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; 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 Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1534670541817417.54949714753263; Sun, 19 Aug 2018 02:22:21 -0700 (PDT) Received: from localhost ([::1]:42167 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frJuW-00010K-6z for importer@patchew.org; Sun, 19 Aug 2018 05:22:12 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57174) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frJmS-0002N8-8Y for qemu-devel@nongnu.org; Sun, 19 Aug 2018 05:13:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1frJmP-0000dG-Fa for qemu-devel@nongnu.org; Sun, 19 Aug 2018 05:13:52 -0400 Received: from out1-smtp.messagingengine.com ([66.111.4.25]:53595) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1frJmP-0000cc-4g; Sun, 19 Aug 2018 05:13:49 -0400 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.nyi.internal (Postfix) with ESMTP id 952DC21B84; Sun, 19 Aug 2018 05:13:48 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute4.internal (MEProxy); Sun, 19 Aug 2018 05:13:48 -0400 Received: from localhost (flamenco.cs.columbia.edu [128.59.20.216]) by mail.messagingengine.com (Postfix) with ESMTPA id 51FA71028C; Sun, 19 Aug 2018 05:13:47 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=braap.org; h=cc :date:from:in-reply-to:message-id:references:subject:to :x-me-sender:x-me-sender:x-sasl-enc; s=mesmtp; bh=Pq5+ENDBzNpagJ zJ7VaoQlTfis2iXXHoz1OBUi9sYYc=; b=GrWyxCjDu/aIpx1BxUryg6ULHZq/82 Rxxx7B/FOzMJo8yAKzoVDtA9NeU/Fad8/vomx9UTaSr1NnCdC1PdpEKKcp2uXG4n PqFunCLcoR/1duobLKodFXY112VBbUjgA62bicvfQpK2QFAx2u+NmxPU93M5oIZ6 1ofCYn7P8LcwE= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:date:from:in-reply-to:message-id :references:subject:to:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=Pq5+ENDBzNpagJzJ7VaoQlTfis2iXXHoz1OBUi9sYYc=; b=bbsqsEzJ SPcc3Kw+81GB3eIPehmKd7eTAp08Qb6121HuHhmGcvPVGevqezFYJZwUl9z2rGGG 3ZemO9jlt7Lc61547pZxf75Cs00V4WvAzi6oxQIKY5kPad8/2Xo1dpBNMXDAFP2c lYXSlu3Mbcup7aX3nwa8fFAAwAeNZzoD93HfJI3zqPvHHdu+tplfXH9jEkg3cz7S D/c6P5rX8uKo7TLip5cPk3DgvLn5S0oHmqnw+MPmt/+Su52mFH9CV7X3U0MHdKYB blt9TA0Sy0DHQkF23JhJEIiGeXL4sua+mpTn+V+7SPQfpp18U51ZXeGkmFNGBSAg uRWWgXyd28dGiA== X-ME-Proxy: X-ME-Sender: From: "Emilio G. Cota" To: qemu-devel@nongnu.org Date: Sun, 19 Aug 2018 05:13:31 -0400 Message-Id: <20180819091335.22863-8-cota@braap.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180819091335.22863-1-cota@braap.org> References: <20180819091335.22863-1-cota@braap.org> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 66.111.4.25 Subject: [Qemu-devel] [PATCH v2 07/11] 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: Peter Crosthwaite , Riku Voipio , Alexander Graf , Laurent Vivier , qemu-ppc@nongnu.org, Paolo Bonzini , David Gibson , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" So that we can test other implementations. Signed-off-by: Emilio G. Cota --- 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 dc58091996..9bd11367a0 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 2.17.1 From nobody Wed Nov 5 07:15:25 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; 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 Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1534670541030999.9618081539841; Sun, 19 Aug 2018 02:22:21 -0700 (PDT) Received: from localhost ([::1]:42168 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frJuV-00011O-MB for importer@patchew.org; Sun, 19 Aug 2018 05:22:11 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57166) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frJmS-0002N3-7R for qemu-devel@nongnu.org; Sun, 19 Aug 2018 05:13:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1frJmP-0000dt-OE for qemu-devel@nongnu.org; Sun, 19 Aug 2018 05:13:52 -0400 Received: from out1-smtp.messagingengine.com ([66.111.4.25]:35053) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1frJmP-0000ce-6D; Sun, 19 Aug 2018 05:13:49 -0400 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.nyi.internal (Postfix) with ESMTP id 94B6B21B81; Sun, 19 Aug 2018 05:13:48 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute4.internal (MEProxy); Sun, 19 Aug 2018 05:13:48 -0400 Received: from localhost (flamenco.cs.columbia.edu [128.59.20.216]) by mail.messagingengine.com (Postfix) with ESMTPA id 86E821028D; Sun, 19 Aug 2018 05:13:47 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=braap.org; h=cc :date:from:in-reply-to:message-id:references:subject:to :x-me-sender:x-me-sender:x-sasl-enc; s=mesmtp; bh=6QtggCMRebidfH QmEsLpL+9R2vyurFG5lmQj7Q0+4S4=; b=T9vkG6gZLGCWY2eeEeC4diAJtGE1gB 79gpgtqIHhg347dOgYRPHFBgkgLYGaLwJWhZrIkZJ1RTbbvZPoOl56fI2+Bm/MCc u4VP5xyaQaKVP3vx74hBlCtSbUALM1gJaM4ooNJybvLios+6J+XtEGX3pdonbxtC 5mSX7eBxU2dZ4= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:date:from:in-reply-to:message-id :references:subject:to:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=6QtggCMRebidfHQmEsLpL+9R2vyurFG5lmQj7Q0+4S4=; b=vpOM2mcf xvYJqNZKyCQLYh6PmUZebWVdG8+/CmtOTENzf31vjWm/3YuWTHH1ZR+1wzfI4UuJ CJVEIATkYyv3L+JB/3bWgAyI0HfZqECNOyK+horQMDKlzAmWxd97GOIgPCEnubLY B5y4iwJTMCPMuPkyfosH4IkKI9FF/w2Cnyvdf3XYvTBxkSWjPVzFSlb1RcwftFJB Rz9WBFJUgySAq/ig6gr7+IneZ7E2LWxBglYVtuo99KuvW4agE0Qw8LJzGh7aihJF r7skboR1ouXhjZeBX9fh7Ts6bHL2ry6bTaZ+owrHzZTGc6HL90WYMV2kyYKpwu0a DPD6blp5XC0Z2A== X-ME-Proxy: X-ME-Sender: From: "Emilio G. Cota" To: qemu-devel@nongnu.org Date: Sun, 19 Aug 2018 05:13:32 -0400 Message-Id: <20180819091335.22863-9-cota@braap.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180819091335.22863-1-cota@braap.org> References: <20180819091335.22863-1-cota@braap.org> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 66.111.4.25 Subject: [Qemu-devel] [PATCH v2 08/11] tests: add test-list-simpleq 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: Peter Crosthwaite , Riku Voipio , Alexander Graf , Laurent Vivier , qemu-ppc@nongnu.org, Paolo Bonzini , David Gibson , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Emilio G. Cota --- tests/test-rcu-list.c | 17 +++++++++++++++++ tests/test-rcu-simpleq.c | 2 ++ tests/Makefile.include | 4 ++++ 3 files changed, 23 insertions(+) create mode 100644 tests/test-rcu-simpleq.c diff --git a/tests/test-rcu-list.c b/tests/test-rcu-list.c index 9bd11367a0..c8bdf49743 100644 --- a/tests/test-rcu-list.c +++ b/tests/test-rcu-list.c @@ -89,6 +89,8 @@ static void wait_all_threads(void) struct list_element { #if TEST_LIST_TYPE =3D=3D 1 QLIST_ENTRY(list_element) entry; +#elif TEST_LIST_TYPE =3D=3D 2 + QSIMPLEQ_ENTRY(list_element) entry; #else #error Invalid TEST_LIST_TYPE #endif @@ -112,6 +114,21 @@ static QLIST_HEAD(q_list_head, list_element) Q_list_he= ad; #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 + +#elif TEST_LIST_TYPE =3D=3D 2 +static QSIMPLEQ_HEAD(, list_element) Q_list_head =3D + QSIMPLEQ_HEAD_INITIALIZER(Q_list_head); + +#define TEST_NAME "qsimpleq" +#define TEST_LIST_REMOVE_RCU(el, f) \ + QSIMPLEQ_REMOVE_RCU(&Q_list_head, el, list_element, f) + +#define TEST_LIST_INSERT_AFTER_RCU(list_el, el, f) \ + QSIMPLEQ_INSERT_AFTER_RCU(&Q_list_head, list_el, el, f) + +#define TEST_LIST_INSERT_HEAD_RCU QSIMPLEQ_INSERT_HEAD_RCU +#define TEST_LIST_FOREACH_RCU QSIMPLEQ_FOREACH_RCU +#define TEST_LIST_FOREACH_SAFE_RCU QSIMPLEQ_FOREACH_SAFE_RCU #else #error Invalid TEST_LIST_TYPE #endif diff --git a/tests/test-rcu-simpleq.c b/tests/test-rcu-simpleq.c new file mode 100644 index 0000000000..057f7d33f7 --- /dev/null +++ b/tests/test-rcu-simpleq.c @@ -0,0 +1,2 @@ +#define TEST_LIST_TYPE 2 +#include "test-rcu-list.c" diff --git a/tests/Makefile.include b/tests/Makefile.include index 760a0f18b6..997c27421a 100644 --- a/tests/Makefile.include +++ b/tests/Makefile.include @@ -116,6 +116,8 @@ check-unit-y +=3D tests/rcutorture$(EXESUF) gcov-files-rcutorture-y =3D util/rcu.c check-unit-y +=3D tests/test-rcu-list$(EXESUF) gcov-files-test-rcu-list-y =3D util/rcu.c +check-unit-y +=3D tests/test-rcu-simpleq$(EXESUF) +gcov-files-test-rcu-simpleq-y =3D util/rcu.c check-unit-y +=3D tests/test-qdist$(EXESUF) gcov-files-test-qdist-y =3D util/qdist.c check-unit-y +=3D tests/test-qht$(EXESUF) @@ -600,6 +602,7 @@ test-obj-y =3D tests/check-qnum.o tests/check-qstring.o= tests/check-qdict.o \ tests/test-x86-cpuid.o tests/test-mul64.o tests/test-int128.o \ tests/test-opts-visitor.o tests/test-qmp-event.o \ tests/rcutorture.o tests/test-rcu-list.o \ + tests/test-rcu-simpleq.o \ tests/test-qdist.o tests/test-shift128.o \ tests/test-qht.o tests/qht-bench.o tests/test-qht-par.o \ tests/atomic_add-bench.o @@ -649,6 +652,7 @@ tests/test-cutils$(EXESUF): tests/test-cutils.o util/cu= tils.o $(test-util-obj-y) tests/test-int128$(EXESUF): tests/test-int128.o tests/rcutorture$(EXESUF): tests/rcutorture.o $(test-util-obj-y) tests/test-rcu-list$(EXESUF): tests/test-rcu-list.o $(test-util-obj-y) +tests/test-rcu-simpleq$(EXESUF): tests/test-rcu-simpleq.o $(test-util-obj-= y) tests/test-qdist$(EXESUF): tests/test-qdist.o $(test-util-obj-y) tests/test-qht$(EXESUF): tests/test-qht.o $(test-util-obj-y) tests/test-qht-par$(EXESUF): tests/test-qht-par.o tests/qht-bench$(EXESUF)= $(test-util-obj-y) --=20 2.17.1 From nobody Wed Nov 5 07:15:25 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; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1534670669444478.0491662339829; Sun, 19 Aug 2018 02:24:29 -0700 (PDT) Received: from localhost ([::1]:42190 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frJwh-0002lD-J8 for importer@patchew.org; Sun, 19 Aug 2018 05:24:27 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57164) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frJmS-0002N1-7R for qemu-devel@nongnu.org; Sun, 19 Aug 2018 05:13:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1frJmP-0000do-OX for qemu-devel@nongnu.org; Sun, 19 Aug 2018 05:13:52 -0400 Received: from out1-smtp.messagingengine.com ([66.111.4.25]:54813) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1frJmP-0000cL-6M; Sun, 19 Aug 2018 05:13:49 -0400 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.nyi.internal (Postfix) with ESMTP id 8A57221B7C; Sun, 19 Aug 2018 05:13:48 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute4.internal (MEProxy); Sun, 19 Aug 2018 05:13:48 -0400 Received: from localhost (flamenco.cs.columbia.edu [128.59.20.216]) by mail.messagingengine.com (Postfix) with ESMTPA id BC8BA1028F; Sun, 19 Aug 2018 05:13:47 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=braap.org; h=cc :date:from:in-reply-to:message-id:references:subject:to :x-me-sender:x-me-sender:x-sasl-enc; s=mesmtp; bh=YAoV2GI7FcAtz8 dJpYMADW24/TcDHq5JvP1X4D+aYX4=; b=nWtGcOzX4ixJ2Sd0MIlVfAWoQIjgRO xzQpu14esVyWnc5rE9dRppoMwFIeYV18/e9XSGuhLgKH/WSd8VoguSGvnxo2B9bW zSJBsbALuG9LeiWH2st03W69JDJjGiisPaCXiUbUPHabDYGPc/vynzzubYJ1Lm4V oUm8Cc8kzOitM= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:date:from:in-reply-to:message-id :references:subject:to:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=YAoV2GI7FcAtz8dJpYMADW24/TcDHq5JvP1X4D+aYX4=; b=JwoVOqjf N3KMYzlTdL5R2aYzAP2vuWRjPze20cKpvT5XdoofydSKy0zFupt/uhNUZyUUUm+D Uuji9tGRhe6pWjynSV9/4sBNkEK5RRsocVmTnGJD4zP+4shXgQGkZAy8puERZiNP /Ria6c5YbhWaZJSLq1OrezoyK9B1drbtTwGiDvNdTzkWPKuAM/s0Zw1Nta5Txi8b +umCfK/GeBXKHG7WaanunsSmgwJDr+yE3cDojMkX3OHLF6pCdevS1smI1/5e05FA YElQeFtZCdqQ1N4gvv5Kb0nc4pXgQCegWnZ+OrYKFGd4FHcp2fPAN/Qnp/3qr1A7 9zs5FTUcl2ca+A== X-ME-Proxy: X-ME-Sender: From: "Emilio G. Cota" To: qemu-devel@nongnu.org Date: Sun, 19 Aug 2018 05:13:33 -0400 Message-Id: <20180819091335.22863-10-cota@braap.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180819091335.22863-1-cota@braap.org> References: <20180819091335.22863-1-cota@braap.org> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 66.111.4.25 Subject: [Qemu-devel] [PATCH v2 09/11] tests: add test-rcu-tailq 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: Peter Crosthwaite , Riku Voipio , Alexander Graf , Laurent Vivier , qemu-ppc@nongnu.org, Paolo Bonzini , David Gibson , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Emilio G. Cota --- tests/test-rcu-list.c | 15 +++++++++++++++ tests/test-rcu-tailq.c | 2 ++ tests/Makefile.include | 4 ++++ 3 files changed, 21 insertions(+) create mode 100644 tests/test-rcu-tailq.c diff --git a/tests/test-rcu-list.c b/tests/test-rcu-list.c index c8bdf49743..8434700746 100644 --- a/tests/test-rcu-list.c +++ b/tests/test-rcu-list.c @@ -91,6 +91,8 @@ struct list_element { QLIST_ENTRY(list_element) entry; #elif TEST_LIST_TYPE =3D=3D 2 QSIMPLEQ_ENTRY(list_element) entry; +#elif TEST_LIST_TYPE =3D=3D 3 + QTAILQ_ENTRY(list_element) entry; #else #error Invalid TEST_LIST_TYPE #endif @@ -129,6 +131,19 @@ static QSIMPLEQ_HEAD(, list_element) Q_list_head =3D #define TEST_LIST_INSERT_HEAD_RCU QSIMPLEQ_INSERT_HEAD_RCU #define TEST_LIST_FOREACH_RCU QSIMPLEQ_FOREACH_RCU #define TEST_LIST_FOREACH_SAFE_RCU QSIMPLEQ_FOREACH_SAFE_RCU + +#elif TEST_LIST_TYPE =3D=3D 3 +static QTAILQ_HEAD(, list_element) Q_list_head; + +#define TEST_NAME "qtailq" +#define TEST_LIST_REMOVE_RCU(el, f) QTAILQ_REMOVE_RCU(&Q_list_head, el, f) + +#define TEST_LIST_INSERT_AFTER_RCU(list_el, el, f) \ + QTAILQ_INSERT_AFTER_RCU(&Q_list_head, list_el, el, f) + +#define TEST_LIST_INSERT_HEAD_RCU QTAILQ_INSERT_HEAD_RCU +#define TEST_LIST_FOREACH_RCU QTAILQ_FOREACH_RCU +#define TEST_LIST_FOREACH_SAFE_RCU QTAILQ_FOREACH_SAFE_RCU #else #error Invalid TEST_LIST_TYPE #endif diff --git a/tests/test-rcu-tailq.c b/tests/test-rcu-tailq.c new file mode 100644 index 0000000000..8d487e0ee0 --- /dev/null +++ b/tests/test-rcu-tailq.c @@ -0,0 +1,2 @@ +#define TEST_LIST_TYPE 3 +#include "test-rcu-list.c" diff --git a/tests/Makefile.include b/tests/Makefile.include index 997c27421a..5fe32fcfd0 100644 --- a/tests/Makefile.include +++ b/tests/Makefile.include @@ -118,6 +118,8 @@ check-unit-y +=3D tests/test-rcu-list$(EXESUF) gcov-files-test-rcu-list-y =3D util/rcu.c check-unit-y +=3D tests/test-rcu-simpleq$(EXESUF) gcov-files-test-rcu-simpleq-y =3D util/rcu.c +check-unit-y +=3D tests/test-rcu-tailq$(EXESUF) +gcov-files-test-rcu-tailq-y =3D util/rcu.c check-unit-y +=3D tests/test-qdist$(EXESUF) gcov-files-test-qdist-y =3D util/qdist.c check-unit-y +=3D tests/test-qht$(EXESUF) @@ -603,6 +605,7 @@ test-obj-y =3D tests/check-qnum.o tests/check-qstring.o= tests/check-qdict.o \ tests/test-opts-visitor.o tests/test-qmp-event.o \ tests/rcutorture.o tests/test-rcu-list.o \ tests/test-rcu-simpleq.o \ + tests/test-rcu-tailq.o \ tests/test-qdist.o tests/test-shift128.o \ tests/test-qht.o tests/qht-bench.o tests/test-qht-par.o \ tests/atomic_add-bench.o @@ -653,6 +656,7 @@ tests/test-int128$(EXESUF): tests/test-int128.o tests/rcutorture$(EXESUF): tests/rcutorture.o $(test-util-obj-y) tests/test-rcu-list$(EXESUF): tests/test-rcu-list.o $(test-util-obj-y) tests/test-rcu-simpleq$(EXESUF): tests/test-rcu-simpleq.o $(test-util-obj-= y) +tests/test-rcu-tailq$(EXESUF): tests/test-rcu-tailq.o $(test-util-obj-y) tests/test-qdist$(EXESUF): tests/test-qdist.o $(test-util-obj-y) tests/test-qht$(EXESUF): tests/test-qht.o $(test-util-obj-y) tests/test-qht-par$(EXESUF): tests/test-qht-par.o tests/qht-bench$(EXESUF)= $(test-util-obj-y) --=20 2.17.1 From nobody Wed Nov 5 07:15:25 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; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1534670367112112.02639766477932; Sun, 19 Aug 2018 02:19:27 -0700 (PDT) Received: from localhost ([::1]:42149 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frJrq-0006gt-1d for importer@patchew.org; Sun, 19 Aug 2018 05:19:26 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57176) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frJmS-0002NA-8p for qemu-devel@nongnu.org; Sun, 19 Aug 2018 05:13:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1frJmP-0000dR-KD for qemu-devel@nongnu.org; Sun, 19 Aug 2018 05:13:52 -0400 Received: from out1-smtp.messagingengine.com ([66.111.4.25]:54733) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1frJmP-0000ca-5q; Sun, 19 Aug 2018 05:13:49 -0400 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.nyi.internal (Postfix) with ESMTP id 920A521B7F; Sun, 19 Aug 2018 05:13:48 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute4.internal (MEProxy); Sun, 19 Aug 2018 05:13:48 -0400 Received: from localhost (flamenco.cs.columbia.edu [128.59.20.216]) by mail.messagingengine.com (Postfix) with ESMTPA id E45FA10291; Sun, 19 Aug 2018 05:13:47 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=braap.org; h=cc :date:from:in-reply-to:message-id:references:subject:to :x-me-sender:x-me-sender:x-sasl-enc; s=mesmtp; bh=p6xJ+7KZqFPHlB MtixRUsDUt9g2Zrx0xcET+q0UQiMo=; b=FFkgVIOo0HZB9Qy6dPZiIj2Fw/gcnQ T7JSoaMX8kMqC26wy+On7DHFIzQ6kdiUL1+rHBs0Dc85p4JG4FxTyVBEXopAw+Vn UM80hDWTY7YN/pvKjJZdV7Llq+okZbsqHnwbBati6EnxMFpuJFzpbASg0FOkT2IE OtSlspILiuzL0= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:date:from:in-reply-to:message-id :references:subject:to:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=p6xJ+7KZqFPHlBMtixRUsDUt9g2Zrx0xcET+q0UQiMo=; b=gWumpgJZ fUWYddkdjxMn+JUI8SxJqcIIqBTnwQ7WVdhz29SV20hUr7e0jXMqfs709oZNNWYO Kn/v0c2euTeWEanvstQDzVWe6KGEv09ODf4I/4trAODjzhZRppxNvzAo8SYjgqeD qzB+taI/MfvHTTCP/4OcSxaEksXL9SoRTxG55RUtXerlJ2K/b28iuq2caaU7y/aH Skh3l5+5hHN2h1OlqECtBYc5p1Z+nfUeTO+C/OqoCtlsdzIneVFkFzBHBHnkH7Dp vOesu7aRKIWDBcLNH8hiHVXubYr2Se0UkijIPTTKzUYjnb/IBpw1pIIdLfUBWgK4 NEwMVlwIsVIERQ== X-ME-Proxy: X-ME-Sender: From: "Emilio G. Cota" To: qemu-devel@nongnu.org Date: Sun, 19 Aug 2018 05:13:34 -0400 Message-Id: <20180819091335.22863-11-cota@braap.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180819091335.22863-1-cota@braap.org> References: <20180819091335.22863-1-cota@braap.org> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 66.111.4.25 Subject: [Qemu-devel] [PATCH v2 10/11] spapr: do not use CPU_FOREACH_REVERSE 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: Peter Crosthwaite , Riku Voipio , Alexander Graf , Laurent Vivier , qemu-ppc@nongnu.org, Paolo Bonzini , David Gibson , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This paves the way for implementing the CPU list with an RCU list, which cannot be traversed in reverse order. Note that this is the only caller of CPU_FOREACH_REVERSE. Acked-by: David Gibson Signed-off-by: Emilio G. Cota --- hw/ppc/spapr.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 421b2dd09b..2ef5be2790 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -622,9 +622,12 @@ static void spapr_populate_cpu_dt(CPUState *cs, void *= fdt, int offset, =20 static void spapr_populate_cpus_dt_node(void *fdt, sPAPRMachineState *spap= r) { + CPUState **rev; CPUState *cs; + int n_cpus; int cpus_offset; char *nodename; + int i; =20 cpus_offset =3D fdt_add_subnode(fdt, 0, "cpus"); _FDT(cpus_offset); @@ -635,8 +638,19 @@ static void spapr_populate_cpus_dt_node(void *fdt, sPA= PRMachineState *spapr) * We walk the CPUs in reverse order to ensure that CPU DT nodes * created by fdt_add_subnode() end up in the right order in FDT * for the guest kernel the enumerate the CPUs correctly. + * + * The CPU list cannot be traversed in reverse order, so we need + * to do extra work. */ - CPU_FOREACH_REVERSE(cs) { + n_cpus =3D 0; + rev =3D NULL; + CPU_FOREACH(cs) { + rev =3D g_renew(CPUState *, rev, n_cpus + 1); + rev[n_cpus++] =3D cs; + } + + for (i =3D n_cpus - 1; i >=3D 0; i--) { + CPUState *cs =3D rev[i]; PowerPCCPU *cpu =3D POWERPC_CPU(cs); int index =3D spapr_get_vcpu_id(cpu); DeviceClass *dc =3D DEVICE_GET_CLASS(cs); --=20 2.17.1 From nobody Wed Nov 5 07:15:25 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; 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 Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1534670178507970.9020430188041; Sun, 19 Aug 2018 02:16:18 -0700 (PDT) Received: from localhost ([::1]:42136 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frJoe-0003yC-Hp for importer@patchew.org; Sun, 19 Aug 2018 05:16:08 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57170) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1frJmS-0002N7-8E for qemu-devel@nongnu.org; Sun, 19 Aug 2018 05:13:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1frJmP-0000dL-Gq for qemu-devel@nongnu.org; Sun, 19 Aug 2018 05:13:52 -0400 Received: from out1-smtp.messagingengine.com ([66.111.4.25]:37507) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1frJmP-0000ci-6V; Sun, 19 Aug 2018 05:13:49 -0400 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.nyi.internal (Postfix) with ESMTP id 9835821B87; Sun, 19 Aug 2018 05:13:48 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute4.internal (MEProxy); Sun, 19 Aug 2018 05:13:48 -0400 Received: from localhost (flamenco.cs.columbia.edu [128.59.20.216]) by mail.messagingengine.com (Postfix) with ESMTPA id 2474910292; Sun, 19 Aug 2018 05:13:48 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=braap.org; h=cc :date:from:in-reply-to:message-id:references:subject:to :x-me-sender:x-me-sender:x-sasl-enc; s=mesmtp; bh=JnUxYNRW3fwY2U mblAgqdR4V4w8xakOQDyPvvvXQEZE=; b=bTJreHAQS0fZYPUm0yaKPo2MAKnIyx n+o9XFOKyLczWmqobOY/SW+pWZHmvIB3hOKHvCJF69/ODHK5Ww6XN71fhbQA8spY 2zVqS+3gbQMuH1ZvWnUEum+ZCSkkLNLcvSiq1xWw7YcGLKVcA/7BCf4tXR73sUh6 oqwxNvbbWDgI0= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:date:from:in-reply-to:message-id :references:subject:to:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=JnUxYNRW3fwY2UmblAgqdR4V4w8xakOQDyPvvvXQEZE=; b=iRBPveLE qHerKDCvkUJNdkM49Ge7PhGqmGqjIdYqjKwCBhgBTjVq7VAcDkGSLKKnvVTU8gzd tbDb2W6t5wzS21jbECjwmqNXQt3cW+PWO4EIMGiDuRMNBnxUBnY4htUIChNbOCyq UCND/Tr/TyT3aNXtnJ/Qu9hPdjxdz4MR3DeNZ5V+OFJVoyneiS/AuS8aVxwxSJJO RodbCbKOgURSmovXRKFYC+leuSeJUbNiyiP6Y7m2R7QhpW41wqPv0tbrQTWeR5bH bISmF9FOGjvMa/LC5GqG+TzEWE7PLpUjbiy2SyfMr18VT38bHRk/Yrv4zYysopWH cwSqo5oR9r4g2Q== X-ME-Proxy: X-ME-Sender: From: "Emilio G. Cota" To: qemu-devel@nongnu.org Date: Sun, 19 Aug 2018 05:13:35 -0400 Message-Id: <20180819091335.22863-12-cota@braap.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180819091335.22863-1-cota@braap.org> References: <20180819091335.22863-1-cota@braap.org> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 66.111.4.25 Subject: [Qemu-devel] [PATCH v2 11/11] qom: convert the CPU list to RCU 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: Peter Crosthwaite , Riku Voipio , Alexander Graf , Laurent Vivier , qemu-ppc@nongnu.org, Paolo Bonzini , David Gibson , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Iterating over the list without using atomics is undefined behaviour, since the list can be modified concurrently by other threads (e.g. every time a new thread is created in user-mode). Fix it by implementing the CPU list as an RCU QTAILQ. This requires a little bit of extra work to traverse list in reverse order (see previous patch), but other than that the conversion is trivial. Signed-off-by: Emilio G. Cota --- include/qom/cpu.h | 11 +++++------ cpus-common.c | 4 ++-- cpus.c | 2 +- linux-user/main.c | 2 +- linux-user/syscall.c | 2 +- target/s390x/cpu_models.c | 2 +- 6 files changed, 11 insertions(+), 12 deletions(-) diff --git a/include/qom/cpu.h b/include/qom/cpu.h index ecf6ed556a..dc130cd307 100644 --- a/include/qom/cpu.h +++ b/include/qom/cpu.h @@ -26,6 +26,7 @@ #include "exec/memattrs.h" #include "qapi/qapi-types-run-state.h" #include "qemu/bitmap.h" +#include "qemu/rcu_queue.h" #include "qemu/queue.h" #include "qemu/thread.h" =20 @@ -442,13 +443,11 @@ struct CPUState { =20 QTAILQ_HEAD(CPUTailQ, CPUState); extern struct CPUTailQ cpus; -#define CPU_NEXT(cpu) QTAILQ_NEXT(cpu, node) -#define CPU_FOREACH(cpu) QTAILQ_FOREACH(cpu, &cpus, node) +#define first_cpu QTAILQ_FIRST_RCU(&cpus) +#define CPU_NEXT(cpu) QTAILQ_NEXT_RCU(cpu, node) +#define CPU_FOREACH(cpu) QTAILQ_FOREACH_RCU(cpu, &cpus, node) #define CPU_FOREACH_SAFE(cpu, next_cpu) \ - QTAILQ_FOREACH_SAFE(cpu, &cpus, node, next_cpu) -#define CPU_FOREACH_REVERSE(cpu) \ - QTAILQ_FOREACH_REVERSE(cpu, &cpus, CPUTailQ, node) -#define first_cpu QTAILQ_FIRST(&cpus) + QTAILQ_FOREACH_SAFE_RCU(cpu, &cpus, node, next_cpu) =20 extern __thread CPUState *current_cpu; =20 diff --git a/cpus-common.c b/cpus-common.c index 59f751ecf9..98dd8c6ff1 100644 --- a/cpus-common.c +++ b/cpus-common.c @@ -84,7 +84,7 @@ void cpu_list_add(CPUState *cpu) } else { assert(!cpu_index_auto_assigned); } - QTAILQ_INSERT_TAIL(&cpus, cpu, node); + QTAILQ_INSERT_TAIL_RCU(&cpus, cpu, node); qemu_mutex_unlock(&qemu_cpu_list_lock); =20 finish_safe_work(cpu); @@ -101,7 +101,7 @@ void cpu_list_remove(CPUState *cpu) =20 assert(!(cpu_index_auto_assigned && cpu !=3D QTAILQ_LAST(&cpus, CPUTai= lQ))); =20 - QTAILQ_REMOVE(&cpus, cpu, node); + QTAILQ_REMOVE_RCU(&cpus, cpu, node); cpu->cpu_index =3D UNASSIGNED_CPU_INDEX; qemu_mutex_unlock(&qemu_cpu_list_lock); } diff --git a/cpus.c b/cpus.c index b5844b7103..d60f8603fd 100644 --- a/cpus.c +++ b/cpus.c @@ -1491,7 +1491,7 @@ static void *qemu_tcg_rr_cpu_thread_fn(void *arg) atomic_mb_set(&cpu->exit_request, 0); } =20 - qemu_tcg_rr_wait_io_event(cpu ? cpu : QTAILQ_FIRST(&cpus)); + qemu_tcg_rr_wait_io_event(cpu ? cpu : first_cpu); deal_with_unplugged_cpus(); } =20 diff --git a/linux-user/main.c b/linux-user/main.c index ea00dd9057..923cbb753a 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -126,7 +126,7 @@ void fork_end(int child) Discard information about the parent threads. */ CPU_FOREACH_SAFE(cpu, next_cpu) { if (cpu !=3D thread_cpu) { - QTAILQ_REMOVE(&cpus, cpu, node); + QTAILQ_REMOVE_RCU(&cpus, cpu, node); } } qemu_init_cpu_list(); diff --git a/linux-user/syscall.c b/linux-user/syscall.c index bb42a225eb..95ac0102bf 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -8051,7 +8051,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long = arg1, TaskState *ts; =20 /* Remove the CPU from the list. */ - QTAILQ_REMOVE(&cpus, cpu, node); + QTAILQ_REMOVE_RCU(&cpus, cpu, node); =20 cpu_list_unlock(); =20 diff --git a/target/s390x/cpu_models.c b/target/s390x/cpu_models.c index 604898a882..d1a45bd8c0 100644 --- a/target/s390x/cpu_models.c +++ b/target/s390x/cpu_models.c @@ -1110,7 +1110,7 @@ void s390_set_qemu_cpu_model(uint16_t type, uint8_t g= en, uint8_t ec_ga, const S390CPUDef *def =3D s390_find_cpu_def(type, gen, ec_ga, NULL); =20 g_assert(def); - g_assert(QTAILQ_EMPTY(&cpus)); + g_assert(QTAILQ_EMPTY_RCU(&cpus)); =20 /* TCG emulates some features that can usually not be enabled with * the emulated machine generation. Make sure they can be enabled --=20 2.17.1