]>
Commit | Line | Data |
---|---|---|
fee2093b GKH |
1 | From foo@baz Fri Mar 16 15:43:17 CET 2018 |
2 | From: Yong Zhao <yong.zhao@amd.com> | |
3 | Date: Fri, 8 Dec 2017 23:08:48 -0500 | |
4 | Subject: drm/amdkfd: Fix memory leaks in kfd topology | |
5 | ||
6 | From: Yong Zhao <yong.zhao@amd.com> | |
7 | ||
8 | ||
9 | [ Upstream commit 5108d768408abc80e4e8d99f5b406a73cb04056b ] | |
10 | ||
11 | Kobject created using kobject_create_and_add() can be freed using | |
12 | kobject_put() when there is no referenece any more. However, | |
13 | kobject memory allocated with kzalloc() has to set up a release | |
14 | callback in order to free it when the counter decreases to 0. | |
15 | Otherwise it causes memory leak. | |
16 | ||
17 | Signed-off-by: Yong Zhao <yong.zhao@amd.com> | |
18 | Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com> | |
19 | Reviewed-by: Oded Gabbay <oded.gabbay@gmail.com> | |
20 | Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com> | |
21 | Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> | |
22 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | |
23 | --- | |
24 | drivers/gpu/drm/amd/amdkfd/kfd_topology.c | 10 ++++++++++ | |
25 | 1 file changed, 10 insertions(+) | |
26 | ||
27 | --- a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c | |
28 | +++ b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c | |
29 | @@ -501,11 +501,17 @@ static ssize_t sysprops_show(struct kobj | |
30 | return ret; | |
31 | } | |
32 | ||
33 | +static void kfd_topology_kobj_release(struct kobject *kobj) | |
34 | +{ | |
35 | + kfree(kobj); | |
36 | +} | |
37 | + | |
38 | static const struct sysfs_ops sysprops_ops = { | |
39 | .show = sysprops_show, | |
40 | }; | |
41 | ||
42 | static struct kobj_type sysprops_type = { | |
43 | + .release = kfd_topology_kobj_release, | |
44 | .sysfs_ops = &sysprops_ops, | |
45 | }; | |
46 | ||
47 | @@ -541,6 +547,7 @@ static const struct sysfs_ops iolink_ops | |
48 | }; | |
49 | ||
50 | static struct kobj_type iolink_type = { | |
51 | + .release = kfd_topology_kobj_release, | |
52 | .sysfs_ops = &iolink_ops, | |
53 | }; | |
54 | ||
55 | @@ -568,6 +575,7 @@ static const struct sysfs_ops mem_ops = | |
56 | }; | |
57 | ||
58 | static struct kobj_type mem_type = { | |
59 | + .release = kfd_topology_kobj_release, | |
60 | .sysfs_ops = &mem_ops, | |
61 | }; | |
62 | ||
63 | @@ -607,6 +615,7 @@ static const struct sysfs_ops cache_ops | |
64 | }; | |
65 | ||
66 | static struct kobj_type cache_type = { | |
67 | + .release = kfd_topology_kobj_release, | |
68 | .sysfs_ops = &cache_ops, | |
69 | }; | |
70 | ||
71 | @@ -729,6 +738,7 @@ static const struct sysfs_ops node_ops = | |
72 | }; | |
73 | ||
74 | static struct kobj_type node_type = { | |
75 | + .release = kfd_topology_kobj_release, | |
76 | .sysfs_ops = &node_ops, | |
77 | }; | |
78 |