All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mauro Carvalho Chehab <mchehab@kernel.org>
To: Luis Chamberlain <mcgrof@kernel.org>
Cc: Mauro Carvalho Chehab <mchehab@kernel.org>,
	"Daniel Vetter" <daniel@ffwll.ch>,
	"David Airlie" <airlied@linux.ie>,
	"Greg KH" <gregkh@linuxfoundation.org>,
	"Jaroslav Kysela" <perex@perex.cz>,
	"Kai Vehmanen" <kai.vehmanen@intel.com>,
	"Lucas De Marchi" <lucas.demarchi@intel.com>,
	"Pierre-Louis Bossart" <pierre-louis.bossart@intel.com>,
	"Takashi Iwai" <tiwai@suse.com>,
	Christophe JAILLET <christophe.jaillet@wanadoo.fr>,
	Miquel Raynal <miquel.raynal@bootlin.com>,
	Richard Weinberger <richard@nod.at>,
	Vignesh Raghavendra <vigneshr@ti.com>,
	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	[thread overview]
Message-ID: <e8058ca7a0b84479f4075654cecff811916639ce.1652113087.git.mchehab@kernel.org> (raw)
In-Reply-To: <cover.1652113087.git.mchehab@kernel.org>

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 <mchehab@kernel.org>
---

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;
-- 
2.35.3


WARNING: multiple messages have this Message-ID (diff)
From: Mauro Carvalho Chehab <mchehab@kernel.org>
To: Luis Chamberlain <mcgrof@kernel.org>
Cc: Mauro Carvalho Chehab <mchehab@kernel.org>,
	"Daniel Vetter" <daniel@ffwll.ch>,
	"David Airlie" <airlied@linux.ie>,
	"Greg KH" <gregkh@linuxfoundation.org>,
	"Jaroslav Kysela" <perex@perex.cz>,
	"Kai Vehmanen" <kai.vehmanen@intel.com>,
	"Lucas De Marchi" <lucas.demarchi@intel.com>,
	"Pierre-Louis Bossart" <pierre-louis.bossart@intel.com>,
	"Takashi Iwai" <tiwai@suse.com>,
	Christophe JAILLET <christophe.jaillet@wanadoo.fr>,
	Miquel Raynal <miquel.raynal@bootlin.com>,
	Richard Weinberger <richard@nod.at>,
	Vignesh Raghavendra <vigneshr@ti.com>,
	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	[thread overview]
Message-ID: <e8058ca7a0b84479f4075654cecff811916639ce.1652113087.git.mchehab@kernel.org> (raw)
In-Reply-To: <cover.1652113087.git.mchehab@kernel.org>

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 <mchehab@kernel.org>
---

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;
-- 
2.35.3


______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

WARNING: multiple messages have this Message-ID (diff)
From: Mauro Carvalho Chehab <mchehab@kernel.org>
To: Luis Chamberlain <mcgrof@kernel.org>
Cc: alsa-devel@alsa-project.org, Richard Weinberger <richard@nod.at>,
	mauro.chehab@linux.intel.com, David Airlie <airlied@linux.ie>,
	Greg KH <gregkh@linuxfoundation.org>,
	intel-gfx@lists.freedesktop.org,
	Lucas De Marchi <lucas.demarchi@intel.com>,
	Takashi Iwai <tiwai@suse.com>,
	dri-devel@lists.freedesktop.org, Jaroslav Kysela <perex@perex.cz>,
	Vignesh Raghavendra <vigneshr@ti.com>,
	Kai Vehmanen <kai.vehmanen@intel.com>,
	Christophe JAILLET <christophe.jaillet@wanadoo.fr>,
	linux-modules@vger.kernel.org,
	Miquel Raynal <miquel.raynal@bootlin.com>,
	linux-mtd@lists.infradead.org,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	linux-kernel@vger.kernel.org,
	Pierre-Louis Bossart <pierre-louis.bossart@intel.com>
Subject: [PATCH v6 3/4] module: set holders when symbol_get() is used
Date: Mon,  9 May 2022 18:23:38 +0200	[thread overview]
Message-ID: <e8058ca7a0b84479f4075654cecff811916639ce.1652113087.git.mchehab@kernel.org> (raw)
In-Reply-To: <cover.1652113087.git.mchehab@kernel.org>

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 <mchehab@kernel.org>
---

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;
-- 
2.35.3


WARNING: multiple messages have this Message-ID (diff)
From: Mauro Carvalho Chehab <mchehab@kernel.org>
To: Luis Chamberlain <mcgrof@kernel.org>
Cc: alsa-devel@alsa-project.org, Richard Weinberger <richard@nod.at>,
	mauro.chehab@linux.intel.com, David Airlie <airlied@linux.ie>,
	Greg KH <gregkh@linuxfoundation.org>,
	intel-gfx@lists.freedesktop.org,
	Lucas De Marchi <lucas.demarchi@intel.com>,
	Takashi Iwai <tiwai@suse.com>,
	dri-devel@lists.freedesktop.org, Jaroslav Kysela <perex@perex.cz>,
	Vignesh Raghavendra <vigneshr@ti.com>,
	Kai Vehmanen <kai.vehmanen@intel.com>,
	Christophe JAILLET <christophe.jaillet@wanadoo.fr>,
	linux-modules@vger.kernel.org,
	Miquel Raynal <miquel.raynal@bootlin.com>,
	linux-mtd@lists.infradead.org,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	linux-kernel@vger.kernel.org,
	Pierre-Louis Bossart <pierre-louis.bossart@intel.com>
Subject: [Intel-gfx] [PATCH v6 3/4] module: set holders when symbol_get() is used
Date: Mon,  9 May 2022 18:23:38 +0200	[thread overview]
Message-ID: <e8058ca7a0b84479f4075654cecff811916639ce.1652113087.git.mchehab@kernel.org> (raw)
In-Reply-To: <cover.1652113087.git.mchehab@kernel.org>

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 <mchehab@kernel.org>
---

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;
-- 
2.35.3


WARNING: multiple messages have this Message-ID (diff)
From: Mauro Carvalho Chehab <mchehab@kernel.org>
To: Luis Chamberlain <mcgrof@kernel.org>
Cc: alsa-devel@alsa-project.org, Richard Weinberger <richard@nod.at>,
	mauro.chehab@linux.intel.com, David Airlie <airlied@linux.ie>,
	Greg KH <gregkh@linuxfoundation.org>,
	intel-gfx@lists.freedesktop.org,
	Lucas De Marchi <lucas.demarchi@intel.com>,
	Takashi Iwai <tiwai@suse.com>,
	dri-devel@lists.freedesktop.org,
	Vignesh Raghavendra <vigneshr@ti.com>,
	Kai Vehmanen <kai.vehmanen@intel.com>,
	Christophe JAILLET <christophe.jaillet@wanadoo.fr>,
	linux-modules@vger.kernel.org, Daniel Vetter <daniel@ffwll.ch>,
	Miquel Raynal <miquel.raynal@bootlin.com>,
	linux-mtd@lists.infradead.org,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	linux-kernel@vger.kernel.org,
	Pierre-Louis Bossart <pierre-louis.bossart@intel.com>
Subject: [PATCH v6 3/4] module: set holders when symbol_get() is used
Date: Mon,  9 May 2022 18:23:38 +0200	[thread overview]
Message-ID: <e8058ca7a0b84479f4075654cecff811916639ce.1652113087.git.mchehab@kernel.org> (raw)
In-Reply-To: <cover.1652113087.git.mchehab@kernel.org>

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 <mchehab@kernel.org>
---

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;
-- 
2.35.3


  parent reply	other threads:[~2022-05-09 16:23 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-09 16:23 [PATCH v6 0/4] Let userspace know when snd-hda-intel needs i915 Mauro Carvalho Chehab
2022-05-09 16:23 ` Mauro Carvalho Chehab
2022-05-09 16:23 ` [Intel-gfx] " Mauro Carvalho Chehab
2022-05-09 16:23 ` Mauro Carvalho Chehab
2022-05-09 16:23 ` Mauro Carvalho Chehab
2022-05-09 16:23 ` [PATCH v6 1/4] module: drop prototype for non-existing __symbol_get_gpl() Mauro Carvalho Chehab
2022-05-09 16:23   ` Mauro Carvalho Chehab
2022-05-09 16:23   ` [Intel-gfx] " Mauro Carvalho Chehab
2022-05-09 16:23   ` Mauro Carvalho Chehab
2022-05-09 16:23 ` [PATCH v6 2/4] module: update dependencies at try_module_get() Mauro Carvalho Chehab
2022-05-09 16:23   ` Mauro Carvalho Chehab
2022-05-09 16:23   ` [Intel-gfx] " Mauro Carvalho Chehab
2022-05-09 16:23   ` Mauro Carvalho Chehab
2022-05-15  8:22   ` [module] a1f1245bef: BUG:sleeping_function_called_from_invalid_context_at_kernel/locking/mutex.c kernel test robot
2022-05-15  8:22     ` kernel test robot
2022-05-15  8:22     ` kernel test robot
2022-05-15  8:22     ` [Intel-gfx] " kernel test robot
2022-05-15  8:22     ` kernel test robot
2022-05-09 16:23 ` Mauro Carvalho Chehab [this message]
2022-05-09 16:23   ` [PATCH v6 3/4] module: set holders when symbol_get() is used Mauro Carvalho Chehab
2022-05-09 16:23   ` [Intel-gfx] " Mauro Carvalho Chehab
2022-05-09 16:23   ` Mauro Carvalho Chehab
2022-05-09 16:23   ` Mauro Carvalho Chehab
2022-05-09 16:23 ` [PATCH v6 4/4] ALSA: hda - identify when audio is provided by a video driver Mauro Carvalho Chehab
2022-05-09 16:23   ` Mauro Carvalho Chehab
2022-05-09 16:23   ` [Intel-gfx] " Mauro Carvalho Chehab
2022-05-09 16:23   ` Mauro Carvalho Chehab
2022-05-11 19:51   ` Daniel Vetter
2022-05-11 19:51     ` Daniel Vetter
2022-05-11 19:51     ` [Intel-gfx] " Daniel Vetter
2022-05-11 19:51     ` Daniel Vetter
2022-05-09 20:07 ` [Intel-gfx] ✗ Fi.CI.BUILD: failure for Let userspace know when snd-hda-intel needs i915 Patchwork
2022-05-09 20:38 ` [PATCH v6 0/4] " Luis Chamberlain
2022-05-09 20:38   ` Luis Chamberlain
2022-05-09 20:38   ` Luis Chamberlain
2022-05-09 20:38   ` [Intel-gfx] " Luis Chamberlain
2022-05-09 20:38   ` Luis Chamberlain
2022-09-20  5:24   ` Mauro Carvalho Chehab
2022-09-20  5:24     ` Mauro Carvalho Chehab
2022-09-20  5:24     ` Mauro Carvalho Chehab
2022-09-20  5:24     ` Mauro Carvalho Chehab
2022-09-20  5:24     ` [Intel-gfx] " Mauro Carvalho Chehab
2022-09-27 23:31     ` Luis Chamberlain
2022-09-27 23:31       ` Luis Chamberlain
2022-09-27 23:31       ` [Intel-gfx] " Luis Chamberlain
2022-09-27 23:31       ` Luis Chamberlain
2022-09-27 23:31       ` Luis Chamberlain

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=e8058ca7a0b84479f4075654cecff811916639ce.1652113087.git.mchehab@kernel.org \
    --to=mchehab@kernel.org \
    --cc=airlied@linux.ie \
    --cc=alsa-devel@alsa-project.org \
    --cc=christophe.jaillet@wanadoo.fr \
    --cc=daniel@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=kai.vehmanen@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-modules@vger.kernel.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=lucas.demarchi@intel.com \
    --cc=mauro.chehab@linux.intel.com \
    --cc=mcgrof@kernel.org \
    --cc=miquel.raynal@bootlin.com \
    --cc=perex@perex.cz \
    --cc=pierre-louis.bossart@intel.com \
    --cc=richard@nod.at \
    --cc=tiwai@suse.com \
    --cc=vigneshr@ti.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.