diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1468-drm-amdkfd-Fix-memory-leaks-in-kfd-topology.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1468-drm-amdkfd-Fix-memory-leaks-in-kfd-topology.patch | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1468-drm-amdkfd-Fix-memory-leaks-in-kfd-topology.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1468-drm-amdkfd-Fix-memory-leaks-in-kfd-topology.patch new file mode 100644 index 00000000..695f388b --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1468-drm-amdkfd-Fix-memory-leaks-in-kfd-topology.patch @@ -0,0 +1,74 @@ +From 4c5e52b7449df7f99d90874bb88a6a70911572d1 Mon Sep 17 00:00:00 2001 +From: Yong Zhao <yong.zhao@amd.com> +Date: Wed, 29 Jun 2016 14:02:09 -0400 +Subject: [PATCH 1468/4131] drm/amdkfd: Fix memory leaks in kfd topology + +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. + +Change-Id: I824d93283100141b44e41d5d12b513d32d0396a4 +Signed-off-by: Yong Zhao <yong.zhao@amd.com> +--- + drivers/gpu/drm/amd/amdkfd/kfd_topology.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c +index 5ba4179..67b9e16 100644 +--- a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c ++++ b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c +@@ -222,11 +222,17 @@ static ssize_t sysprops_show(struct kobject *kobj, struct attribute *attr, + 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, + }; + +@@ -262,6 +268,7 @@ static const struct sysfs_ops iolink_ops = { + }; + + static struct kobj_type iolink_type = { ++ .release = kfd_topology_kobj_release, + .sysfs_ops = &iolink_ops, + }; + +@@ -289,6 +296,7 @@ static const struct sysfs_ops mem_ops = { + }; + + static struct kobj_type mem_type = { ++ .release = kfd_topology_kobj_release, + .sysfs_ops = &mem_ops, + }; + +@@ -334,6 +342,7 @@ static const struct sysfs_ops cache_ops = { + }; + + static struct kobj_type cache_type = { ++ .release = kfd_topology_kobj_release, + .sysfs_ops = &cache_ops, + }; + +@@ -460,6 +469,7 @@ static const struct sysfs_ops node_ops = { + }; + + static struct kobj_type node_type = { ++ .release = kfd_topology_kobj_release, + .sysfs_ops = &node_ops, + }; + +-- +2.7.4 + |