]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blame - releases/4.14.28/drm-amdkfd-fix-memory-leaks-in-kfd-topology.patch
Linux 4.14.121
[thirdparty/kernel/stable-queue.git] / releases / 4.14.28 / drm-amdkfd-fix-memory-leaks-in-kfd-topology.patch
CommitLineData
fee2093b
GKH
1From foo@baz Fri Mar 16 15:43:17 CET 2018
2From: Yong Zhao <yong.zhao@amd.com>
3Date: Fri, 8 Dec 2017 23:08:48 -0500
4Subject: drm/amdkfd: Fix memory leaks in kfd topology
5
6From: Yong Zhao <yong.zhao@amd.com>
7
8
9[ Upstream commit 5108d768408abc80e4e8d99f5b406a73cb04056b ]
10
11Kobject created using kobject_create_and_add() can be freed using
12kobject_put() when there is no referenece any more. However,
13kobject memory allocated with kzalloc() has to set up a release
14callback in order to free it when the counter decreases to 0.
15Otherwise it causes memory leak.
16
17Signed-off-by: Yong Zhao <yong.zhao@amd.com>
18Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
19Reviewed-by: Oded Gabbay <oded.gabbay@gmail.com>
20Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
21Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
22Signed-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