Received: by 2002:a05:7412:419a:b0:f3:1519:9f41 with SMTP id i26csp4441006rdh; Wed, 29 Nov 2023 01:20:58 -0800 (PST) X-Google-Smtp-Source: AGHT+IHKbeiJ3KIQjtsl4iznx3i3qGowjnsuxeRnvk0dHYDmwNQjkcE8/Rl3gp8Oa5kb6XtcL9U7 X-Received: by 2002:a05:6820:16ac:b0:58d:7023:e869 with SMTP id bc44-20020a05682016ac00b0058d7023e869mr11852348oob.1.1701249658235; Wed, 29 Nov 2023 01:20:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701249658; cv=none; d=google.com; s=arc-20160816; b=atFA8tAISVrad8EYXc+C8a2RpMCkWuzFLPKM7/ClHhit34OEenngzGr/N7+jJyMp/0 iulysly7CU9wI2Lq6MY0KlNLWZu69a1DHsH/irJe8CLT1Zq7+2dET0kluIeuIUwBZQdD fqi3pDlHNztjRCsWW2k1p4kNpW5O8CvSmocJwI+K1HdsxroPDJeOl3STjCJxXU+oea2o Fp9lDVxj5hx2jlv0ktktyPtBDTds2UWR3MJ+6Pef9jjEMEguE0+yMlpRoiv9P/gLNNaP mZEFDqM/bViqcJajaWDMuAsu6igD5O98vpymwC+JU7K36Mz2I6W9xi1Xf+a0BB8Xonrc xgzw== 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=Rjq4wTNVVGhg3tf4fs58cuPYy1TpZNNOPZiYNO8oOf8=; fh=t1/wBvH0J1wYXNrhWqzQpvWtRxLuRJys96wSoU/cY8E=; b=sAVZtwbMlS49pHz0iQk/WM2Ro2rDuXoOD6J7qp2bXhI1Q8w8uDrYJU0dcxCiZASGmi wp/KpP4DW7sJnBGOvG5RNYFsYDH9OR+EaK56S1+OjNGeWUePC0/+TBv5U0V8l9RIPgRW 4FI6DUE5jWUgeSbIv5fhs9teaU4D7/3KyInpOnro6TFbYDE092j29S9fRSxpZ1IHebtv 0b/rTQSzQ2ZbhnPfK4Y295Su71+i8F7eoxgR+INckAPt9WA//Tfaa7H5iIPM76CDl0Xb qIQZUUv8IBI8Bb1PuaGOSQRvHQ7u8lAczSglAdKWv6k+BI0TaCeUHRy0MQ3Unwy11qmI HsJg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=rWMeQ3mA; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.31 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from morse.vger.email (morse.vger.email. [23.128.96.31]) by mx.google.com with ESMTPS id l19-20020a635b53000000b0058986c61bb6si13619533pgm.706.2023.11.29.01.20.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Nov 2023 01:20:58 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.31 as permitted sender) client-ip=23.128.96.31; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=rWMeQ3mA; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.31 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by morse.vger.email (Postfix) with ESMTP id D8EC48217A66; Wed, 29 Nov 2023 01:20:55 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at morse.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229586AbjK2JUe (ORCPT + 99 others); Wed, 29 Nov 2023 04:20:34 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59244 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229621AbjK2JUa (ORCPT ); Wed, 29 Nov 2023 04:20:30 -0500 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0EF69D48 for ; Wed, 29 Nov 2023 01:20:37 -0800 (PST) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2B44BC433C7; Wed, 29 Nov 2023 09:20:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1701249635; bh=9/bUgsZvJru7o+tl3Vh3wyeIpClQ1xZ0pzwWFhxKz/o=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=rWMeQ3mAoHzz/iv/i+oJhMtraaUmZ/Ohd+Y3P01eAoVHrquxVHA2q19JELUF7HF9z JuapIEZiWhTMsh3ylwsc2RhQDnSSjpyWR2wG2LSRKHRgY72gtvSWwv55jkGXqcud3w FMfX5EZoaiZs8pSSYDXSsHKhL/3U/Ipf9mpx8rFY= Date: Wed, 29 Nov 2023 09:20:32 +0000 From: Greg Kroah-Hartman To: Saeed Mahameed 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: <2023112938-unhook-defiance-75ed@gregkh> 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 Content-Disposition: inline In-Reply-To: X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, 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 morse.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 (morse.vger.email [0.0.0.0]); Wed, 29 Nov 2023 01:20:56 -0800 (PST) On Wed, Nov 29, 2023 at 01:08:39AM -0800, Saeed Mahameed wrote: > 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. miscdevice has a reference counter and a lifecycle, you can not have two reference counted objects in the same structure and expect things to work well. > > 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. Then use a normal mutex. Only use a rw lock if you can prove the performance needs it as usually a rw lock is slower and more complex as you then have to document stuff like: > 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. Just make it simple and use a normal mutex please. And fix up the reference counting, it shouldn't be this complex, it's just a "simple" misc device driver :) But before you do that, please see my other email about why not using devlink for all of this instead. thanks, greg k-h