From patchwork Mon May 9 16:23:36 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mauro Carvalho Chehab X-Patchwork-Id: 12843832 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B249EC433F5 for ; Mon, 9 May 2022 16:23:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238995AbiEIQ1i (ORCPT ); Mon, 9 May 2022 12:27:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54396 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238954AbiEIQ1i (ORCPT ); Mon, 9 May 2022 12:27:38 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1F8571FC7FF; Mon, 9 May 2022 09:23:44 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id A86F261449; Mon, 9 May 2022 16:23:43 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0CE30C385AE; Mon, 9 May 2022 16:23:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1652113423; bh=iC3L1mwdxdRv4+yqapYKlvqm98z/iTnxl7TCxRZjCrg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Lwh+hBiFGkXkVN4r2Q1e+8TZCAw15j7jVUgfyAoUe9I/Xr+kIzFp+Lo0kv7e6RSCr OndQHjDXKARhmXni1Z7t3v24nNMx9PkIrY17uBfy8TO6hoepb8YR7D5f6QNR9druaI ADuNSRBkty0MvAuAt67PNWekCzNNGvLiQkziHUX2pdWQc4xKYDPOiY8/K1lQQSnQLX M4VyWca/fgTaFwUX78XaFgYhqC01rdsDe/xnzaDpPwQYjBsALRTDXc3/RrE//o6SBh 4PLolukSm0di4QANaIqBKXxgpd0s5LLWrzZrFUsMkB1kplX6CXcfZSIoXKbmVOO2mZ 9gKUUvOJgYqnQ== Received: from mchehab by mail.kernel.org with local (Exim 4.94.2) (envelope-from ) id 1no6Ae-006xVP-FW; Mon, 09 May 2022 18:23:40 +0200 From: Mauro Carvalho Chehab To: Luis Chamberlain Cc: Mauro Carvalho Chehab , "Daniel Vetter" , "David Airlie" , "Greg KH" , "Jaroslav Kysela" , "Kai Vehmanen" , "Lucas De Marchi" , "Pierre-Louis Bossart" , "Takashi Iwai" , alsa-devel@alsa-project.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-modules@vger.kernel.org, mauro.chehab@linux.intel.com Subject: [PATCH v6 1/4] module: drop prototype for non-existing __symbol_get_gpl() Date: Mon, 9 May 2022 18:23:36 +0200 Message-Id: <5f001015990a76c0da35a4c3cf08e457ec353ab2.1652113087.git.mchehab@kernel.org> X-Mailer: git-send-email 2.35.3 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: There's no such function, and __symbol_get() is already declared as GPL. So, this is likely a left-over. Signed-off-by: Mauro Carvalho Chehab --- See [PATCH v6 0/4] at: https://lore.kernel.org/all/cover.1652113087.git.mchehab@kernel.org/ include/linux/module.h | 1 - 1 file changed, 1 deletion(-) diff --git a/include/linux/module.h b/include/linux/module.h index ccfbaec82790..77961f5773b6 100644 --- a/include/linux/module.h +++ b/include/linux/module.h @@ -299,7 +299,6 @@ struct notifier_block; extern int modules_disabled; /* for sysctl */ /* Get/put a kernel symbol (calls must be symmetric) */ void *__symbol_get(const char *symbol); -void *__symbol_get_gpl(const char *symbol); #define symbol_get(x) ((typeof(&x))(__symbol_get(__stringify(x)))) /* modules using other modules: kdb wants to see this. */ From patchwork Mon May 9 16:23:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mauro Carvalho Chehab X-Patchwork-Id: 12843834 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 89D87C433FE for ; Mon, 9 May 2022 16:23:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239013AbiEIQ1j (ORCPT ); Mon, 9 May 2022 12:27:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54434 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238994AbiEIQ1i (ORCPT ); Mon, 9 May 2022 12:27:38 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 411C12689D7; Mon, 9 May 2022 09:23:44 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id B7D5F61452; Mon, 9 May 2022 16:23:43 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 18849C385B4; Mon, 9 May 2022 16:23:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1652113423; bh=SrbmG/FGRx9mnqf8kRpRVHkNIYGrA6qPuY6/5C7xAUA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=AmChdpm2bT+XTKXg+8kYfVM7LxKIWNgM4goPhOfYiYSWw4CiCCo2E/MZSIQFuRSfh MIJoAEQmQdM2C3B3XarTl3M2BrWjFAo1to6WoXpiKTeUm5CgMeaqmweC6dk/1W3xHF 4OZhPQgZZbi6qjPoGvMAgSqkYAnXTM/BKu2rnAyq4/xF2gPYwRNvBzIORdgziRBDHl lnpFNKHt3j+6Oym4NFljcYgzzoRcf6vN/YIefNU3j1gdpKsfB9HZJ4LHrtJv9Tvoss SeOcaH/Q3laiieFCuc7k8KOhnGXys7N6Yfuuh0DO1cbB45acuDBzlDKuLGjZPUWLpj xXIWzCeTRfdCg== Received: from mchehab by mail.kernel.org with local (Exim 4.94.2) (envelope-from ) id 1no6Ae-006xVS-Hw; Mon, 09 May 2022 18:23:40 +0200 From: Mauro Carvalho Chehab To: Luis Chamberlain Cc: Mauro Carvalho Chehab , "Daniel Vetter" , "David Airlie" , "Greg KH" , "Jaroslav Kysela" , "Kai Vehmanen" , "Lucas De Marchi" , "Pierre-Louis Bossart" , "Takashi Iwai" , alsa-devel@alsa-project.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-modules@vger.kernel.org, mauro.chehab@linux.intel.com, Dan Williams Subject: [PATCH v6 2/4] module: update dependencies at try_module_get() Date: Mon, 9 May 2022 18:23:37 +0200 Message-Id: <28a942f860ccdee05751dcccc74b70e9d64f2b94.1652113087.git.mchehab@kernel.org> X-Mailer: git-send-email 2.35.3 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: Sometimes, device drivers are bound into each other via try_module_get(), making such references invisible when looking at /proc/modules or lsmod. Add a function to allow setting up module references for such cases, and call it when try_module_get() is used. Reviewed-by: Dan Williams Reviewed-by: Greg Kroah-Hartman Signed-off-by: Mauro Carvalho Chehab Reported-by: kernel test robot --- See [PATCH v6 0/4] at: https://lore.kernel.org/all/cover.1652113087.git.mchehab@kernel.org/ include/linux/module.h | 8 +++-- kernel/module/main.c | 73 ++++++++++++++++++++++++++++++++++-------- 2 files changed, 64 insertions(+), 17 deletions(-) diff --git a/include/linux/module.h b/include/linux/module.h index 77961f5773b6..a66b9be92ef5 100644 --- a/include/linux/module.h +++ b/include/linux/module.h @@ -618,12 +618,12 @@ extern void __module_get(struct module *module); /* This is the Right Way to get a module: if it fails, it's being removed, * so pretend it's not there. */ -extern bool try_module_get(struct module *module); +extern bool try_module_get_owner(struct module *module, struct module *this); extern void module_put(struct module *module); #else /*!CONFIG_MODULE_UNLOAD*/ -static inline bool try_module_get(struct module *module) +static inline bool try_module_get_owner(struct module *module, struct module *this) { return !module || module_is_live(module); } @@ -752,7 +752,7 @@ static inline void __module_get(struct module *module) { } -static inline bool try_module_get(struct module *module) +static inline bool try_module_get_owner(struct module *module, struct module *this) { return true; } @@ -893,6 +893,8 @@ static inline bool module_sig_ok(struct module *module) } #endif /* CONFIG_MODULE_SIG */ +#define try_module_get(mod) try_module_get_owner(mod, THIS_MODULE) + int module_kallsyms_on_each_symbol(int (*fn)(void *, const char *, struct module *, unsigned long), void *data); diff --git a/kernel/module/main.c b/kernel/module/main.c index fe44d46c378b..6044aeba0f18 100644 --- a/kernel/module/main.c +++ b/kernel/module/main.c @@ -139,6 +139,24 @@ int unregister_module_notifier(struct notifier_block *nb) } EXPORT_SYMBOL(unregister_module_notifier); +static bool __try_module_get(struct module *module) +{ + bool ret = true; + + if (module) { + preempt_disable(); + /* Note: here, we can fail to get a reference */ + if (likely(module_is_live(module) && + atomic_inc_not_zero(&module->refcnt) != 0)) + trace_module_get(module, _RET_IP_); + else + ret = false; + + preempt_enable(); + } + return ret; +} + /* * We require a truly strong try_module_get(): 0 means success. * Otherwise an error is returned due to ongoing or failed @@ -149,7 +167,7 @@ static inline int strong_try_module_get(struct module *mod) BUG_ON(mod && mod->state == MODULE_STATE_UNFORMED); if (mod && mod->state == MODULE_STATE_COMING) return -EBUSY; - if (try_module_get(mod)) + if (__try_module_get(mod)) return 0; else return -ENOENT; @@ -620,6 +638,41 @@ static int ref_module(struct module *a, struct module *b) return 0; } +static int ref_module_dependency(struct module *mod, struct module *this) +{ + int ret = 0; + + if (!this || !mod || !this->name || !mod->holders_dir) + return -EINVAL; + + if (mod == this) + return 0; + + mutex_lock(&module_mutex); + + if (already_uses(this, mod)) + goto ret; + + ret = strong_try_module_get(mod); + if (ret) + goto ret; + + ret = add_module_usage(this, mod); + if (ret) { + module_put(mod); + goto ret; + } + +#ifdef CONFIG_MODULE_UNLOAD + ret = sysfs_create_link(mod->holders_dir, + &this->mkobj.kobj, this->name); +#endif + +ret: + mutex_unlock(&module_mutex); + return ret; +} + /* Clear the unload stuff of the module. */ static void module_unload_free(struct module *mod) { @@ -830,24 +883,16 @@ void __module_get(struct module *module) } EXPORT_SYMBOL(__module_get); -bool try_module_get(struct module *module) +bool try_module_get_owner(struct module *module, struct module *this) { - bool ret = true; + int ret = __try_module_get(module); - if (module) { - preempt_disable(); - /* Note: here, we can fail to get a reference */ - if (likely(module_is_live(module) && - atomic_inc_not_zero(&module->refcnt) != 0)) - trace_module_get(module, _RET_IP_); - else - ret = false; + if (ret) + ref_module_dependency(module, this); - preempt_enable(); - } return ret; } -EXPORT_SYMBOL(try_module_get); +EXPORT_SYMBOL(try_module_get_owner); void module_put(struct module *module) { From patchwork Mon May 9 16:23:38 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mauro Carvalho Chehab X-Patchwork-Id: 12843835 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id F41ECC43217 for ; Mon, 9 May 2022 16:23:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238954AbiEIQ1l (ORCPT ); Mon, 9 May 2022 12:27:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54528 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239010AbiEIQ1j (ORCPT ); Mon, 9 May 2022 12:27:39 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 939BA267C30; Mon, 9 May 2022 09:23:45 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 526D5B817E5; Mon, 9 May 2022 16:23:44 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 03D49C385AC; Mon, 9 May 2022 16:23:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1652113423; bh=FwXO3JACkg3sY4dA/R+BvoEHsuUOyXZesgC8uLp382Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=r8uSniqMZqOXFG9O7Nk2Dk2ArAW8XkksmnqlDJ+zFtLseUC0uM5wlwP6iQjVnEUtb GU09qu8I4chB+Kewwt7nmV0MfK05y2oikCySLw8TWXbzQr5n+xtn0KvG7XLB/bmXwj TkHu5PCrY6eiG+FiEAE2VTaeC+E+9FaXtfyxaWrGUAtmZP960adBkqjgORqnmAfVUz hXG1Rnt1WpNyLI+GVin684xH/TzgevDgdIbp1DdQ8r8T5QG7tcOcJ5rC6OV7VXjS/8 TKGQZfVWW9yu9QzUI//IXm4wuqGyWWbGwv0Id5li44ruIR51jpCJuuWJzKhDBGmyON 8mpI+NeW9WMXQ== Received: from mchehab by mail.kernel.org with local (Exim 4.94.2) (envelope-from ) id 1no6Ae-006xVX-Jf; Mon, 09 May 2022 18:23:40 +0200 From: Mauro Carvalho Chehab To: Luis Chamberlain Cc: Mauro Carvalho Chehab , "Daniel Vetter" , "David Airlie" , "Greg KH" , "Jaroslav Kysela" , "Kai Vehmanen" , "Lucas De Marchi" , "Pierre-Louis Bossart" , "Takashi Iwai" , Christophe JAILLET , Miquel Raynal , Richard Weinberger , Vignesh Raghavendra , alsa-devel@alsa-project.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-modules@vger.kernel.org, linux-mtd@lists.infradead.org, mauro.chehab@linux.intel.com Subject: [PATCH v6 3/4] module: set holders when symbol_get() is used Date: Mon, 9 May 2022 18:23:38 +0200 Message-Id: X-Mailer: git-send-email 2.35.3 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: Some Kernel modules use symbol_get() or symbol_request() in order to bind into other drivers. That's the case, for instance, of media dvb drivers that hook the frontend drivers via I2C using dvb_attach() macro. When such bindings happen, one needs first to unload/unbind the driver that got the symbol before being able to unload/unbind the module that contains the needed symbol. Add a logic to document it via /proc/modules and via lsmod. Signed-off-by: Mauro Carvalho Chehab --- See [PATCH v6 0/4] at: https://lore.kernel.org/all/cover.1652113087.git.mchehab@kernel.org/ drivers/mtd/chips/gen_probe.c | 4 ++-- include/linux/module.h | 4 ++-- kernel/module/main.c | 3 ++- samples/hw_breakpoint/data_breakpoint.c | 2 +- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/drivers/mtd/chips/gen_probe.c b/drivers/mtd/chips/gen_probe.c index 4d4f97841016..f1e97633ac09 100644 --- a/drivers/mtd/chips/gen_probe.c +++ b/drivers/mtd/chips/gen_probe.c @@ -208,10 +208,10 @@ static inline struct mtd_info *cfi_cmdset_unknown(struct map_info *map, if (!probename) return NULL; - probe_function = __symbol_get(probename); + probe_function = __symbol_get(probename, THIS_MODULE); if (!probe_function) { request_module("cfi_cmdset_%4.4X", type); - probe_function = __symbol_get(probename); + probe_function = __symbol_get(probename, THIS_MODULE); } kfree(probename); diff --git a/include/linux/module.h b/include/linux/module.h index a66b9be92ef5..07a77c2618b5 100644 --- a/include/linux/module.h +++ b/include/linux/module.h @@ -298,8 +298,8 @@ struct notifier_block; extern int modules_disabled; /* for sysctl */ /* Get/put a kernel symbol (calls must be symmetric) */ -void *__symbol_get(const char *symbol); -#define symbol_get(x) ((typeof(&x))(__symbol_get(__stringify(x)))) +void *__symbol_get(const char *symbol, struct module *this); +#define symbol_get(x) ((typeof(&x))(__symbol_get(__stringify(x), THIS_MODULE))) /* modules using other modules: kdb wants to see this. */ struct module_use { diff --git a/kernel/module/main.c b/kernel/module/main.c index 6044aeba0f18..ec1baa67d6e7 100644 --- a/kernel/module/main.c +++ b/kernel/module/main.c @@ -1259,7 +1259,7 @@ static void free_module(struct module *mod) #endif } -void *__symbol_get(const char *symbol) +void *__symbol_get(const char *symbol, struct module *this) { struct find_symbol_arg fsa = { .name = symbol, @@ -1273,6 +1273,7 @@ void *__symbol_get(const char *symbol) return NULL; } preempt_enable(); + ref_module_dependency(fsa.owner, this); return (void *)kernel_symbol_value(fsa.sym); } EXPORT_SYMBOL_GPL(__symbol_get); diff --git a/samples/hw_breakpoint/data_breakpoint.c b/samples/hw_breakpoint/data_breakpoint.c index 418c46fe5ffc..30b3261a894b 100644 --- a/samples/hw_breakpoint/data_breakpoint.c +++ b/samples/hw_breakpoint/data_breakpoint.c @@ -41,7 +41,7 @@ static int __init hw_break_module_init(void) { int ret; struct perf_event_attr attr; - void *addr = __symbol_get(ksym_name); + void *addr = __symbol_get(ksym_name, THIS_MODULE); if (!addr) return -ENXIO; From patchwork Mon May 9 16:23:39 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mauro Carvalho Chehab X-Patchwork-Id: 12843836 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2407CC433FE for ; Mon, 9 May 2022 16:23:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239020AbiEIQ1m (ORCPT ); Mon, 9 May 2022 12:27:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54604 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239019AbiEIQ1l (ORCPT ); Mon, 9 May 2022 12:27:41 -0400 Received: from sin.source.kernel.org (sin.source.kernel.org [IPv6:2604:1380:40e1:4800::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5F86B2689D7; Mon, 9 May 2022 09:23:46 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sin.source.kernel.org (Postfix) with ESMTPS id D045DCE1A16; Mon, 9 May 2022 16:23:44 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 03D9AC385B1; Mon, 9 May 2022 16:23:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1652113423; bh=mdAPNlLnOrv84PSoSJSxXEtEdCuj0qy2zCvHlvJ5Njo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mi2544dS7YM1A/FSFwFeIwBDZblvgLsGSEpCwm+trqSAnt8wy5S5Qxto9Wur2y4tO 9cpkOftKBmZiVgPD7AYJPlCh5bucJIreuaqYsH3amUCE4IdKRG42FKL04zCcjwSABg F/ii55iELg27DEEsp+767f5ls63aiwURAJEdXjUDQkwnfs/cq02uiDDSuY8Gu0wllF EBzhbG4bWuU3xbaBtlYBCpHP6pWPpDqzbDXEBoFUOuZMg2SLH5sMo34M8upZFsdEOv NBny6sycMAKpOlw1elPGs+06j0/ruIgmMXZbHNPxazEsK7iM72JdgdhjyPu/Wyvvco 88LhlYqi4D5jg== Received: from mchehab by mail.kernel.org with local (Exim 4.94.2) (envelope-from ) id 1no6Ae-006xVb-Lo; Mon, 09 May 2022 18:23:40 +0200 From: Mauro Carvalho Chehab To: Luis Chamberlain Cc: Mauro Carvalho Chehab , "Daniel Vetter" , "David Airlie" , "Greg KH" , "Jaroslav Kysela" , "Kai Vehmanen" , "Lucas De Marchi" , "Pierre-Louis Bossart" , "Takashi Iwai" , alsa-devel@alsa-project.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-modules@vger.kernel.org, mauro.chehab@linux.intel.com, Takashi Iwai Subject: [PATCH v6 4/4] ALSA: hda - identify when audio is provided by a video driver Date: Mon, 9 May 2022 18:23:39 +0200 Message-Id: X-Mailer: git-send-email 2.35.3 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: On some devices, the hda driver needs to hook into a video driver, in order to be able to properly access the audio hardware and/or the power management function. That's the case of several snd_hda_intel devices that depends on i915 driver. Ensure that a proper reference between the snd-hda driver needing such binding is shown at /proc/modules, in order to allow userspace to know about such binding. Reviewed-by: Takashi Iwai Signed-off-by: Mauro Carvalho Chehab Acked-by: Daniel Vetter --- See [PATCH v6 0/4] at: https://lore.kernel.org/all/cover.1652113087.git.mchehab@kernel.org/ sound/hda/hdac_component.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sound/hda/hdac_component.c b/sound/hda/hdac_component.c index bb37e7e0bd79..7789873ddf47 100644 --- a/sound/hda/hdac_component.c +++ b/sound/hda/hdac_component.c @@ -199,7 +199,7 @@ static int hdac_component_master_bind(struct device *dev) } /* pin the module to avoid dynamic unbinding, but only if given */ - if (!try_module_get(acomp->ops->owner)) { + if (!try_module_get_owner(acomp->ops->owner, dev->driver->owner)) { ret = -ENODEV; goto out_unbind; }