From patchwork Fri Jan 22 04:23:09 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bob Pearson X-Patchwork-Id: 12038317 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 42094C433E6 for ; Fri, 22 Jan 2021 04:24:28 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0EE2F238D7 for ; Fri, 22 Jan 2021 04:24:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726691AbhAVEYL (ORCPT ); Thu, 21 Jan 2021 23:24:11 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34840 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726472AbhAVEYK (ORCPT ); Thu, 21 Jan 2021 23:24:10 -0500 Received: from mail-oi1-x22a.google.com (mail-oi1-x22a.google.com [IPv6:2607:f8b0:4864:20::22a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D010FC061756 for ; Thu, 21 Jan 2021 20:23:29 -0800 (PST) Received: by mail-oi1-x22a.google.com with SMTP id 15so4714209oix.8 for ; Thu, 21 Jan 2021 20:23:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=9nJ7JTUyYxu5fQxugnuhPqq/LbS6Yhpu3mLRRsHkwpo=; b=ZWAttvMidmbGkRnk/sIGksV9DzqW2Fe2T61w/lCzlRET9gAgAA/Y4atBGKqnI9lIna KCnDq32T59llE4fxEKtrSWuXaBHlzAIPs3ruWWp/9ZIcDkLsPc4WaPsNqH5FIDg//2xS uIk9lG/8kXTWEJ2DH4wAvfiHmWbhbxYrDCriTcsOxC5tkshXV0u2+zA0Edf05uHLV5SM RRZdbctNj/YX1bmgch8NTe3us3gLmlhjlKJEI8SrWNF9RbKSGuAwbknsivH/E3kGWbda roCeLNUkgsISVJlHT4sgIRkr95Cuw+zaA7NuiyFV+HKWywZfuoOBnTuQDDLs9KLDNhpH DkxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=9nJ7JTUyYxu5fQxugnuhPqq/LbS6Yhpu3mLRRsHkwpo=; b=Dkwym1csTO+fqxX6b6DtW7b5HVGTfaIexCi9VgcyyuuT+Ld6vNq1cEuccXIhmtbgi4 /vzanyNkbRh+pI51+Z8dV2CiyHRd4IKVWJE8K14oohE1qBJtV8vcmjFH1xbgEy43hslI a1HBNISVZpDVfSV+h2NYRlUZDUUKTDnn4xXuLt9yz4mlc3pJ72CsnBq8oe3hKN+EcK/t AUcstjOpLg2K6EwNI6fR0QVMmrkAFMUIN87KevVJMuZwPIz3MDgBgI6XU7uFO0w3OAPS 5Nu/+PS1inuKYqZu+1Dtf6a5ZrN5KcQ9/AIcvUUK8SGPVOeZ6BFctgYT9CXSSbg9yfsc XMCw== X-Gm-Message-State: AOAM531FXfqKVvtl2wUqh0m7naambfm4IslJhvAZlz18DrzHpqor0zmf hdTuyxK2Mp1Cei0rkqHzxqo= X-Google-Smtp-Source: ABdhPJwmxzLbIKyadeAF+Lxse15UZ2egP26oEdVBpAkMpDwKnYU2mn1kkzpwFrqZJ7s2RLl89hgszA== X-Received: by 2002:aca:5709:: with SMTP id l9mr2054325oib.67.1611289409222; Thu, 21 Jan 2021 20:23:29 -0800 (PST) Received: from rpearson-X570-AORUS-PRO-WIFI.tx.rr.com (2603-8081-140c-1a00-5689-5322-9983-137f.res6.spectrum.com. [2603:8081:140c:1a00:5689:5322:9983:137f]) by smtp.gmail.com with ESMTPSA id q26sm14244otg.28.2021.01.21.20.23.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 Jan 2021 20:23:28 -0800 (PST) From: Bob Pearson X-Google-Original-From: Bob Pearson To: jgg@nvidia.com, zyjzyj2000@gmail.com, linux-rdma@vger.kernel.org Cc: Bob Pearson , syzbot+ec2fd72374785d0e558e@syzkaller.appspotmail.com Subject: [PATCH for-next 1/5] RDMA/rxe: Fix bug in rxe_alloc Date: Thu, 21 Jan 2021 22:23:09 -0600 Message-Id: <20210122042313.3336-2-rpearson@hpe.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210122042313.3336-1-rpearson@hpe.com> References: <20210122042313.3336-1-rpearson@hpe.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org A recent patch which added an 'unlocked' version of rxe_alloc introduced a bug causing kzalloc(..., GFP_KERNEL) to be called while holding a spin lock. This patch corrects that error. rxe_alloc_nl() should always be called while holding the pool->pool_lock so the 2nd argument to kzalloc there should be GFP_ATOMIC. rxe_alloc() prior to the change only locked the code around checking that pool->state is RXE_POOL_STATE_VALID to avoid races between working threads and a thread shutting down the rxe driver. This patch reverts rxe_alloc() to this behavior so the lock is not held when kzalloc() is called. Reported-by: syzbot+ec2fd72374785d0e558e@syzkaller.appspotmail.com Fixes: 3853c35e243d ("RDMA/rxe: Add unlocked versions of pool APIs") Signed-off-by: Bob Pearson --- drivers/infiniband/sw/rxe/rxe_pool.c | 41 ++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/drivers/infiniband/sw/rxe/rxe_pool.c b/drivers/infiniband/sw/rxe/rxe_pool.c index d26730eec720..cfcd55175572 100644 --- a/drivers/infiniband/sw/rxe/rxe_pool.c +++ b/drivers/infiniband/sw/rxe/rxe_pool.c @@ -343,8 +343,6 @@ void *rxe_alloc_nl(struct rxe_pool *pool) struct rxe_pool_entry *elem; u8 *obj; - might_sleep_if(!(pool->flags & RXE_POOL_ATOMIC)); - if (pool->state != RXE_POOL_STATE_VALID) return NULL; @@ -356,8 +354,7 @@ void *rxe_alloc_nl(struct rxe_pool *pool) if (atomic_inc_return(&pool->num_elem) > pool->max_elem) goto out_cnt; - obj = kzalloc(info->size, (pool->flags & RXE_POOL_ATOMIC) ? - GFP_ATOMIC : GFP_KERNEL); + obj = kzalloc(info->size, GFP_ATOMIC); if (!obj) goto out_cnt; @@ -378,14 +375,46 @@ void *rxe_alloc_nl(struct rxe_pool *pool) void *rxe_alloc(struct rxe_pool *pool) { - u8 *obj; unsigned long flags; + struct rxe_type_info *info = &rxe_type_info[pool->type]; + struct rxe_pool_entry *elem; + u8 *obj; + + might_sleep_if(!(pool->flags & RXE_POOL_ATOMIC)); read_lock_irqsave(&pool->pool_lock, flags); - obj = rxe_alloc_nl(pool); + if (pool->state != RXE_POOL_STATE_VALID) { + read_unlock_irqrestore(&pool->pool_lock, flags); + return NULL; + } + + kref_get(&pool->ref_cnt); read_unlock_irqrestore(&pool->pool_lock, flags); + if (!ib_device_try_get(&pool->rxe->ib_dev)) + goto out_put_pool; + + if (atomic_inc_return(&pool->num_elem) > pool->max_elem) + goto out_cnt; + + obj = kzalloc(info->size, (pool->flags & RXE_POOL_ATOMIC) ? + GFP_ATOMIC : GFP_KERNEL); + if (!obj) + goto out_cnt; + + elem = (struct rxe_pool_entry *)(obj + info->elem_offset); + + elem->pool = pool; + kref_init(&elem->ref_cnt); + return obj; + +out_cnt: + atomic_dec(&pool->num_elem); + ib_device_put(&pool->rxe->ib_dev); +out_put_pool: + rxe_pool_put(pool); + return NULL; } int __rxe_add_to_pool(struct rxe_pool *pool, struct rxe_pool_entry *elem) From patchwork Fri Jan 22 04:23:10 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bob Pearson X-Patchwork-Id: 12038323 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 59DDFC433DB for ; Fri, 22 Jan 2021 04:24:28 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 240B9238EE for ; Fri, 22 Jan 2021 04:24:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726472AbhAVEYN (ORCPT ); Thu, 21 Jan 2021 23:24:13 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34846 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726634AbhAVEYL (ORCPT ); Thu, 21 Jan 2021 23:24:11 -0500 Received: from mail-oo1-xc30.google.com (mail-oo1-xc30.google.com [IPv6:2607:f8b0:4864:20::c30]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B1B02C0613D6 for ; Thu, 21 Jan 2021 20:23:30 -0800 (PST) Received: by mail-oo1-xc30.google.com with SMTP id j21so1102793oou.11 for ; Thu, 21 Jan 2021 20:23:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=KcQeKXoCKnWw4LoGTmnpc6rvmrTrMihBUZAP9LEh1Fk=; b=j5Ucf7pufn+L8JQz1guO2u78TozlJam+lSa9ISwtHtGIoIO46f8XRP08QK6UMqGMSe mH+Zcslr0Ij5/YREDk/f0L2Z2a4CK86WGMlmkLkAd5/uupBSnSq5Njbv85HMFli7AveW /gy+V/XMWUyf29PI0hO0oY2jA1o/+9LvOgO4AmPd7Z3dGqgiqKuBJ4h+WlPftVr1PCzD fMuZAWEJzCmYekVKFziCScx0KPvY4muiTPg+5Li8007jXBzvUnyjQdTjrQSdSgdz1yUo SBc4HA8FS8bdTcYEUikfK5zBoyqyPza6o7Crh8bHGj2FowR8LwVlcwYH5halvq5paZrV lvsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=KcQeKXoCKnWw4LoGTmnpc6rvmrTrMihBUZAP9LEh1Fk=; b=WAD5HwAo8Cf9Yc87qw7P+UoFwdKmr8FedZuz4Bykthd+3H/DDPoj03TB+akt4DYTBM XUlQjoyDiMA4ml96fQ34llNNtBJbagEC6l1VFVxH9ksUa0MdEXINz76aVhwdYg7+kXsf L2UMnEdKquKSUmEVsbBduBUtXn1aClvNAhvc1Yh8mPiSwHoON3TE2GP7JA3rDy1Rfo98 3SpFwmUFLHdbSKWTnoC4ror8TReVgFhl3wAHaK1ykxcLaxcYOJNvaj59Xv7Oqv7Q1rwN spGnqLaxcjbqYIK0IwMmiieYcNqxiv+0Y/7Y5odGocX68Olg4unYhzJqjs4f5W7WC+VA 0uPw== X-Gm-Message-State: AOAM530/pSR3iaHsVZejPTPq9csVMtUHStMmdAYZUvk5ye4owGiKhKvv Tqk894YC1pGzqNpv5o/6fpTEK5Gq1cM= X-Google-Smtp-Source: ABdhPJz1Y+XhlpYxOtGK3jFBoyN/5mKQev40su43x2rVHrWkFPCCBHRHBMo6PbPvVEmFTFp4E6cXMw== X-Received: by 2002:a4a:b913:: with SMTP id x19mr2403322ooo.9.1611289410125; Thu, 21 Jan 2021 20:23:30 -0800 (PST) Received: from rpearson-X570-AORUS-PRO-WIFI.tx.rr.com (2603-8081-140c-1a00-5689-5322-9983-137f.res6.spectrum.com. [2603:8081:140c:1a00:5689:5322:9983:137f]) by smtp.gmail.com with ESMTPSA id q26sm14244otg.28.2021.01.21.20.23.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 Jan 2021 20:23:29 -0800 (PST) From: Bob Pearson X-Google-Original-From: Bob Pearson To: jgg@nvidia.com, zyjzyj2000@gmail.com, linux-rdma@vger.kernel.org Cc: Bob Pearson , Hillf Danton Subject: [PATCH for-next 2/5] RDMA/rxe: Fix misleading comments and names Date: Thu, 21 Jan 2021 22:23:10 -0600 Message-Id: <20210122042313.3336-3-rpearson@hpe.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210122042313.3336-1-rpearson@hpe.com> References: <20210122042313.3336-1-rpearson@hpe.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org The names and comments of the 'unlocked' pool APIs are very misleading and not what was intended. This patch replaces 'rxe_xxx_nl' with 'rxe_xxx__' with comments indicating that the caller is expected to hold the rxe pool lock. Reported-by: Hillf Danton Signed-off-by: Bob Pearson --- drivers/infiniband/sw/rxe/rxe_mcast.c | 8 ++-- drivers/infiniband/sw/rxe/rxe_pool.c | 22 +++++------ drivers/infiniband/sw/rxe/rxe_pool.h | 55 +++++++++++++-------------- 3 files changed, 42 insertions(+), 43 deletions(-) diff --git a/drivers/infiniband/sw/rxe/rxe_mcast.c b/drivers/infiniband/sw/rxe/rxe_mcast.c index 5be47ce7d319..b9f06f87866e 100644 --- a/drivers/infiniband/sw/rxe/rxe_mcast.c +++ b/drivers/infiniband/sw/rxe/rxe_mcast.c @@ -15,18 +15,18 @@ static struct rxe_mc_grp *create_grp(struct rxe_dev *rxe, int err; struct rxe_mc_grp *grp; - grp = rxe_alloc_nl(&rxe->mc_grp_pool); + grp = rxe_alloc__(&rxe->mc_grp_pool); if (!grp) return ERR_PTR(-ENOMEM); INIT_LIST_HEAD(&grp->qp_list); spin_lock_init(&grp->mcg_lock); grp->rxe = rxe; - rxe_add_key_nl(grp, mgid); + rxe_add_key__(grp, mgid); err = rxe_mcast_add(rxe, mgid); if (unlikely(err)) { - rxe_drop_key_nl(grp); + rxe_drop_key__(grp); rxe_drop_ref(grp); return ERR_PTR(err); } @@ -47,7 +47,7 @@ int rxe_mcast_get_grp(struct rxe_dev *rxe, union ib_gid *mgid, write_lock_irqsave(&pool->pool_lock, flags); - grp = rxe_pool_get_key_nl(pool, mgid); + grp = rxe_pool_get_key__(pool, mgid); if (grp) goto done; diff --git a/drivers/infiniband/sw/rxe/rxe_pool.c b/drivers/infiniband/sw/rxe/rxe_pool.c index cfcd55175572..80deec1e2924 100644 --- a/drivers/infiniband/sw/rxe/rxe_pool.c +++ b/drivers/infiniband/sw/rxe/rxe_pool.c @@ -266,7 +266,7 @@ static void insert_key(struct rxe_pool *pool, struct rxe_pool_entry *new) return; } -void __rxe_add_key_nl(struct rxe_pool_entry *elem, void *key) +void __rxe_add_key__(struct rxe_pool_entry *elem, void *key) { struct rxe_pool *pool = elem->pool; @@ -280,11 +280,11 @@ void __rxe_add_key(struct rxe_pool_entry *elem, void *key) unsigned long flags; write_lock_irqsave(&pool->pool_lock, flags); - __rxe_add_key_nl(elem, key); + __rxe_add_key__(elem, key); write_unlock_irqrestore(&pool->pool_lock, flags); } -void __rxe_drop_key_nl(struct rxe_pool_entry *elem) +void __rxe_drop_key__(struct rxe_pool_entry *elem) { struct rxe_pool *pool = elem->pool; @@ -297,11 +297,11 @@ void __rxe_drop_key(struct rxe_pool_entry *elem) unsigned long flags; write_lock_irqsave(&pool->pool_lock, flags); - __rxe_drop_key_nl(elem); + __rxe_drop_key__(elem); write_unlock_irqrestore(&pool->pool_lock, flags); } -void __rxe_add_index_nl(struct rxe_pool_entry *elem) +void __rxe_add_index__(struct rxe_pool_entry *elem) { struct rxe_pool *pool = elem->pool; @@ -315,11 +315,11 @@ void __rxe_add_index(struct rxe_pool_entry *elem) unsigned long flags; write_lock_irqsave(&pool->pool_lock, flags); - __rxe_add_index_nl(elem); + __rxe_add_index__(elem); write_unlock_irqrestore(&pool->pool_lock, flags); } -void __rxe_drop_index_nl(struct rxe_pool_entry *elem) +void __rxe_drop_index__(struct rxe_pool_entry *elem) { struct rxe_pool *pool = elem->pool; @@ -333,11 +333,11 @@ void __rxe_drop_index(struct rxe_pool_entry *elem) unsigned long flags; write_lock_irqsave(&pool->pool_lock, flags); - __rxe_drop_index_nl(elem); + __rxe_drop_index__(elem); write_unlock_irqrestore(&pool->pool_lock, flags); } -void *rxe_alloc_nl(struct rxe_pool *pool) +void *rxe_alloc__(struct rxe_pool *pool) { struct rxe_type_info *info = &rxe_type_info[pool->type]; struct rxe_pool_entry *elem; @@ -507,7 +507,7 @@ void *rxe_pool_get_index(struct rxe_pool *pool, u32 index) return obj; } -void *rxe_pool_get_key_nl(struct rxe_pool *pool, void *key) +void *rxe_pool_get_key__(struct rxe_pool *pool, void *key) { struct rxe_type_info *info = &rxe_type_info[pool->type]; struct rb_node *node; @@ -551,7 +551,7 @@ void *rxe_pool_get_key(struct rxe_pool *pool, void *key) unsigned long flags; read_lock_irqsave(&pool->pool_lock, flags); - obj = rxe_pool_get_key_nl(pool, key); + obj = rxe_pool_get_key__(pool, key); read_unlock_irqrestore(&pool->pool_lock, flags); return obj; diff --git a/drivers/infiniband/sw/rxe/rxe_pool.h b/drivers/infiniband/sw/rxe/rxe_pool.h index 373e08554c1c..b9680f9e907c 100644 --- a/drivers/infiniband/sw/rxe/rxe_pool.h +++ b/drivers/infiniband/sw/rxe/rxe_pool.h @@ -106,11 +106,10 @@ int rxe_pool_init(struct rxe_dev *rxe, struct rxe_pool *pool, /* free resources from object pool */ void rxe_pool_cleanup(struct rxe_pool *pool); -/* allocate an object from pool */ -void *rxe_alloc(struct rxe_pool *pool); +/* allocate an object from pool holding and not holding the pool lock */ +void *rxe_alloc__(struct rxe_pool *pool); -/* allocate an object from pool - no lock */ -void *rxe_alloc_nl(struct rxe_pool *pool); +void *rxe_alloc(struct rxe_pool *pool); /* connect already allocated object to pool */ int __rxe_add_to_pool(struct rxe_pool *pool, struct rxe_pool_entry *elem); @@ -118,60 +117,60 @@ int __rxe_add_to_pool(struct rxe_pool *pool, struct rxe_pool_entry *elem); #define rxe_add_to_pool(pool, obj) __rxe_add_to_pool(pool, &(obj)->pelem) /* assign an index to an indexed object and insert object into - * pool's rb tree with and without holding the pool_lock + * pool's rb tree holding and not holding the pool_lock */ -void __rxe_add_index(struct rxe_pool_entry *elem); +void __rxe_add_index__(struct rxe_pool_entry *elem); -#define rxe_add_index(obj) __rxe_add_index(&(obj)->pelem) +#define rxe_add_index__(obj) __rxe_add_index__(&(obj)->pelem) -void __rxe_add_index_nl(struct rxe_pool_entry *elem); +void __rxe_add_index(struct rxe_pool_entry *elem); -#define rxe_add_index_nl(obj) __rxe_add_index_nl(&(obj)->pelem) +#define rxe_add_index(obj) __rxe_add_index(&(obj)->pelem) /* drop an index and remove object from rb tree - * with and without holding the pool_lock + * holding and not holding the pool_lock */ -void __rxe_drop_index(struct rxe_pool_entry *elem); +void __rxe_drop_index__(struct rxe_pool_entry *elem); -#define rxe_drop_index(obj) __rxe_drop_index(&(obj)->pelem) +#define rxe_drop_index__(obj) __rxe_drop_index__(&(obj)->pelem) -void __rxe_drop_index_nl(struct rxe_pool_entry *elem); +void __rxe_drop_index(struct rxe_pool_entry *elem); -#define rxe_drop_index_nl(obj) __rxe_drop_index_nl(&(obj)->pelem) +#define rxe_drop_index(obj) __rxe_drop_index(&(obj)->pelem) /* assign a key to a keyed object and insert object into - * pool's rb tree with and without holding pool_lock + * pool's rb tree holding and not holding pool_lock */ +void __rxe_add_key__(struct rxe_pool_entry *elem, void *key); + +#define rxe_add_key__(obj, key) __rxe_add_key__(&(obj)->pelem, key) + void __rxe_add_key(struct rxe_pool_entry *elem, void *key); #define rxe_add_key(obj, key) __rxe_add_key(&(obj)->pelem, key) -void __rxe_add_key_nl(struct rxe_pool_entry *elem, void *key); +/* remove elem from rb tree holding and not holding the pool_lock */ +void __rxe_drop_key__(struct rxe_pool_entry *elem); -#define rxe_add_key_nl(obj, key) __rxe_add_key_nl(&(obj)->pelem, key) +#define rxe_drop_key__(obj) __rxe_drop_key__(&(obj)->pelem) -/* remove elem from rb tree with and without holding pool_lock */ void __rxe_drop_key(struct rxe_pool_entry *elem); #define rxe_drop_key(obj) __rxe_drop_key(&(obj)->pelem) -void __rxe_drop_key_nl(struct rxe_pool_entry *elem); - -#define rxe_drop_key_nl(obj) __rxe_drop_key_nl(&(obj)->pelem) - -/* lookup an indexed object from index with and without holding pool_lock. +/* lookup an indexed object from index holding and not holding the pool_lock. * takes a reference on object */ -void *rxe_pool_get_index(struct rxe_pool *pool, u32 index); +void *rxe_pool_get_index__(struct rxe_pool *pool, u32 index); -void *rxe_pool_get_index_nl(struct rxe_pool *pool, u32 index); +void *rxe_pool_get_index(struct rxe_pool *pool, u32 index); -/* lookup keyed object from key with and without holding pool_lock. +/* lookup keyed object from key holding and not holding the pool_lock. * takes a reference on the objecti */ -void *rxe_pool_get_key(struct rxe_pool *pool, void *key); +void *rxe_pool_get_key__(struct rxe_pool *pool, void *key); -void *rxe_pool_get_key_nl(struct rxe_pool *pool, void *key); +void *rxe_pool_get_key(struct rxe_pool *pool, void *key); /* cleanup an object when all references are dropped */ void rxe_elem_release(struct kref *kref); From patchwork Fri Jan 22 04:23:11 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bob Pearson X-Patchwork-Id: 12038325 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 87680C4332B for ; Fri, 22 Jan 2021 04:24:28 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 5A79B230FC for ; Fri, 22 Jan 2021 04:24:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726634AbhAVEYO (ORCPT ); Thu, 21 Jan 2021 23:24:14 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34852 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726290AbhAVEYL (ORCPT ); Thu, 21 Jan 2021 23:24:11 -0500 Received: from mail-ot1-x32f.google.com (mail-ot1-x32f.google.com [IPv6:2607:f8b0:4864:20::32f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 592DDC0613ED for ; Thu, 21 Jan 2021 20:23:31 -0800 (PST) Received: by mail-ot1-x32f.google.com with SMTP id i30so3932408ota.6 for ; Thu, 21 Jan 2021 20:23:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=vyfsrg0WcwUJ4gBjz9SeNw+/uhMhz7C6FbWShe2pYj8=; b=KiLLEdkCaz/BSv+4m3pw8Efs0RV5oqFHU1cCD5l6CbzjlLmm/KtT11SD6kp6cxELc/ ZpZnWpvEI6zLe4guSdqxWy2g7gL2xGBlxe/Eo1nz5o2qYwC6NgAL8Iheyj5M9FhqWBXO TyJdc1PIWWbKw3tUsl2TjasW6gevoKkQVJ/rEJEXSgIwF+I5IP+mmAGjvY26BBws9DZi 49IgDpIKUQhTgWdAkwV0NnMSAd+niU6L9GD89l8IteABV/FJ+Wjiodic9NxbMhjKifNI FrhFCXCNLYYQ/GigUbccQfABvRq8xVMrNjgXkCyadueEAA8OHIMm232XqLNyi3ExSSyR CX/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=vyfsrg0WcwUJ4gBjz9SeNw+/uhMhz7C6FbWShe2pYj8=; b=jlgOxNzlG0OzazrI6Q644c41oe4A28Pb8ubmu9X1dYXWW4qVTTDh+16Ns++bP0iQhl PKymxwhePxVmyy3NRy35YZfvDJdWLaY2TQ34iNY63RQSYXPMnAH7y53BPnZ6LG6vUGDV gHclg1G6PluC9isCyxXrt0oEh7ue9hJDIFjtbfG//F3rjNmtDpSPu+rOnA1QHsL2ynCT cYS0nzGyXs3Pxo/zK/Btl254n5lS/glftEZnvjx1Z4XGEpB2QmluTzfYJbnwX6JOfBLj 0W+X5tko70V+lQB+2yvWxtGjHhQqkoEyowRZ8s6H2lO5042EDP7p8vnktbpC84sG8BcM jliA== X-Gm-Message-State: AOAM5331vN6VZlFPfIoaTNINgyydM8mDQzrN+LpecI97/Y39bZ+TVkF6 6F2XmoPoZQ1DNpqS/ApXZSPUup1ZuMA= X-Google-Smtp-Source: ABdhPJxiyDuH1Pf25gEws9u5JFWII5hyx/l6tzQ7YcepT2xwUbGYrYerPgc0nx1ULsPx6I8mTJQeuQ== X-Received: by 2002:a9d:6393:: with SMTP id w19mr1964335otk.204.1611289410847; Thu, 21 Jan 2021 20:23:30 -0800 (PST) Received: from rpearson-X570-AORUS-PRO-WIFI.tx.rr.com (2603-8081-140c-1a00-5689-5322-9983-137f.res6.spectrum.com. [2603:8081:140c:1a00:5689:5322:9983:137f]) by smtp.gmail.com with ESMTPSA id q26sm14244otg.28.2021.01.21.20.23.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 Jan 2021 20:23:30 -0800 (PST) From: Bob Pearson X-Google-Original-From: Bob Pearson To: jgg@nvidia.com, zyjzyj2000@gmail.com, linux-rdma@vger.kernel.org Cc: Bob Pearson Subject: [PATCH for-next 3/5] RDMA/rxe: Remove RXE_POOL_ATOMIC Date: Thu, 21 Jan 2021 22:23:11 -0600 Message-Id: <20210122042313.3336-4-rpearson@hpe.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210122042313.3336-1-rpearson@hpe.com> References: <20210122042313.3336-1-rpearson@hpe.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org rxe_alloc() used the RXE_POOL_ATOMIC flag in rxe_type_info to select GFP_ATOMIC in calls to kzalloc(). This was intended to handle cases where an object could be created in interrupt context. This no longer occurs since allocating those objects has moved into the core so this flag is not necessary. An incorrect use of this flag was still present for rxe_mc_elem objects and is removed. Signed-off-by: Bob Pearson --- drivers/infiniband/sw/rxe/rxe_pool.c | 6 +----- drivers/infiniband/sw/rxe/rxe_pool.h | 1 - 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/drivers/infiniband/sw/rxe/rxe_pool.c b/drivers/infiniband/sw/rxe/rxe_pool.c index 80deec1e2924..7e68f99558a7 100644 --- a/drivers/infiniband/sw/rxe/rxe_pool.c +++ b/drivers/infiniband/sw/rxe/rxe_pool.c @@ -84,7 +84,6 @@ struct rxe_type_info rxe_type_info[RXE_NUM_TYPES] = { .name = "rxe-mc_elem", .size = sizeof(struct rxe_mc_elem), .elem_offset = offsetof(struct rxe_mc_elem, pelem), - .flags = RXE_POOL_ATOMIC, }, }; @@ -380,8 +379,6 @@ void *rxe_alloc(struct rxe_pool *pool) struct rxe_pool_entry *elem; u8 *obj; - might_sleep_if(!(pool->flags & RXE_POOL_ATOMIC)); - read_lock_irqsave(&pool->pool_lock, flags); if (pool->state != RXE_POOL_STATE_VALID) { read_unlock_irqrestore(&pool->pool_lock, flags); @@ -397,8 +394,7 @@ void *rxe_alloc(struct rxe_pool *pool) if (atomic_inc_return(&pool->num_elem) > pool->max_elem) goto out_cnt; - obj = kzalloc(info->size, (pool->flags & RXE_POOL_ATOMIC) ? - GFP_ATOMIC : GFP_KERNEL); + obj = kzalloc(info->size, GFP_KERNEL); if (!obj) goto out_cnt; diff --git a/drivers/infiniband/sw/rxe/rxe_pool.h b/drivers/infiniband/sw/rxe/rxe_pool.h index b9680f9e907c..f916ad4d0406 100644 --- a/drivers/infiniband/sw/rxe/rxe_pool.h +++ b/drivers/infiniband/sw/rxe/rxe_pool.h @@ -11,7 +11,6 @@ #define RXE_POOL_CACHE_FLAGS (0) enum rxe_pool_flags { - RXE_POOL_ATOMIC = BIT(0), RXE_POOL_INDEX = BIT(1), RXE_POOL_KEY = BIT(2), RXE_POOL_NO_ALLOC = BIT(4), From patchwork Fri Jan 22 04:23:12 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bob Pearson X-Patchwork-Id: 12038321 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 70B4BC43381 for ; Fri, 22 Jan 2021 04:24:28 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3A3BB239D1 for ; Fri, 22 Jan 2021 04:24:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726290AbhAVEYQ (ORCPT ); Thu, 21 Jan 2021 23:24:16 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34856 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726704AbhAVEYM (ORCPT ); Thu, 21 Jan 2021 23:24:12 -0500 Received: from mail-oi1-x230.google.com (mail-oi1-x230.google.com [IPv6:2607:f8b0:4864:20::230]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3B2C4C061786 for ; Thu, 21 Jan 2021 20:23:32 -0800 (PST) Received: by mail-oi1-x230.google.com with SMTP id 15so4714282oix.8 for ; Thu, 21 Jan 2021 20:23:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=iZIB4bhhVzzmVHf7mkoTM4mwy1zZee3d8vYisOnp3Zc=; b=f1GtO4Q5Qx4w7moEELOtijAmhlZuLXF86JjXiPJ/3RJsYUQhH0y+kuaiYsFbng8dkV rX4GR55eJNIcyIW+lqKA/2i1QHO8SkqN1EBfgSIL1z4InPXyyRnpWxFWAVlDE3MUgVCg iuSKKfKP8fL0v9JFy9AvVrBzS09evZy6zGnA/QqbB/qu3kjQ4dGPtNJ9rRIMgt7h8e+m uS6DEQZ//BWG1dQCDtSR5mC7FJjFJF9FC/eHzRFIcqfEV6k1Vtg+Zvy+5F3p+ISn+srt bqDSMf46Rqe55z2dT2j74n1sU8hcluY2RlYNHubpDv4tM9Re+dEO/yRVJ9Ffua3Yt4W3 pc8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=iZIB4bhhVzzmVHf7mkoTM4mwy1zZee3d8vYisOnp3Zc=; b=dXtfBI0D+Dc+qBZRVfrWduRErGA0Ky1FJLU5sungevR7w9a13rfWUiUhX3QoLKbVZj YBwq77SeSc8P7j9xiEgFdHUeuygMtwOKJksMFxA9ReLBtVxcYf9ePbPLNt2j2ygsjN69 V4EvwPQiNupe/p8y1Fw6kKlBZop4ZfDN0Hg+dEfR8T1sMftRr6/txo+k+QPTisDNDjf3 FgWL6JbI/V9M5Kb3vqoZopGWCGpIdq4+GBa50jNKSEA+n6xjknKgtGHLCOl8oPvbwS54 Snh3rM7IGVlyVjyXMFfxfJRC933bciUFGSogZmrb7T7ltrls0Huef8AObVy2cWxvKWEu 3Ryg== X-Gm-Message-State: AOAM533ltavIlk/2kmnvzpRIjliskZ1v74DcQREMC14tha5tlD6ag7A+ Uvqv36rxGIH3ixbWe/M5eJc= X-Google-Smtp-Source: ABdhPJwJQ4JEutFQizhb3Du+UDY/SvtSHrUS6PiM05MU1QCa9uqWOpP9cJaV5i7A4zK8h054Pn9svQ== X-Received: by 2002:aca:c448:: with SMTP id u69mr2035943oif.129.1611289411719; Thu, 21 Jan 2021 20:23:31 -0800 (PST) Received: from rpearson-X570-AORUS-PRO-WIFI.tx.rr.com (2603-8081-140c-1a00-5689-5322-9983-137f.res6.spectrum.com. [2603:8081:140c:1a00:5689:5322:9983:137f]) by smtp.gmail.com with ESMTPSA id q26sm14244otg.28.2021.01.21.20.23.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 Jan 2021 20:23:31 -0800 (PST) From: Bob Pearson X-Google-Original-From: Bob Pearson To: jgg@nvidia.com, zyjzyj2000@gmail.com, linux-rdma@vger.kernel.org Cc: Bob Pearson Subject: [PATCH for-next 4/5] RDMA/rxe: Remove calls to ib_device_try_get/put Date: Thu, 21 Jan 2021 22:23:12 -0600 Message-Id: <20210122042313.3336-5-rpearson@hpe.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210122042313.3336-1-rpearson@hpe.com> References: <20210122042313.3336-1-rpearson@hpe.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org rxe_pool.c had redundant attempts to reference count rxe objects taking references to the pools and also the ib_device. This patch eliminates the references to the ib_device which add no value. Signed-off-by: Bob Pearson --- drivers/infiniband/sw/rxe/rxe_pool.c | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/drivers/infiniband/sw/rxe/rxe_pool.c b/drivers/infiniband/sw/rxe/rxe_pool.c index 7e68f99558a7..157fb340a3fb 100644 --- a/drivers/infiniband/sw/rxe/rxe_pool.c +++ b/drivers/infiniband/sw/rxe/rxe_pool.c @@ -347,9 +347,6 @@ void *rxe_alloc__(struct rxe_pool *pool) kref_get(&pool->ref_cnt); - if (!ib_device_try_get(&pool->rxe->ib_dev)) - goto out_put_pool; - if (atomic_inc_return(&pool->num_elem) > pool->max_elem) goto out_cnt; @@ -366,7 +363,6 @@ void *rxe_alloc__(struct rxe_pool *pool) out_cnt: atomic_dec(&pool->num_elem); - ib_device_put(&pool->rxe->ib_dev); out_put_pool: rxe_pool_put(pool); return NULL; @@ -388,9 +384,6 @@ void *rxe_alloc(struct rxe_pool *pool) kref_get(&pool->ref_cnt); read_unlock_irqrestore(&pool->pool_lock, flags); - if (!ib_device_try_get(&pool->rxe->ib_dev)) - goto out_put_pool; - if (atomic_inc_return(&pool->num_elem) > pool->max_elem) goto out_cnt; @@ -407,7 +400,6 @@ void *rxe_alloc(struct rxe_pool *pool) out_cnt: atomic_dec(&pool->num_elem); - ib_device_put(&pool->rxe->ib_dev); out_put_pool: rxe_pool_put(pool); return NULL; @@ -425,9 +417,6 @@ int __rxe_add_to_pool(struct rxe_pool *pool, struct rxe_pool_entry *elem) kref_get(&pool->ref_cnt); read_unlock_irqrestore(&pool->pool_lock, flags); - if (!ib_device_try_get(&pool->rxe->ib_dev)) - goto out_put_pool; - if (atomic_inc_return(&pool->num_elem) > pool->max_elem) goto out_cnt; @@ -438,7 +427,6 @@ int __rxe_add_to_pool(struct rxe_pool *pool, struct rxe_pool_entry *elem) out_cnt: atomic_dec(&pool->num_elem); - ib_device_put(&pool->rxe->ib_dev); out_put_pool: rxe_pool_put(pool); return -EINVAL; @@ -461,7 +449,6 @@ void rxe_elem_release(struct kref *kref) } atomic_dec(&pool->num_elem); - ib_device_put(&pool->rxe->ib_dev); rxe_pool_put(pool); } From patchwork Fri Jan 22 04:23:13 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bob Pearson X-Patchwork-Id: 12038327 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 10E3BC433DB for ; Fri, 22 Jan 2021 04:25:00 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id CEC28230FC for ; Fri, 22 Jan 2021 04:24:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726770AbhAVEY5 (ORCPT ); Thu, 21 Jan 2021 23:24:57 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34988 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726751AbhAVEYu (ORCPT ); Thu, 21 Jan 2021 23:24:50 -0500 Received: from mail-ot1-x332.google.com (mail-ot1-x332.google.com [IPv6:2607:f8b0:4864:20::332]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0B56BC061788 for ; Thu, 21 Jan 2021 20:23:33 -0800 (PST) Received: by mail-ot1-x332.google.com with SMTP id i30so3932450ota.6 for ; Thu, 21 Jan 2021 20:23:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=IoLQ6Kb0lyZM9KouXLHmO29EO02ozzdL35YEzatFBKg=; b=jWcFKkUU3COJgzfYD4sPs9i2v7KOhREZFTNY0HGQhHHkAaz9pUqBTs2j1DdtpkU+2P xjB2PCSGVdhDgi3h3K8Hw2Nch/9CrX8dRlwVyCMYXH6Vq1jRuYOGKACzfar8OdB5nYiI VNZAtG5Caci40+oA7g/vxCispLq7iBmkO30JTJD9NncV53yOpKAPEm+TKJ0t8KNmJMLd 28nFYMxyOIcTgmr/Mpz7KCDKR1BTGrJfGqYv4Lb4YlVx4X95ta2ltJNAIBLTNSXcCHYp xMrCSL9N2bpfaBMrWu72e9rqcDKYxFKO4huU/4Xw7U0GU6joo+MXQ81B4uq0vAFXq1Us Ta+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=IoLQ6Kb0lyZM9KouXLHmO29EO02ozzdL35YEzatFBKg=; b=rITGwkcH/FzO+YDiQJUUE4x1dJe5vh9opmGCPbz5hYUTfTo7f/o1zqnD+Lg1f8ViT3 VITC4crgZ2uxPmeZb+T6ujHy8nNmCbELwBBNCb58LkksDe4iEA9VZx9gB9dHY2K4ZCfL a2e5V+qMtB2rRCsMlL48VY14hEFYwV2/Os34weLIMB0uKExUSRdnd4SY6UmzqpFzBxkg iRszlC6z3SB0I9oDaIHLLd7QoFdifhHDoH5YZQq+Fgl3chRv3R7MwNKIwhXdQi/h1VB0 LYni8puQ6SoZroB881UpsxWzCFq5a+gZ3vsfzpYtkQsa5CyZq8wCnTu1CrgG+vumFrmQ J6jA== X-Gm-Message-State: AOAM530+xc3q0JxNUIPpPcUn0f2eJf6oRhLJa58txEQvo/jX0+rUAa6k ri5kfPN7NEGUgmjDtbL8SUQ= X-Google-Smtp-Source: ABdhPJz9xf5D/bASHa17kBgvk6fmcVFXojBh+Y3KCdDCqLtZffW0nJp/Ojd7WxaeokeVpoWw2b4+Jw== X-Received: by 2002:a9d:4d8c:: with SMTP id u12mr2008281otk.186.1611289412509; Thu, 21 Jan 2021 20:23:32 -0800 (PST) Received: from rpearson-X570-AORUS-PRO-WIFI.tx.rr.com (2603-8081-140c-1a00-5689-5322-9983-137f.res6.spectrum.com. [2603:8081:140c:1a00:5689:5322:9983:137f]) by smtp.gmail.com with ESMTPSA id q26sm14244otg.28.2021.01.21.20.23.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 Jan 2021 20:23:32 -0800 (PST) From: Bob Pearson X-Google-Original-From: Bob Pearson To: jgg@nvidia.com, zyjzyj2000@gmail.com, linux-rdma@vger.kernel.org Cc: Bob Pearson Subject: [PATCH for-next 5/5] RDMA/rxe: Remove unneeded pool->flag Date: Thu, 21 Jan 2021 22:23:13 -0600 Message-Id: <20210122042313.3336-6-rpearson@hpe.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210122042313.3336-1-rpearson@hpe.com> References: <20210122042313.3336-1-rpearson@hpe.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org The rxe driver used the field pool->flag to mark a pool as it was begin shut down and checked this flag in several pool APIs to validate that the pool had not been shut dowm. This is really unneeded because the pools were not marked invalid unless the entire driver was being removed at which point no functional APIs should or could be executing. This patch removes this flag, associated enums and spinlock code, and unneeded labels. Signed-off-by: Bob Pearson --- drivers/infiniband/sw/rxe/rxe_pool.c | 38 ---------------------------- drivers/infiniband/sw/rxe/rxe_pool.h | 6 ----- 2 files changed, 44 deletions(-) diff --git a/drivers/infiniband/sw/rxe/rxe_pool.c b/drivers/infiniband/sw/rxe/rxe_pool.c index 157fb340a3fb..0d177a823365 100644 --- a/drivers/infiniband/sw/rxe/rxe_pool.c +++ b/drivers/infiniband/sw/rxe/rxe_pool.c @@ -159,8 +159,6 @@ int rxe_pool_init( pool->key.key_size = rxe_type_info[type].key_size; } - pool->state = RXE_POOL_STATE_VALID; - out: return err; } @@ -169,7 +167,6 @@ static void rxe_pool_release(struct kref *kref) { struct rxe_pool *pool = container_of(kref, struct rxe_pool, ref_cnt); - pool->state = RXE_POOL_STATE_INVALID; kfree(pool->index.table); } @@ -180,14 +177,9 @@ static void rxe_pool_put(struct rxe_pool *pool) void rxe_pool_cleanup(struct rxe_pool *pool) { - unsigned long flags; - - write_lock_irqsave(&pool->pool_lock, flags); - pool->state = RXE_POOL_STATE_INVALID; if (atomic_read(&pool->num_elem) > 0) pr_warn("%s pool destroyed with unfree'd elem\n", pool_name(pool)); - write_unlock_irqrestore(&pool->pool_lock, flags); rxe_pool_put(pool); } @@ -342,9 +334,6 @@ void *rxe_alloc__(struct rxe_pool *pool) struct rxe_pool_entry *elem; u8 *obj; - if (pool->state != RXE_POOL_STATE_VALID) - return NULL; - kref_get(&pool->ref_cnt); if (atomic_inc_return(&pool->num_elem) > pool->max_elem) @@ -363,26 +352,17 @@ void *rxe_alloc__(struct rxe_pool *pool) out_cnt: atomic_dec(&pool->num_elem); -out_put_pool: rxe_pool_put(pool); return NULL; } void *rxe_alloc(struct rxe_pool *pool) { - unsigned long flags; struct rxe_type_info *info = &rxe_type_info[pool->type]; struct rxe_pool_entry *elem; u8 *obj; - read_lock_irqsave(&pool->pool_lock, flags); - if (pool->state != RXE_POOL_STATE_VALID) { - read_unlock_irqrestore(&pool->pool_lock, flags); - return NULL; - } - kref_get(&pool->ref_cnt); - read_unlock_irqrestore(&pool->pool_lock, flags); if (atomic_inc_return(&pool->num_elem) > pool->max_elem) goto out_cnt; @@ -400,22 +380,13 @@ void *rxe_alloc(struct rxe_pool *pool) out_cnt: atomic_dec(&pool->num_elem); -out_put_pool: rxe_pool_put(pool); return NULL; } int __rxe_add_to_pool(struct rxe_pool *pool, struct rxe_pool_entry *elem) { - unsigned long flags; - - read_lock_irqsave(&pool->pool_lock, flags); - if (pool->state != RXE_POOL_STATE_VALID) { - read_unlock_irqrestore(&pool->pool_lock, flags); - return -EINVAL; - } kref_get(&pool->ref_cnt); - read_unlock_irqrestore(&pool->pool_lock, flags); if (atomic_inc_return(&pool->num_elem) > pool->max_elem) goto out_cnt; @@ -427,7 +398,6 @@ int __rxe_add_to_pool(struct rxe_pool *pool, struct rxe_pool_entry *elem) out_cnt: atomic_dec(&pool->num_elem); -out_put_pool: rxe_pool_put(pool); return -EINVAL; } @@ -462,9 +432,6 @@ void *rxe_pool_get_index(struct rxe_pool *pool, u32 index) read_lock_irqsave(&pool->pool_lock, flags); - if (pool->state != RXE_POOL_STATE_VALID) - goto out; - node = pool->index.tree.rb_node; while (node) { @@ -485,7 +452,6 @@ void *rxe_pool_get_index(struct rxe_pool *pool, u32 index) obj = NULL; } -out: read_unlock_irqrestore(&pool->pool_lock, flags); return obj; } @@ -498,9 +464,6 @@ void *rxe_pool_get_key__(struct rxe_pool *pool, void *key) u8 *obj = NULL; int cmp; - if (pool->state != RXE_POOL_STATE_VALID) - goto out; - node = pool->key.tree.rb_node; while (node) { @@ -524,7 +487,6 @@ void *rxe_pool_get_key__(struct rxe_pool *pool, void *key) obj = NULL; } -out: return obj; } diff --git a/drivers/infiniband/sw/rxe/rxe_pool.h b/drivers/infiniband/sw/rxe/rxe_pool.h index f916ad4d0406..d259531430d7 100644 --- a/drivers/infiniband/sw/rxe/rxe_pool.h +++ b/drivers/infiniband/sw/rxe/rxe_pool.h @@ -46,11 +46,6 @@ struct rxe_type_info { extern struct rxe_type_info rxe_type_info[]; -enum rxe_pool_state { - RXE_POOL_STATE_INVALID, - RXE_POOL_STATE_VALID, -}; - struct rxe_pool_entry { struct rxe_pool *pool; struct kref ref_cnt; @@ -70,7 +65,6 @@ struct rxe_pool { size_t elem_size; struct kref ref_cnt; void (*cleanup)(struct rxe_pool_entry *obj); - enum rxe_pool_state state; enum rxe_pool_flags flags; enum rxe_elem_type type;