summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Krummenacher <max.krummenacher@toradex.com>2024-02-22 13:56:56 +0100
committerMax Krummenacher <max.krummenacher@toradex.com>2024-02-22 13:56:56 +0100
commit3ac08f5e1534e26cbe255088c0243b0b57e1be0d (patch)
tree8a5ff7519f213285e1040b0cf54d8fb48d44a1ec
parentb2250107ad8e5d8cfae84f3d53ef139667ff0821 (diff)
Revert "rpmsg: Fix calling device_lock() on non-initialized device"
This reverts commit bfd4a664ddfbe12f008efb0b0ab6bf25a8ab2538. Downstream NXP and stable have deviated to far, do not pull this in. Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com>
-rw-r--r--drivers/rpmsg/rpmsg_core.c33
-rw-r--r--drivers/rpmsg/rpmsg_internal.h14
-rw-r--r--drivers/rpmsg/rpmsg_ns.c4
-rw-r--r--include/linux/rpmsg.h8
4 files changed, 19 insertions, 40 deletions
diff --git a/drivers/rpmsg/rpmsg_core.c b/drivers/rpmsg/rpmsg_core.c
index 0ea8f8ec84ef..c544dee0b5dd 100644
--- a/drivers/rpmsg/rpmsg_core.c
+++ b/drivers/rpmsg/rpmsg_core.c
@@ -569,51 +569,24 @@ static struct bus_type rpmsg_bus = {
.remove = rpmsg_dev_remove,
};
-/*
- * A helper for registering rpmsg device with driver override and name.
- * Drivers should not be using it, but instead rpmsg_register_device().
- */
-int rpmsg_register_device_override(struct rpmsg_device *rpdev,
- const char *driver_override)
+int rpmsg_register_device(struct rpmsg_device *rpdev)
{
struct device *dev = &rpdev->dev;
int ret;
- if (driver_override)
- strcpy(rpdev->id.name, driver_override);
-
dev_set_name(&rpdev->dev, "%s.%s.%d.%d", dev_name(dev->parent),
rpdev->id.name, rpdev->src, rpdev->dst);
rpdev->dev.bus = &rpmsg_bus;
- device_initialize(dev);
- if (driver_override) {
- ret = driver_set_override(dev, &rpdev->driver_override,
- driver_override,
- strlen(driver_override));
- if (ret) {
- dev_err(dev, "device_set_override failed: %d\n", ret);
- return ret;
- }
- }
-
- ret = device_add(dev);
+ ret = device_register(&rpdev->dev);
if (ret) {
- dev_err(dev, "device_add failed: %d\n", ret);
- kfree(rpdev->driver_override);
- rpdev->driver_override = NULL;
+ dev_err(dev, "device_register failed: %d\n", ret);
put_device(&rpdev->dev);
}
return ret;
}
-EXPORT_SYMBOL(rpmsg_register_device_override);
-
-int rpmsg_register_device(struct rpmsg_device *rpdev)
-{
- return rpmsg_register_device_override(rpdev, NULL);
-}
EXPORT_SYMBOL(rpmsg_register_device);
/*
diff --git a/drivers/rpmsg/rpmsg_internal.h b/drivers/rpmsg/rpmsg_internal.h
index 7985af92aa48..5f4f3691bbf1 100644
--- a/drivers/rpmsg/rpmsg_internal.h
+++ b/drivers/rpmsg/rpmsg_internal.h
@@ -90,7 +90,19 @@ int rpmsg_release_channel(struct rpmsg_device *rpdev,
*/
static inline int rpmsg_chrdev_register_device(struct rpmsg_device *rpdev)
{
- return rpmsg_register_device_override(rpdev, "rpmsg_ctrl");
+ int ret;
+
+ strcpy(rpdev->id.name, "rpmsg_chrdev");
+ ret = driver_set_override(&rpdev->dev, &rpdev->driver_override,
+ rpdev->id.name, strlen(rpdev->id.name));
+ if (ret)
+ return ret;
+
+ ret = rpmsg_register_device(rpdev);
+ if (ret)
+ kfree(rpdev->driver_override);
+
+ return ret;
}
#endif
diff --git a/drivers/rpmsg/rpmsg_ns.c b/drivers/rpmsg/rpmsg_ns.c
index c70ad03ff2e9..762ff1ae279f 100644
--- a/drivers/rpmsg/rpmsg_ns.c
+++ b/drivers/rpmsg/rpmsg_ns.c
@@ -20,10 +20,12 @@
*/
int rpmsg_ns_register_device(struct rpmsg_device *rpdev)
{
+ strcpy(rpdev->id.name, "rpmsg_ns");
+ rpdev->driver_override = "rpmsg_ns";
rpdev->src = RPMSG_NS_ADDR;
rpdev->dst = RPMSG_NS_ADDR;
- return rpmsg_register_device_override(rpdev, "rpmsg_ns");
+ return rpmsg_register_device(rpdev);
}
EXPORT_SYMBOL(rpmsg_ns_register_device);
diff --git a/include/linux/rpmsg.h b/include/linux/rpmsg.h
index a63c5a4ff3e1..1b7294cefb80 100644
--- a/include/linux/rpmsg.h
+++ b/include/linux/rpmsg.h
@@ -165,8 +165,6 @@ static inline __rpmsg64 cpu_to_rpmsg64(struct rpmsg_device *rpdev, u64 val)
#if IS_ENABLED(CONFIG_RPMSG)
-int rpmsg_register_device_override(struct rpmsg_device *rpdev,
- const char *driver_override);
int rpmsg_register_device(struct rpmsg_device *rpdev);
int rpmsg_unregister_device(struct device *parent,
struct rpmsg_channel_info *chinfo);
@@ -192,12 +190,6 @@ __poll_t rpmsg_poll(struct rpmsg_endpoint *ept, struct file *filp,
#else
-static inline int rpmsg_register_device_override(struct rpmsg_device *rpdev,
- const char *driver_override)
-{
- return -ENXIO;
-}
-
static inline int rpmsg_register_device(struct rpmsg_device *rpdev)
{
return -ENXIO;