From 3ac08f5e1534e26cbe255088c0243b0b57e1be0d Mon Sep 17 00:00:00 2001 From: Max Krummenacher Date: Thu, 22 Feb 2024 13:56:56 +0100 Subject: 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 --- drivers/rpmsg/rpmsg_core.c | 33 +++------------------------------ drivers/rpmsg/rpmsg_internal.h | 14 +++++++++++++- drivers/rpmsg/rpmsg_ns.c | 4 +++- include/linux/rpmsg.h | 8 -------- 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; -- cgit v1.2.3