Skip to content

Commit

Permalink
driver core: bus: move lock_class_key into dynamic structure
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Greg Kroah-Hartman committed Feb 1, 2023
1 parent 40b3880 commit 37e98d9
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 2 deletions.
2 changes: 2 additions & 0 deletions drivers/base/base.h
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
5 changes: 4 additions & 1 deletion drivers/base/bus.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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);
Expand Down
1 change: 0 additions & 1 deletion include/linux/device/bus.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
};
Expand Down

0 comments on commit 37e98d9

Please sign in to comment.