Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1495312

[PATCH 1/4] base: soc: Early register bus when needed

From Geert Uytterhoeven <geert+renesas@glider.be>
Newsgroups linux.kernel
Subject [PATCH 1/4] base: soc: Early register bus when needed
Date 2016-10-04 11:20 +0200
Message-ID <sou3f-Iv-13@gated-at.bofh.it> (permalink)
References <sotTA-Ep-17@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


If soc_device_register() is called before soc_bus_register(), it crashes
with a NULL pointer dereference.

soc_bus_register() is already a core_initcall(), but drivers/base/ is
entered later than e.g. drivers/pinctrl/ and drivers/soc/. Hence there
are several subsystems that may need to know SoC revision information,
while it's not so easy to initialize the SoC bus even earlier using an
initcall.

To fix this, let soc_device_register() register the bus early if that
hasn't happened yet.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
 drivers/base/soc.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/drivers/base/soc.c b/drivers/base/soc.c
index 75b98aad6fafd171..f612715d24754d27 100644
--- a/drivers/base/soc.c
+++ b/drivers/base/soc.c
@@ -114,6 +114,12 @@ struct soc_device *soc_device_register(struct soc_device_attribute *soc_dev_attr
 	struct soc_device *soc_dev;
 	int ret;
 
+	if (!soc_bus_type.p) {
+		ret = bus_register(&soc_bus_type);
+		if (ret)
+			goto out1;
+	}
+
 	soc_dev = kzalloc(sizeof(*soc_dev), GFP_KERNEL);
 	if (!soc_dev) {
 		ret = -ENOMEM;
@@ -157,6 +163,9 @@ void soc_device_unregister(struct soc_device *soc_dev)
 
 static int __init soc_bus_register(void)
 {
+	if (soc_bus_type.p)
+		return 0;
+
 	return bus_register(&soc_bus_type);
 }
 core_initcall(soc_bus_register);
-- 
1.9.1

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 0/4] soc: renesas: Identify SoC and register with the SoC bus Geert Uytterhoeven <geert+renesas@glider.be> - 2016-10-04 11:20 +0200
  [PATCH 1/4] base: soc: Early register bus when needed Geert Uytterhoeven <geert+renesas@glider.be> - 2016-10-04 11:20 +0200
    Re: [PATCH 1/4] base: soc: Early register bus when needed Arnd Bergmann <arnd@arndb.de> - 2016-10-10 16:20 +0200
  [PATCH 3/4] base: soc: Check for NULL SoC device attributes Geert Uytterhoeven <geert+renesas@glider.be> - 2016-10-04 11:20 +0200
    Re: [PATCH 3/4] base: soc: Check for NULL SoC device attributes Arnd Bergmann <arnd@arndb.de> - 2016-10-10 16:20 +0200
  Re: [PATCH 0/4] soc: renesas: Identify SoC and register with the SoC bus Arnd Bergmann <arnd@arndb.de> - 2016-10-10 16:30 +0200

csiph-web