| From foo@baz Fri Mar 16 15:43:17 CET 2018 |
| From: Yong Zhao <yong.zhao@amd.com> |
| Date: Fri, 8 Dec 2017 23:08:48 -0500 |
| Subject: drm/amdkfd: Fix memory leaks in kfd topology |
| |
| From: Yong Zhao <yong.zhao@amd.com> |
| |
| |
| [ Upstream commit 5108d768408abc80e4e8d99f5b406a73cb04056b ] |
| |
| Kobject created using kobject_create_and_add() can be freed using |
| kobject_put() when there is no referenece any more. However, |
| kobject memory allocated with kzalloc() has to set up a release |
| callback in order to free it when the counter decreases to 0. |
| Otherwise it causes memory leak. |
| |
| Signed-off-by: Yong Zhao <yong.zhao@amd.com> |
| Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com> |
| Reviewed-by: Oded Gabbay <oded.gabbay@gmail.com> |
| Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/gpu/drm/amd/amdkfd/kfd_topology.c | 10 ++++++++++ |
| 1 file changed, 10 insertions(+) |
| |
| --- a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c |
| +++ b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c |
| @@ -501,11 +501,17 @@ static ssize_t sysprops_show(struct kobj |
| return ret; |
| } |
| |
| +static void kfd_topology_kobj_release(struct kobject *kobj) |
| +{ |
| + kfree(kobj); |
| +} |
| + |
| static const struct sysfs_ops sysprops_ops = { |
| .show = sysprops_show, |
| }; |
| |
| static struct kobj_type sysprops_type = { |
| + .release = kfd_topology_kobj_release, |
| .sysfs_ops = &sysprops_ops, |
| }; |
| |
| @@ -541,6 +547,7 @@ static const struct sysfs_ops iolink_ops |
| }; |
| |
| static struct kobj_type iolink_type = { |
| + .release = kfd_topology_kobj_release, |
| .sysfs_ops = &iolink_ops, |
| }; |
| |
| @@ -568,6 +575,7 @@ static const struct sysfs_ops mem_ops = |
| }; |
| |
| static struct kobj_type mem_type = { |
| + .release = kfd_topology_kobj_release, |
| .sysfs_ops = &mem_ops, |
| }; |
| |
| @@ -607,6 +615,7 @@ static const struct sysfs_ops cache_ops |
| }; |
| |
| static struct kobj_type cache_type = { |
| + .release = kfd_topology_kobj_release, |
| .sysfs_ops = &cache_ops, |
| }; |
| |
| @@ -729,6 +738,7 @@ static const struct sysfs_ops node_ops = |
| }; |
| |
| static struct kobj_type node_type = { |
| + .release = kfd_topology_kobj_release, |
| .sysfs_ops = &node_ops, |
| }; |
| |