From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id AA05FA0613 for ; Wed, 25 Sep 2019 10:01:22 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 49A711BEA4; Wed, 25 Sep 2019 10:01:22 +0200 (CEST) Received: from us-smtp-delivery-1.mimecast.com (us-smtp-1.mimecast.com [205.139.110.61]) by dpdk.org (Postfix) with ESMTP id 5AC482C52 for ; Wed, 25 Sep 2019 10:01:19 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1569398478; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Y5y+TFFCskuBNw18ESPIFuhPZ4qm3BKv3kVqyTWM8sU=; b=Z+rs/4V7pkdZD4Qhi7au0dlk9ayi4K/ZGVxlUHPBqL9lJHdEg0l4LaVsT2C6AW0I2Fbnox sufGI4Sbp4zk64oqdCPEiojQMkHbhNNvtdG2ejM7Ju5RxhRvNJ+ZUWpSr3Swel93vfHGjb T66ku5Zos20XEsD+hFZ6Pq1/4q1SJ2w= Received: from mail-vk1-f198.google.com (mail-vk1-f198.google.com [209.85.221.198]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-250-rFEtQMDwPl6zVIawV5vGaw-1; Wed, 25 Sep 2019 04:01:14 -0400 Received: by mail-vk1-f198.google.com with SMTP id a7so810169vkg.2 for ; Wed, 25 Sep 2019 01:01:14 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=cBazNEqRVJk86R0eJpxbm6u33q4qF1BMpM+TTlJ/m1s=; b=txqwwVASb0rKYaZAkmP/CpTz0C82vXRTP20lX4lqfnZe1ZP+DLmiM5xC0pVKOmNOiR CRI7UDtsPJaoSYP0qaFvFyZRDz1J5/o3ovNMq0TuN3SW9dIW1LRDQgXkUm1xrGV64Wb4 OiGAyzgYZJOynVXwZnQJCAfx9tIQWv95gXGlDWQar+vEu/t+gnHe3q6rrfpBkJ8irKwK Sq5PnPQmFCyZbQNOtDAax+5bW+oNPLPKu8+uRv9RDBJZStXIGYlDqKrivVSfgl61IM2c N20s32V7doXlJ6PTDaCICHu1O6h1+M0TG9PzXdAwV06m1HmNJWq0irKmCqn9L1FfBYVk rYxA== X-Gm-Message-State: APjAAAXkCo1a7Hmvy7KbmzFh+uCKz8IyANZQPECMvK2yE2ko4jX9za88 VBhP0rmJpq/WV7qP1nSBfzxK3VisSBi4XV5fJXUzpj5HNWqWFaaBbylFITqR9L2iBAmkD1g22Tk BauynBdHBUrkIFTDK2EWxoOE= X-Received: by 2002:a67:e254:: with SMTP id w20mr4073407vse.39.1569398474152; Wed, 25 Sep 2019 01:01:14 -0700 (PDT) X-Google-Smtp-Source: APXvYqx5RAWUFUCOop2rC/2UyWtQ/xSP3p9XLN3WOBnhFcquraBrVi3+07gpeZItsPpPAxIavrAPy7hRvkob64bLo44= X-Received: by 2002:a67:e254:: with SMTP id w20mr4073384vse.39.1569398473870; Wed, 25 Sep 2019 01:01:13 -0700 (PDT) MIME-Version: 1.0 References: <20190909135142.3510-1-ruifeng.wang@arm.com> In-Reply-To: <20190909135142.3510-1-ruifeng.wang@arm.com> From: David Marchand Date: Wed, 25 Sep 2019 10:01:02 +0200 Message-ID: To: Ruifeng Wang , Honnappa Nagarahalli Cc: dev , Gavin Hu , nd , dpdk stable X-MC-Unique: rFEtQMDwPl6zVIawV5vGaw-1 X-Mimecast-Spam-Score: 0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: Re: [dpdk-stable] [dpdk-dev] [PATCH] lib/rcu: fix possible spurious thread unregister X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" On Mon, Sep 9, 2019 at 3:52 PM Ruifeng Wang wrote: > > Thread unregister returns success while unregister not been performed. > This is due to incorrect thread registration status check. > Fix this issue by correcting bitmap check. > > Fixes: 64994b56cfd7 ("rcu: add RCU library supporting QSBR mechanism") > Cc: stable@dpdk.org > > Signed-off-by: Ruifeng Wang > Reviewed-by: Gavin Hu > --- > lib/librte_rcu/rte_rcu_qsbr.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/lib/librte_rcu/rte_rcu_qsbr.c b/lib/librte_rcu/rte_rcu_qsbr.= c > index ce7f93dd3..8c37c88cd 100644 > --- a/lib/librte_rcu/rte_rcu_qsbr.c > +++ b/lib/librte_rcu/rte_rcu_qsbr.c > @@ -158,7 +158,7 @@ rte_rcu_qsbr_thread_unregister(struct rte_rcu_qsbr *v= , unsigned int thread_id) > /* Check if the thread is already unregistered */ > old_bmap =3D __atomic_load_n(__RTE_QSBR_THRID_ARRAY_ELM(v, i), > __ATOMIC_RELAXED); > - if (old_bmap & ~(1UL << id)) > + if (!(old_bmap & (1UL << id))) > return 0; > > do { > @@ -175,7 +175,7 @@ rte_rcu_qsbr_thread_unregister(struct rte_rcu_qsbr *v= , unsigned int thread_id) > if (success) > __atomic_fetch_sub(&v->num_threads, > 1, __ATOMIC_RELAXED); > - else if (old_bmap & ~(1UL << id)) > + else if (!(old_bmap & (1UL << id))) > /* Someone else unregistered this thread. > * Counter should not be incremented. > */ Reviewed-by: David Marchand Honnappa, While looking at the rcu doxygen, I noted it does not describe what return values to expect from register/unregister. We also have typos on s/rte_rcu_thread_offline/rte_rcu_qsbr_thread_offline/= g. Could you send a patch for this? Thanks. -- David Marchand