]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
driver core: bus: move lock_class_key into dynamic structure
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 1 Feb 2023 08:33:49 +0000 (09:33 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 1 Feb 2023 19:03:18 +0000 (20:03 +0100)
Move the lock_class_key structure out of struct bus_type and into the
dynamic structure we create already for all bus_types registered with
the kernel.  This saves on static space and removes one more writable
field in struct bus_type.

In the future, the same field can be moved out of the struct class logic
because it shares this same private structure.

Most everyone will never notice this change, as lockdep is not enabled
in real systems so no memory or logic changes are happening for them.

Cc: "Rafael J. Wysocki" <rafael@kernel.org>
Acked-by: Rafael J. Wysocki <rafael@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Link: https://lore.kernel.org/r/20230201083349.4038660-1-gregkh@linuxfoundation.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/base/base.h
drivers/base/bus.c
include/linux/device/bus.h

index 2208af509ce8740160a5cf7d27bd2d9b47349667..0e806f6410790075d533e8d5379e4951a31db7d2 100644 (file)
@@ -52,6 +52,8 @@ struct subsys_private {
 
        struct kset glue_dirs;
        struct class *class;
+
+       struct lock_class_key lock_key;
 };
 #define to_subsys_private(obj) container_of_const(obj, struct subsys_private, subsys.kobj)
 
index cf1b8f00b4c0c7691d3855897eeb89788e25cb9a..aa70b3a7d77873d53faa22799bbd3ca4b5559c12 100644 (file)
@@ -154,6 +154,7 @@ static void bus_release(struct kobject *kobj)
        struct subsys_private *priv = to_subsys_private(kobj);
        struct bus_type *bus = priv->bus;
 
+       lockdep_unregister_key(&priv->lock_key);
        kfree(priv);
        bus->p = NULL;
 }
@@ -743,7 +744,7 @@ int bus_register(struct bus_type *bus)
 {
        int retval;
        struct subsys_private *priv;
-       struct lock_class_key *key = &bus->lock_key;
+       struct lock_class_key *key;
 
        priv = kzalloc(sizeof(struct subsys_private), GFP_KERNEL);
        if (!priv)
@@ -785,6 +786,8 @@ int bus_register(struct bus_type *bus)
        }
 
        INIT_LIST_HEAD(&priv->interfaces);
+       key = &priv->lock_key;
+       lockdep_register_key(key);
        __mutex_init(&priv->mutex, "subsys mutex", key);
        klist_init(&priv->klist_devices, klist_devices_get, klist_devices_put);
        klist_init(&priv->klist_drivers, NULL, NULL);
index 87e4d029c915943f3ee8b653619626f6b9b01748..e3094db1e9fa8dd10e8e994f5927bc5ed197ad94 100644 (file)
@@ -112,7 +112,6 @@ struct bus_type {
        const struct iommu_ops *iommu_ops;
 
        struct subsys_private *p;
-       struct lock_class_key lock_key;
 
        bool need_parent_lock;
 };