lkml.org 
[lkml]   [2018]   [Mar]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.15 111/128] drm/amdkfd: Fix memory leaks in kfd topology
    Date
    4.15-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    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,
    };


    \
     
     \ /
      Last update: 2018-03-16 16:53    [W:4.044 / U:0.468 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site