Received: by 2002:a05:7412:419a:b0:f3:1519:9f41 with SMTP id i26csp4435882rdh; Wed, 29 Nov 2023 01:09:01 -0800 (PST) X-Google-Smtp-Source: AGHT+IEKFcKWIHX1DRO1jav9yQYm/p8aD69CKfOhskon52fJk5N3nbJZiZy7VHWG+KFq5nLxPCVr X-Received: by 2002:a17:903:32ce:b0:1d0:187d:a0b4 with SMTP id i14-20020a17090332ce00b001d0187da0b4mr658468plr.1.1701248941574; Wed, 29 Nov 2023 01:09:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701248941; cv=none; d=google.com; s=arc-20160816; b=X740YCxveJtoem7EAsxJtpPN7ee0He55O/du1iZVOJpxUFKpByh0KbDmVwWtkcArIn Y9VhTF4BzrnrZL4e7zX4kDdwd6URUNXZEYyVmBJXeKVSOOeUlTxVBGSFFrrw/j4rxuG7 F5Pjth0CU6bEnmSFhjDHqt2IvqGwot2RLuqGKaL06jpoVyxuaWwT2bdDWWt/nr7woFWR 7ipEpi8Lq3awzW5J1aJhj1eVO1iFVqcTEtKGQxhwgmcU3gAi0ux6f69qA7ad4C1OaJvj oWHea3/SUVHzcbWghaFK5rCnZMep6Z9jzVv8JXOeixa+nid1t0KYxYViMclx8d2ogi0q SESA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=TItEhw/SkcPyG7GBdga7gztzt6dYK04K07LCItSQ8/4=; fh=zoSMQ4a4QwWNxeEeetXsvOtHDlTyNHz2tNRhoYEheKU=; b=vBbmGhdUWuYBYTYNc8xGX0zwIknrcnhDnQ8kq3gmJk2PfLOVeRBQdKz7aN/YezBtAr ohoUh5SOXxOIZXCb/VEEFfKKkTpohLN+4bRKWhFuCDfmsbIk249Ugj3djjrHMUQPh+JE 7xI++BZ375EjzcfZozZrFBDLIbIqadPdLHtBX82tshhiDd9yFYL/DhzekpY2qB5DDMto DrPh7V/LO3x7kIYxb9CI8lDKjZDqVDf6jUnhYESTLEKAACn3Pama4L8QTnx4oFn0PdD0 eXaoFun8ZnXLW+veeeGolgpGQffUPlqJsyARKxiapRdKTFr1KG+cwwfS560dewCSHj0H vWhw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=nh1svg8a; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from pete.vger.email (pete.vger.email. [2620:137:e000::3:6]) by mx.google.com with ESMTPS id z8-20020a1709027e8800b001cfdd2fe63csi4898068pla.312.2023.11.29.01.09.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Nov 2023 01:09:01 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) client-ip=2620:137:e000::3:6; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=nh1svg8a; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by pete.vger.email (Postfix) with ESMTP id 0F4028057E16; Wed, 29 Nov 2023 01:08:59 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at pete.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232580AbjK2JIm (ORCPT + 99 others); Wed, 29 Nov 2023 04:08:42 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57242 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232622AbjK2JIf (ORCPT ); Wed, 29 Nov 2023 04:08:35 -0500 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5DCAE1BDC for ; Wed, 29 Nov 2023 01:08:41 -0800 (PST) Received: by smtp.kernel.org (Postfix) with ESMTPSA id E1EBFC433C7; Wed, 29 Nov 2023 09:08:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1701248921; bh=MwgL1kcUU0p+j6TDnsevHvbF5wGMikcg9hRR7s46RQQ=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=nh1svg8aog05AEGocb3HiRgJpumKWuOcGk6ae9e8KmVq7U7ZmTsGDONtjUkcz2KnS ghK7tUAcqy2oX29n6qYYuYKw70MzpjPtFIWD+7Pw4nU/EAmrxIDvmWxcav5gjFH7w1 GFqEFqhinbiSEgPgfyLgWpjQnrfM/VRL8GfEHFJQciF6V9fIaE194xWk9R6noKyUe8 fP6twcKn2RemSYdgFj20CnJAtOCaEKb7a/1Db08iiMQN8Bc7ktLKkW6IRMXPESM0yH wRbHvwwPozNu7msiINrrWceHL58XqVeopY5lk82FmGaJf4vdUEzjC8i+oyMUidPKJk lD7wbwK++JhZA== Date: Wed, 29 Nov 2023 01:08:39 -0800 From: Saeed Mahameed To: Greg Kroah-Hartman Cc: Arnd Bergmann , Jason Gunthorpe , Leon Romanovsky , Jiri Pirko , Leonid Bloch , Itay Avraham , Jakub Kicinski , linux-kernel@vger.kernel.org, Saeed Mahameed Subject: Re: [PATCH V3 2/5] misc: mlx5ctl: Add mlx5ctl misc driver Message-ID: References: <20231121070619.9836-1-saeed@kernel.org> <20231121070619.9836-3-saeed@kernel.org> <2023112727-caddie-eardrum-efe8@gregkh> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Disposition: inline In-Reply-To: <2023112727-caddie-eardrum-efe8@gregkh> X-Spam-Status: No, score=-1.2 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on pete.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (pete.vger.email [0.0.0.0]); Wed, 29 Nov 2023 01:08:59 -0800 (PST) On 27 Nov 18:59, Greg Kroah-Hartman wrote: >On Mon, Nov 20, 2023 at 11:06:16PM -0800, Saeed Mahameed wrote: >> +struct mlx5ctl_dev { >> + struct mlx5_core_dev *mdev; >> + struct miscdevice miscdev; >> + struct auxiliary_device *adev; >> + struct list_head fd_list; >> + spinlock_t fd_list_lock; /* protect list add/del */ >> + struct rw_semaphore rw_lock; >> + struct kref refcount; > >You now have 2 different things that control the lifespan of this >structure. We really need some way to automatically check this so that >people don't keep making this same mistake, it happens all the time :( > >Please pick one structure (miscdevice) or the other (kref) to control >the lifespan, having 2 will just not work. > miscdevice doesn't handle the lifespan, open files will remain open even after the miscdevice was unregistered, hence we use the kref to defer the kfree until the last open file is closed. >Also, why a rw_semaphore? Only use those if you can prove with a >benchmark that it is actually faster, otherwise it's simpler to just use >a normal mutex (hint, you are changing the fields in the structure with >the read lock held, which feels very wrong, and so needs a LOT of >documentation, or just use a normal mutex...) > It is needed so we can protect against underlaying device unloading while miscdevice is active, we use rw semaphore since we don't care about synchronization between any of the fops, but we want to protect current active ioctls and fops from sudden mlx5ctl_remove (auxiliary_driver.remove) which can happen dynamically due to underlaying device removal. So here is the locking scheme: write_lock() : only on mlx5_ctl remove and mark the device is down via assigning NULL to mcdev->dev, to let all new readers abort and to wait for current readers to finish their task. read_lock(): used in all fops and ioctls, to make sure underlaying mlx5_core device is still active, and to prevent open files to access the device when miscdevice was already unregistered. I agree, this should've been documented in the code, I will add documentation. >thanks, > >greg k-h