From patchwork Thu Jul 26 03:40:19 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Gunthorpe X-Patchwork-Id: 10545145 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9ED8414E0 for ; Thu, 26 Jul 2018 03:40:31 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8D61E2ACCD for ; Thu, 26 Jul 2018 03:40:31 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 81F592A939; Thu, 26 Jul 2018 03:40:31 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0EAF22ACCC for ; Thu, 26 Jul 2018 03:40:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727742AbeGZEzO (ORCPT ); Thu, 26 Jul 2018 00:55:14 -0400 Received: from mail-it0-f65.google.com ([209.85.214.65]:51853 "EHLO mail-it0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726980AbeGZEzO (ORCPT ); Thu, 26 Jul 2018 00:55:14 -0400 Received: by mail-it0-f65.google.com with SMTP id e14-v6so912423itf.1 for ; Wed, 25 Jul 2018 20:40:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ziepe.ca; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=GvWQ4aGGXEHckm14hkHByqYeLlmApmyeqJ7ulTP2QDY=; b=mAebgsYnX+9xv1eJuUvS7a1Fd4N/JehpbITPUa45KEJ5WmfVMQvzW7+SnSsj0z5U3g RrLKpO/HeMaT6LJWskHFDK6pJS1WjojhxGJ10w+6kcz5+rpIOoQDdruaphx+y29wl5tM SW77MwOiHeCB6zvTdFPvwAhMs1jaTZnkpv9dh06YnS7HSBfEdWg9Qk9gXqn16DdaglRn thwLKQPoDaoYyZA6gWxLjsowRrOQAvO4k7qMrb7M+Ty6auK+JIVf2+uFI3jtjkHtxlig Z3JRuF47MOvT81mWII1pISdaCz1OZe2VYE95TF72sOab6yRn8uWqy7BV9HUMKTvKhpWU 5U/A== 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; bh=GvWQ4aGGXEHckm14hkHByqYeLlmApmyeqJ7ulTP2QDY=; b=OzpqOeptMaRAYx3KinwU3H7bjL/yacv5eophW1Y7oGZhXvTI7QejYZ4qdjjo/17Zta J1v7foiitZ0U/7fb1cIMNhPIhZt4LQ6BQrbdv7ovuNk0fuasDJbcLuEjeXELVCy5yhlr wqy/m3BeOpIzP5PXKcmKqigXjQUnXorWpPXeVgYmDYJqlxxuffy2lk3t/UiQSadkAZD4 XpB+bvfl1+5zH0s/JAdmCW89rkINiuaGcoIVMM1z77ASwXlAtZS9STzkx8AjK7guK8qe BGjHGlbZ5Uya009Nx/jgQh/LP7E9zb3jMuk2ruXbC9gPKnt76CpqgN3ev2BwyyappsMt l5Sw== X-Gm-Message-State: AOUpUlFu7vw68EPChp0XFAls4N0uY+NKc1nl0R80pO22yY0rt1JxNE6F trZma/dxF/qCZOmRsIXMzguuzK5z+yTsNQ== X-Google-Smtp-Source: AAOMgpdKrfpjOPQSRW4a3F1WOABlbxRIteQtcFxQuNTRgKAMDJcqxQsX3Q6ytasyvWXBd19/wa4cZA== X-Received: by 2002:a02:5103:: with SMTP id s3-v6mr224648jaa.102.1532576429045; Wed, 25 Jul 2018 20:40:29 -0700 (PDT) Received: from ziepe.ca (S010614cc2056d97f.ed.shawcable.net. [174.3.196.123]) by smtp.gmail.com with ESMTPSA id d12-v6sm259583itf.44.2018.07.25.20.40.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 25 Jul 2018 20:40:26 -0700 (PDT) Received: from jgg by mlx.ziepe.ca with local (Exim 4.86_2) (envelope-from ) id 1fiX8Z-0001XK-Sb; Wed, 25 Jul 2018 21:40:23 -0600 From: Jason Gunthorpe To: linux-rdma@vger.kernel.org, Leon Romanovsky , "Guy Levi(SW)" , Yishai Hadas , "Ruhl, Michael J" Cc: Jason Gunthorpe Subject: [PATCH 10/11] IB/uverbs: Do not block disassociate during write() Date: Wed, 25 Jul 2018 21:40:19 -0600 Message-Id: <20180726034020.5583-11-jgg@ziepe.ca> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180726034020.5583-1-jgg@ziepe.ca> References: <20180726034020.5583-1-jgg@ziepe.ca> Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Jason Gunthorpe Now that all the callbacks are safe to run concurrently with disassociation this test can be eliminated. The ufile core infrastructure becomes entirely self contained and is not sensitive to disassociation. Signed-off-by: Jason Gunthorpe --- drivers/infiniband/core/uverbs.h | 3 +++ drivers/infiniband/core/uverbs_main.c | 20 ++++++++------------ 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/drivers/infiniband/core/uverbs.h b/drivers/infiniband/core/uverbs.h index 5e21cc1f900b9a..0fa32009908c3d 100644 --- a/drivers/infiniband/core/uverbs.h +++ b/drivers/infiniband/core/uverbs.h @@ -158,6 +158,9 @@ struct ib_uverbs_file { spinlock_t uobjects_lock; struct list_head uobjects; + u64 uverbs_cmd_mask; + u64 uverbs_ex_cmd_mask; + struct idr idr; /* spinlock protects write access to idr */ spinlock_t idr_lock; diff --git a/drivers/infiniband/core/uverbs_main.c b/drivers/infiniband/core/uverbs_main.c index a1e427b2c2a139..a3213245aab246 100644 --- a/drivers/infiniband/core/uverbs_main.c +++ b/drivers/infiniband/core/uverbs_main.c @@ -646,13 +646,13 @@ struct file *ib_uverbs_alloc_async_event_file(struct ib_uverbs_file *uverbs_file return filp; } -static bool verify_command_mask(struct ib_device *ib_dev, - u32 command, bool extended) +static bool verify_command_mask(struct ib_uverbs_file *ufile, u32 command, + bool extended) { if (!extended) - return ib_dev->uverbs_cmd_mask & BIT_ULL(command); + return ufile->uverbs_cmd_mask & BIT_ULL(command); - return ib_dev->uverbs_ex_cmd_mask & BIT_ULL(command); + return ufile->uverbs_ex_cmd_mask & BIT_ULL(command); } static bool verify_command_idx(u32 command, bool extended) @@ -722,7 +722,6 @@ static ssize_t ib_uverbs_write(struct file *filp, const char __user *buf, { struct ib_uverbs_file *file = filp->private_data; struct ib_uverbs_ex_cmd_hdr ex_hdr; - struct ib_device *ib_dev; struct ib_uverbs_cmd_hdr hdr; bool extended; int srcu_key; @@ -757,14 +756,8 @@ static ssize_t ib_uverbs_write(struct file *filp, const char __user *buf, return ret; srcu_key = srcu_read_lock(&file->device->disassociate_srcu); - ib_dev = srcu_dereference(file->device->ib_dev, - &file->device->disassociate_srcu); - if (!ib_dev) { - ret = -EIO; - goto out; - } - if (!verify_command_mask(ib_dev, command, extended)) { + if (!verify_command_mask(file, command, extended)) { ret = -EOPNOTSUPP; goto out; } @@ -889,6 +882,9 @@ static int ib_uverbs_open(struct inode *inode, struct file *filp) mutex_unlock(&dev->lists_mutex); srcu_read_unlock(&dev->disassociate_srcu, srcu_key); + file->uverbs_cmd_mask = ib_dev->uverbs_cmd_mask; + file->uverbs_ex_cmd_mask = ib_dev->uverbs_ex_cmd_mask; + return nonseekable_open(inode, filp); err_module: