From mboxrd@z Thu Jan 1 00:00:00 1970 From: Greg Kroah-Hartman Subject: Re: [PATCH v4] usb: create usb_debug_root for gadget only Date: Tue, 4 Jun 2019 09:37:06 +0200 Message-ID: <20190604073706.GA25045@kroah.com> References: <1559633647-29040-1-git-send-email-chunfeng.yun@mediatek.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Content-Disposition: inline In-Reply-To: <1559633647-29040-1-git-send-email-chunfeng.yun@mediatek.com> Sender: linux-kernel-owner@vger.kernel.org To: Chunfeng Yun Cc: Felipe Balbi , Matthias Brugger , linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org List-Id: linux-mediatek@lists.infradead.org On Tue, Jun 04, 2019 at 03:34:07PM +0800, Chunfeng Yun wrote: > When CONFIG_USB is not set, and CONFIG_USB_GADGET is set, > there is an issue, e.g.: > > drivers/usb/mtu3/mtu3_debugfs.o: in function 'ssusb_debugfs_create_root': > mtu3_debugfs.c:(.text+0xba3): undefined reference to 'usb_debug_root' > > usb_debug_root is currently only built when host is supported > (CONFIG_USB is set), for convenience, we also want it created when > gadget only is enabled, this patch try to support it. > > Reported-by: Randy Dunlap > Signed-off-by: Chunfeng Yun > --- > v4: > move common API into common.c suggested by Felipe > > v3: > 1. still create usb_debug_root for gadget only > 2. abandon mtu3's change > 3. drop acked-by Randy > > v2(resend): add acked-by Randy > > v1: fix mtu3's build error, replace usb_debug_root by NULL; > --- > drivers/usb/common/common.c | 26 ++++++++++++++++++++++++++ > drivers/usb/core/usb.c | 16 ++++------------ > drivers/usb/gadget/udc/core.c | 3 +++ > include/linux/usb.h | 2 ++ > 4 files changed, 35 insertions(+), 12 deletions(-) > > diff --git a/drivers/usb/common/common.c b/drivers/usb/common/common.c > index 18f5dcf58b0d..c52e9c9f58ec 100644 > --- a/drivers/usb/common/common.c > +++ b/drivers/usb/common/common.c > @@ -15,6 +15,7 @@ > #include > #include > #include > +#include > > static const char *const ep_type_names[] = { > [USB_ENDPOINT_XFER_CONTROL] = "ctrl", > @@ -139,6 +140,31 @@ enum usb_dr_mode usb_get_dr_mode(struct device *dev) > } > EXPORT_SYMBOL_GPL(usb_get_dr_mode); > > +struct dentry *usb_debug_root; > +EXPORT_SYMBOL_GPL(usb_debug_root); > + > +static atomic_t usb_debug_root_refcnt = ATOMIC_INIT(0); Ick, no. > + > +struct dentry *usb_debugfs_init(void) > +{ > + if (!usb_debug_root) > + usb_debug_root = debugfs_create_dir("usb", NULL); > + > + atomic_inc(&usb_debug_root_refcnt); > + > + return usb_debug_root; > +} > +EXPORT_SYMBOL_GPL(usb_debugfs_init); > + > +void usb_debugfs_cleanup(void) > +{ > + if (atomic_dec_and_test(&usb_debug_root_refcnt)) { > + debugfs_remove_recursive(usb_debug_root); > + usb_debug_root = NULL; > + } > +} > +EXPORT_SYMBOL_GPL(usb_debugfs_cleanup); Only remove the debugfs subdir if the usbcore module is removed. Create the debugfs subdir when the usbcore module is loaded. No need for any reference counting of any sort at all. No need to overthink this :) thanks, greg k-h From mboxrd@z Thu Jan 1 00:00:00 1970 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=-8.5 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,T_DKIMWL_WL_HIGH,USER_AGENT_MUTT autolearn=unavailable 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 1C544C282CE for ; Tue, 4 Jun 2019 07:37:13 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E5EAE24BCB for ; Tue, 4 Jun 2019 07:37:12 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="i+wmxA14"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="DtKXT2B1" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E5EAE24BCB Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=linuxfoundation.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=U++jGhBDhqCrZX7tODxOMd4lDs+vpQW/2uR0IFgdEJ8=; b=i+wmxA14MmJ8gh H/Wu9Ko7iQlN3i1DV0lvWTwTT19v3Yr6LzpefQZ6JWvuSaRWVIqGczKW/Ul+s8qQnh1SZMy7ai/0F CLGIdY2v8MhRaOm7xGEyRNl0cg6hcqZWdc6crRFz6AD7+eGn38lwH/ClvRl0wM37Mk7vbCBedLDea Gn6MUcpdqTwrjw61kfld2LPj69bxFwX0s6UBbTG7W20MuMJcr1KnwyaY6lL6uQ/H1PCy0/K/QKgHz CYtuMg9bmYVxTOtW2Hp2HLw18iInOnU7a7R8KTBkBwZXKGBJALj2988FMKXbcq6GaOF1jJbcEEoIv 3KJjo+THijtIiXiqo5PA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1hY40N-0006L3-TQ; Tue, 04 Jun 2019 07:37:11 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1hY40L-0006Kg-9t; Tue, 04 Jun 2019 07:37:10 +0000 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 5F2DA249F4; Tue, 4 Jun 2019 07:37:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1559633828; bh=yYjY9dPy0rYXxHJBZ1dR1jEtdGG5VdpSBr1YZrJynDk=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=DtKXT2B1mmCgfmSocSk422rsl4VwCBPwwgyDUn74Z9p1rd8VASnFg7wZ797DfmPo6 L76rjNkBWerw3wHawBdh2+nIVCt7FIxBYUL7nasWGYXLG+DS/jsLtTzzAxDcigSCqv K1eZzEuWRcwO5TV5GhrOFWs/kPQkxzZSoG+m9z/I= Date: Tue, 4 Jun 2019 09:37:06 +0200 From: Greg Kroah-Hartman To: Chunfeng Yun Subject: Re: [PATCH v4] usb: create usb_debug_root for gadget only Message-ID: <20190604073706.GA25045@kroah.com> References: <1559633647-29040-1-git-send-email-chunfeng.yun@mediatek.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1559633647-29040-1-git-send-email-chunfeng.yun@mediatek.com> User-Agent: Mutt/1.12.0 (2019-05-25) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190604_003709_370477_49B1A2A7 X-CRM114-Status: GOOD ( 19.27 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, Felipe Balbi , linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mediatek@lists.infradead.org, Matthias Brugger , linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Tue, Jun 04, 2019 at 03:34:07PM +0800, Chunfeng Yun wrote: > When CONFIG_USB is not set, and CONFIG_USB_GADGET is set, > there is an issue, e.g.: > > drivers/usb/mtu3/mtu3_debugfs.o: in function 'ssusb_debugfs_create_root': > mtu3_debugfs.c:(.text+0xba3): undefined reference to 'usb_debug_root' > > usb_debug_root is currently only built when host is supported > (CONFIG_USB is set), for convenience, we also want it created when > gadget only is enabled, this patch try to support it. > > Reported-by: Randy Dunlap > Signed-off-by: Chunfeng Yun > --- > v4: > move common API into common.c suggested by Felipe > > v3: > 1. still create usb_debug_root for gadget only > 2. abandon mtu3's change > 3. drop acked-by Randy > > v2(resend): add acked-by Randy > > v1: fix mtu3's build error, replace usb_debug_root by NULL; > --- > drivers/usb/common/common.c | 26 ++++++++++++++++++++++++++ > drivers/usb/core/usb.c | 16 ++++------------ > drivers/usb/gadget/udc/core.c | 3 +++ > include/linux/usb.h | 2 ++ > 4 files changed, 35 insertions(+), 12 deletions(-) > > diff --git a/drivers/usb/common/common.c b/drivers/usb/common/common.c > index 18f5dcf58b0d..c52e9c9f58ec 100644 > --- a/drivers/usb/common/common.c > +++ b/drivers/usb/common/common.c > @@ -15,6 +15,7 @@ > #include > #include > #include > +#include > > static const char *const ep_type_names[] = { > [USB_ENDPOINT_XFER_CONTROL] = "ctrl", > @@ -139,6 +140,31 @@ enum usb_dr_mode usb_get_dr_mode(struct device *dev) > } > EXPORT_SYMBOL_GPL(usb_get_dr_mode); > > +struct dentry *usb_debug_root; > +EXPORT_SYMBOL_GPL(usb_debug_root); > + > +static atomic_t usb_debug_root_refcnt = ATOMIC_INIT(0); Ick, no. > + > +struct dentry *usb_debugfs_init(void) > +{ > + if (!usb_debug_root) > + usb_debug_root = debugfs_create_dir("usb", NULL); > + > + atomic_inc(&usb_debug_root_refcnt); > + > + return usb_debug_root; > +} > +EXPORT_SYMBOL_GPL(usb_debugfs_init); > + > +void usb_debugfs_cleanup(void) > +{ > + if (atomic_dec_and_test(&usb_debug_root_refcnt)) { > + debugfs_remove_recursive(usb_debug_root); > + usb_debug_root = NULL; > + } > +} > +EXPORT_SYMBOL_GPL(usb_debugfs_cleanup); Only remove the debugfs subdir if the usbcore module is removed. Create the debugfs subdir when the usbcore module is loaded. No need for any reference counting of any sort at all. No need to overthink this :) thanks, greg k-h _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel