[PATCH v6 35/35] component: Remove component_master_ops and friends

From: Stephen Boyd
Date: Thu Jan 27 2022 - 15:03:12 EST


The struct is unused now so drop it along with the functions that use
it.

Cc: Daniel Vetter <daniel.vetter@xxxxxxxx>
Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
Cc: "Rafael J. Wysocki" <rafael@xxxxxxxxxx>
Cc: Rob Clark <robdclark@xxxxxxxxx>
Cc: Russell King <rmk+kernel@xxxxxxxxxxxxxxxx>
Cc: Saravana Kannan <saravanak@xxxxxxxxxx>
Signed-off-by: Stephen Boyd <swboyd@xxxxxxxxxxxx>
---
drivers/base/component.c | 149 ++++----------------------------------
drivers/gpu/drm/drm_drv.c | 2 +-
include/linux/component.h | 44 -----------
3 files changed, 17 insertions(+), 178 deletions(-)

diff --git a/drivers/base/component.c b/drivers/base/component.c
index 5b91a114786d..c9d17ea64226 100644
--- a/drivers/base/component.c
+++ b/drivers/base/component.c
@@ -57,7 +57,6 @@ struct component_match {
};

struct aggregate_device {
- const struct component_master_ops *ops;
struct device *parent;
struct device dev;
struct component_match *match;
@@ -154,18 +153,12 @@ static void component_debugfs_del(struct aggregate_device *m)

#endif

-struct aggregate_bus_find_data {
- const struct component_master_ops *ops;
- struct device *parent;
-};
-
static int aggregate_bus_find_match(struct device *dev, const void *_data)
{
struct aggregate_device *adev = to_aggregate_device(dev);
- const struct aggregate_bus_find_data *data = _data;
+ const struct device *parent = _data;

- if (adev->parent == data->parent &&
- (!data->ops || adev->ops == data->ops))
+ if (adev->parent == parent)
return 1;

return 0;
@@ -426,30 +419,15 @@ static int aggregate_device_match(struct device *dev, struct device_driver *drv)
return ret;
}

-/* TODO: Remove once all aggregate drivers use component_aggregate_register() */
-static int component_probe_bind(struct aggregate_device *adev)
-{
- return adev->ops->bind(adev->parent);
-}
-
-static void component_remove_unbind(struct aggregate_device *adev)
-{
- adev->ops->unbind(adev->parent);
-}
-
static int aggregate_driver_probe(struct device *dev)
{
const struct aggregate_driver *adrv = to_aggregate_driver(dev->driver);
struct aggregate_device *adev = to_aggregate_device(dev);
- bool modern = adrv->probe != component_probe_bind;
int ret;

- /* Only do runtime PM when drivers migrate */
- if (modern) {
- pm_runtime_get_noresume(dev);
- pm_runtime_set_active(dev);
- pm_runtime_enable(dev);
- }
+ pm_runtime_get_noresume(dev);
+ pm_runtime_set_active(dev);
+ pm_runtime_enable(dev);

mutex_lock(&component_mutex);
if (devres_open_group(adev->parent, adev, GFP_KERNEL)) {
@@ -462,7 +440,7 @@ static int aggregate_driver_probe(struct device *dev)
devres_close_group(adev->parent, NULL);
mutex_unlock(&component_mutex);

- if (ret && modern) {
+ if (ret) {
pm_runtime_disable(dev);
pm_runtime_set_suspended(dev);
pm_runtime_put_noidle(dev);
@@ -475,15 +453,10 @@ static void aggregate_driver_remove(struct device *dev)
{
const struct aggregate_driver *adrv = to_aggregate_driver(dev->driver);
struct aggregate_device *adev = to_aggregate_device(dev);
- bool modern = adrv->remove != component_remove_unbind;

- /* Only do runtime PM when drivers migrate */
- if (modern)
- pm_runtime_get_sync(dev);
+ pm_runtime_get_sync(dev);
adrv->remove(to_aggregate_device(dev));
devres_release_group(adev->parent, adev);
- if (!modern)
- return;

pm_runtime_put_noidle(dev);

@@ -509,16 +482,11 @@ static struct bus_type aggregate_bus_type = {
};

/* Callers take ownership of return value, should call put_device() */
-static struct aggregate_device *__aggregate_find(struct device *parent,
- const struct component_master_ops *ops)
+static struct aggregate_device *__aggregate_find(struct device *parent)
{
struct device *dev;
- struct aggregate_bus_find_data data = {
- .ops = ops,
- .parent = parent,
- };

- dev = bus_find_device(&aggregate_bus_type, NULL, &data,
+ dev = bus_find_device(&aggregate_bus_type, NULL, parent,
aggregate_bus_find_match);

return dev ? to_aggregate_device(dev) : NULL;
@@ -551,7 +519,7 @@ static void aggregate_driver_unregister(struct aggregate_driver *adrv)
}

static struct aggregate_device *aggregate_device_add(struct device *parent,
- const struct component_master_ops *ops, struct aggregate_driver *adrv,
+ struct aggregate_driver *adrv,
struct component_match *match)
{
struct aggregate_device *adev;
@@ -576,7 +544,6 @@ static struct aggregate_device *aggregate_device_add(struct device *parent,
adev->parent = parent;
adev->dev.bus = &aggregate_bus_type;
adev->dev.release = aggregate_device_release;
- adev->ops = ops;
adev->match = match;
adev->adrv = adrv;
dev_set_name(&adev->dev, "aggregate%d", id);
@@ -592,54 +559,6 @@ static struct aggregate_device *aggregate_device_add(struct device *parent,
return adev;
}

-/**
- * component_master_add_with_match - register an aggregate driver
- * @parent: parent device of the aggregate driver
- * @ops: callbacks for the aggregate driver
- * @match: component match list for the aggregate driver
- *
- * Registers a new aggregate driver consisting of the components added to @match
- * by calling one of the component_match_add() functions. Once all components in
- * @match are available, it will be assembled by calling
- * &component_master_ops.bind from @ops. Must be unregistered by calling
- * component_master_del().
- *
- * Deprecated: Use component_aggregate_register() instead.
- */
-int component_master_add_with_match(struct device *parent,
- const struct component_master_ops *ops,
- struct component_match *match)
-{
- struct aggregate_driver *adrv;
- struct aggregate_device *adev;
- int ret = 0;
-
- adrv = kzalloc(sizeof(*adrv), GFP_KERNEL);
- if (!adrv)
- return -ENOMEM;
-
- adev = aggregate_device_add(parent, ops, adrv, match);
- if (IS_ERR(adev)) {
- ret = PTR_ERR(adev);
- goto err;
- }
-
- adrv->probe = component_probe_bind;
- adrv->remove = component_remove_unbind;
- adrv->driver.owner = THIS_MODULE;
- adrv->driver.name = dev_name(&adev->dev);
-
- ret = aggregate_driver_register(adrv);
- if (!ret)
- return 0;
-
- put_device(&adev->dev);
-err:
- kfree(adrv);
- return ret;
-}
-EXPORT_SYMBOL_GPL(component_master_add_with_match);
-
/**
* component_aggregate_register - register an aggregate driver
* @parent: parent device of the aggregate driver
@@ -656,7 +575,7 @@ int component_aggregate_register(struct device *parent,
struct aggregate_device *adev;
int ret;

- adev = aggregate_device_add(parent, NULL, adrv, match);
+ adev = aggregate_device_add(parent, adrv, match);
if (IS_ERR(adev))
return PTR_ERR(adev);

@@ -668,42 +587,6 @@ int component_aggregate_register(struct device *parent,
}
EXPORT_SYMBOL_GPL(component_aggregate_register);

-/**
- * component_master_del - unregister an aggregate driver
- * @parent: parent device of the aggregate driver
- * @ops: callbacks for the aggregate driver
- *
- * Unregisters an aggregate driver registered with
- * component_master_add_with_match(). If necessary the aggregate driver is first
- * disassembled by calling &component_master_ops.unbind from @ops.
- *
- * Deprecated: Use component_aggregate_unregister() instead.
- */
-void component_master_del(struct device *parent,
- const struct component_master_ops *ops)
-{
- struct aggregate_device *adev;
- struct aggregate_driver *adrv;
- struct device_driver *drv;
-
- mutex_lock(&component_mutex);
- adev = __aggregate_find(parent, ops);
- mutex_unlock(&component_mutex);
-
- if (adev) {
- drv = adev->dev.driver;
- if (drv) {
- adrv = to_aggregate_driver(drv);
- aggregate_driver_unregister(adrv);
- kfree(adrv);
- }
-
- device_unregister(&adev->dev);
- }
- put_device(&adev->dev);
-}
-EXPORT_SYMBOL_GPL(component_master_del);
-
/**
* component_aggregate_unregister - unregister an aggregate driver
* @parent: parent device of the aggregate driver
@@ -719,7 +602,7 @@ void component_aggregate_unregister(struct device *parent,
struct aggregate_device *adev;

mutex_lock(&component_mutex);
- adev = __aggregate_find(parent, NULL);
+ adev = __aggregate_find(parent);
mutex_unlock(&component_mutex);

if (adev)
@@ -755,7 +638,7 @@ static void component_unbind(struct component *component,
*
* Unbinds all components of the aggregate device by passing @data to their
* &component_ops.unbind functions. Should be called from
- * &component_master_ops.unbind.
+ * &aggregate_driver.remove.
*/
void component_unbind_all(struct device *parent, void *data)
{
@@ -765,7 +648,7 @@ void component_unbind_all(struct device *parent, void *data)

WARN_ON(!mutex_is_locked(&component_mutex));

- adev = __aggregate_find(parent, NULL);
+ adev = __aggregate_find(parent);
if (!adev)
return;

@@ -843,7 +726,7 @@ static int component_bind(struct component *component, struct aggregate_device *
*
* Binds all components of the aggregate @dev by passing @data to their
* &component_ops.bind functions. Should be called from
- * &component_master_ops.bind.
+ * &aggregate_driver.probe.
*/
int component_bind_all(struct device *parent, void *data)
{
@@ -854,7 +737,7 @@ int component_bind_all(struct device *parent, void *data)

WARN_ON(!mutex_is_locked(&component_mutex));

- adev = __aggregate_find(parent, NULL);
+ adev = __aggregate_find(parent);
if (!adev)
return -EINVAL;

diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
index 8214a0b1ab7f..902287bbcaba 100644
--- a/drivers/gpu/drm/drm_drv.c
+++ b/drivers/gpu/drm/drm_drv.c
@@ -545,7 +545,7 @@ static void drm_fs_inode_free(struct inode *inode)
* following guidelines apply:
*
* - The entire device initialization procedure should be run from the
- * &component_master_ops.master_bind callback, starting with
+ * &aggregate_driver.probe callback, starting with
* devm_drm_dev_alloc(), then binding all components with
* component_bind_all() and finishing with drm_dev_register().
*
diff --git a/include/linux/component.h b/include/linux/component.h
index 073cbe9fea32..36ce0997f213 100644
--- a/include/linux/component.h
+++ b/include/linux/component.h
@@ -66,45 +66,6 @@ void component_unbind_all(struct device *parent, void *data);

struct device *aggregate_device_parent(const struct aggregate_device *adev);

-/**
- * struct component_master_ops - callback for the aggregate driver
- *
- * Aggregate drivers are registered with component_master_add_with_match() and
- * unregistered with component_master_del().
- */
-struct component_master_ops {
- /**
- * @bind:
- *
- * Called when all components or the aggregate driver, as specified in
- * the match list passed to component_master_add_with_match(), are
- * ready. Usually there are 3 steps to bind an aggregate driver:
- *
- * 1. Allocate a structure for the aggregate driver.
- *
- * 2. Bind all components to the aggregate driver by calling
- * component_bind_all() with the aggregate driver structure as opaque
- * pointer data.
- *
- * 3. Register the aggregate driver with the subsystem to publish its
- * interfaces.
- *
- * Note that the lifetime of the aggregate driver does not align with
- * any of the underlying &struct device instances. Therefore devm cannot
- * be used and all resources acquired or allocated in this callback must
- * be explicitly released in the @unbind callback.
- */
- int (*bind)(struct device *master);
- /**
- * @unbind:
- *
- * Called when either the aggregate driver, using
- * component_master_del(), or one of its components, using
- * component_del(), is unregistered.
- */
- void (*unbind)(struct device *master);
-};
-
/**
* struct aggregate_driver - Aggregate driver (made up of other drivers)
* @count: driver registration refcount
@@ -155,9 +116,6 @@ static inline struct aggregate_driver *to_aggregate_driver(struct device_driver
return container_of(d, struct aggregate_driver, driver);
}

-void component_master_del(struct device *,
- const struct component_master_ops *);
-
struct component_match;

int component_aggregate_register(struct device *parent,
@@ -165,8 +123,6 @@ int component_aggregate_register(struct device *parent,
void component_aggregate_unregister(struct device *parent,
struct aggregate_driver *adrv);

-int component_master_add_with_match(struct device *,
- const struct component_master_ops *, struct component_match *);
void component_match_add_release(struct device *parent,
struct component_match **matchptr,
void (*release)(struct device *, void *),
--
https://chromeos.dev