1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
From 1c7672d60f8deea4f2310b44a9641f505882a0da Mon Sep 17 00:00:00 2001
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date: Tue, 16 May 2023 16:11:57 +0200
Subject: [PATCH] driver core: add printk debugging
Helps when trying to find leaks
---
drivers/base/bus.c | 2 ++
drivers/base/class.c | 3 +++
drivers/base/core.c | 3 +++
drivers/usb/core/endpoint.c | 1 +
4 files changed, 9 insertions(+)
--- a/drivers/base/bus.c
+++ b/drivers/base/bus.c
@@ -210,6 +210,7 @@ static void bus_release(struct kobject *
struct subsys_private *priv = to_subsys_private(kobj);
lockdep_unregister_key(&priv->lock_key);
+ pr_debug("bus: '%s': %s\n", kobject_name(kobj), __func__);
kfree(priv);
}
@@ -1205,6 +1206,7 @@ EXPORT_SYMBOL_GPL(subsys_interface_unreg
static void system_root_device_release(struct device *dev)
{
+ pr_debug("device: '%s': %s\n", dev_name(dev), __func__);
kfree(dev);
}
--- a/drivers/base/class.c
+++ b/drivers/base/class.c
@@ -8,6 +8,8 @@
* Copyright (c) 2003-2004 IBM Corp.
*/
+#define DEBUG
+
#include <linux/device/class.h>
#include <linux/device.h>
#include <linux/module.h>
@@ -591,6 +593,7 @@ EXPORT_SYMBOL_GPL(class_compat_register)
*/
void class_compat_unregister(struct class_compat *cls)
{
+ pr_debug("class_compat: '%s': %s\n", kobject_name(cls->kobj), __func__);
kobject_put(cls->kobj);
kfree(cls);
}
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -3919,6 +3919,7 @@ EXPORT_SYMBOL_GPL(device_del);
void device_unregister(struct device *dev)
{
pr_debug("device: '%s': %s\n", dev_name(dev), __func__);
+ printk(KERN_ERR "GKH: device: '%s': %s\n", dev_name(dev), __func__);
device_del(dev);
put_device(dev);
}
@@ -4338,6 +4339,7 @@ EXPORT_SYMBOL_GPL(root_device_unregister
static void device_create_release(struct device *dev)
{
pr_debug("device: '%s': %s\n", dev_name(dev), __func__);
+ printk(KERN_ERR "GKH: device: '%s': %s\n", dev_name(dev), __func__);
kfree(dev);
}
@@ -4472,6 +4474,7 @@ void device_destroy(const struct class *
dev = class_find_device_by_devt(class, devt);
if (dev) {
+ printk(KERN_ERR "GKH: device: '%s': %s\n", dev_name(dev), __func__);
put_device(dev);
device_unregister(dev);
}
--- a/drivers/usb/core/endpoint.c
+++ b/drivers/usb/core/endpoint.c
@@ -139,6 +139,7 @@ static void ep_device_release(struct dev
{
struct ep_device *ep_dev = to_ep_device(dev);
+ printk(KERN_ERR "GKH: device: '%s': %s\n", dev_name(dev), __func__);
kfree(ep_dev);
}
|