Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp3889622pxv; Mon, 19 Jul 2021 11:12:29 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzqY0yPGGcu2sQ8YB+aGFv8Ii+NXlaoMV2Up511Xjquax5/Zrgf1GSU4D1RxD4biqr+3onk X-Received: by 2002:a17:906:8313:: with SMTP id j19mr29147653ejx.548.1626718349120; Mon, 19 Jul 2021 11:12:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626718349; cv=none; d=google.com; s=arc-20160816; b=xDRzB95RaVgX/uOPs6BcULM3SJhsNK+vE/P2I86PJwvX9W6fknLp0VbuBaM7ZWXRCW cfByri2JMYfXVYixFjbmVCYEOiqtQfD3YuRPsKCD8+eaLtzfv093/TrXXIDrPUMTKIn7 ojVmdKIKra2YVnK1+pKe5wFQCOQ8l9WgUlstYjJd/Rd3p/bAIaEQmHMph5iKauK98Ii3 oyTkER9U34VJc2M1EGJooH4EZrrP7nI6db8fNSSpR7csKgVwhWwBvGiZ2WP/7kwdQedq B3pQ07VeqQE13FH/G3kAIoFshSTRTld/npfTXFGRU4V2abxu+R6qDuC0bJ3Y9Oz6wbG3 JZtg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=xYwHffVKzkouKdrAQsMnhFbxefBFkKA7s9p8tFun7E4=; b=KQkApBzbkOuwM1oLbjeXr0KVZJUiYIn1e4Ru3CmzCXOaQ3ALgkqsDUqVtbMqjjFqiU 6Jla+SRgGLopWC1sz9ZgvRNpPME1wrhl+7W+Ffea5b1n2mTG++AUNIgIgKsxCpXp7HFK 1l0sV5Ql3LDpyhR5IaAndc2UC68TpJW+rWX7ekkuPh9qN4LunY2MuqvyiKoDW1hc+9cI mug+bqsf498NfiPp4dc3ap9GMmKv6MWxXiYMYD7Lk/IJ1a0i9OVTrGkyPDHlrYA9ovVZ qh+OcCPlGjud3zFOBkL87lBJP8yp43ONyt9zYGO85UbNI7ZnyPqgM/v0hOQJ8rm1LqTY LA/w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=lMJ45ySF; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id nd38si22674095ejc.558.2021.07.19.11.12.04; Mon, 19 Jul 2021 11:12:29 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=lMJ45ySF; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1356646AbhGSRYu (ORCPT + 99 others); Mon, 19 Jul 2021 13:24:50 -0400 Received: from mail.kernel.org ([198.145.29.99]:42206 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1349307AbhGSPo6 (ORCPT ); Mon, 19 Jul 2021 11:44:58 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id B0ABA60C40; Mon, 19 Jul 2021 16:24:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1626711866; bh=CcTgJfVEmbNFgL0EvxomN/vMbIEdDbKcKAhs6s8IAmo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=lMJ45ySFLCBT0tggiBvjh6SFEUsZx3vS9Yx6GwqgfbUGxF8mhKh2hy13yv/Q8PsFw YvDDYEMgX3ECQhtEMqLJ6Z5pjlPvHZRozmzE37X5oW5JeE/sPCdiHVxI4JbvpPh5u4 FXQUJHcophuV22SBrAyQeGBvT6nk4jrvOrE0WCZA= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Philip Yang , Felix Kuehling , Alex Deucher , Sasha Levin Subject: [PATCH 5.12 162/292] drm/amdkfd: fix sysfs kobj leak Date: Mon, 19 Jul 2021 16:53:44 +0200 Message-Id: <20210719144947.822785238@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210719144942.514164272@linuxfoundation.org> References: <20210719144942.514164272@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Philip Yang [ Upstream commit dcdb4d904b4bd3078fe8d4d24b1658560d6078ef ] 3 cases of kobj leak, which causes memory leak: kobj_type must have release() method to free memory from release callback. Don't need NULL default_attrs to init kobj. sysfs files created under kobj_status should be removed with kobj_status as parent kobject. Remove queue sysfs files when releasing queue from process MMU notifier release callback. Signed-off-by: Philip Yang Reviewed-by: Felix Kuehling Signed-off-by: Alex Deucher Signed-off-by: Sasha Levin --- drivers/gpu/drm/amd/amdkfd/kfd_process.c | 14 ++++++-------- .../gpu/drm/amd/amdkfd/kfd_process_queue_manager.c | 1 + 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c b/drivers/gpu/drm/amd/amdkfd/kfd_process.c index 65803e153a22..d243e60c6eef 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c @@ -452,13 +452,9 @@ static const struct sysfs_ops procfs_stats_ops = { .show = kfd_procfs_stats_show, }; -static struct attribute *procfs_stats_attrs[] = { - NULL -}; - static struct kobj_type procfs_stats_type = { .sysfs_ops = &procfs_stats_ops, - .default_attrs = procfs_stats_attrs, + .release = kfd_procfs_kobj_release, }; int kfd_procfs_add_queue(struct queue *q) @@ -973,9 +969,11 @@ static void kfd_process_wq_release(struct work_struct *work) list_for_each_entry(pdd, &p->per_device_data, per_device_list) { sysfs_remove_file(p->kobj, &pdd->attr_vram); sysfs_remove_file(p->kobj, &pdd->attr_sdma); - sysfs_remove_file(p->kobj, &pdd->attr_evict); - if (pdd->dev->kfd2kgd->get_cu_occupancy != NULL) - sysfs_remove_file(p->kobj, &pdd->attr_cu_occupancy); + + sysfs_remove_file(pdd->kobj_stats, &pdd->attr_evict); + if (pdd->dev->kfd2kgd->get_cu_occupancy) + sysfs_remove_file(pdd->kobj_stats, + &pdd->attr_cu_occupancy); kobject_del(pdd->kobj_stats); kobject_put(pdd->kobj_stats); pdd->kobj_stats = NULL; diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c index eb1635ac8988..43c07ac2c6fc 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c @@ -153,6 +153,7 @@ void pqm_uninit(struct process_queue_manager *pqm) if (pqn->q && pqn->q->gws) amdgpu_amdkfd_remove_gws_from_process(pqm->process->kgd_process_info, pqn->q->gws); + kfd_procfs_del_queue(pqn->q); uninit_queue(pqn->q); list_del(&pqn->process_queue_list); kfree(pqn); -- 2.30.2