From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ilija Hadzic Subject: [PATCH 14/19] drm: properly free id_list when a render node is removed Date: Thu, 12 Apr 2012 14:19:39 -0400 Message-ID: <1334254784-3200-15-git-send-email-ihadzic@research.bell-labs.com> References: <1334254784-3200-1-git-send-email-ihadzic@research.bell-labs.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from ihemail2.lucent.com (ihemail2.lucent.com [135.245.0.35]) by gabe.freedesktop.org (Postfix) with ESMTP id 738529EB2F for ; Thu, 12 Apr 2012 11:21:40 -0700 (PDT) Received: from usnavsmail1.ndc.alcatel-lucent.com (usnavsmail1.ndc.alcatel-lucent.com [135.3.39.9]) by ihemail2.lucent.com (8.13.8/IER-o) with ESMTP id q3CILd47007089 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Thu, 12 Apr 2012 13:21:40 -0500 (CDT) Received: from umail.lucent.com (umail-ce2.ndc.lucent.com [135.3.40.63]) by usnavsmail1.ndc.alcatel-lucent.com (8.14.3/8.14.3/GMO) with ESMTP id q3CILdvS004119 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT) for ; Thu, 12 Apr 2012 13:21:39 -0500 In-Reply-To: <1334254784-3200-1-git-send-email-ihadzic@research.bell-labs.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org Errors-To: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org To: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org id_list is dynamically allocated when a render node is created. Consequently, if must be freed when the render node is removed, otherwise we have a memory leak. Signed-off-by: Ilija Hadzic --- drivers/gpu/drm/drm_stub.c | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c index 93746b7..d427316 100644 --- a/drivers/gpu/drm/drm_stub.c +++ b/drivers/gpu/drm/drm_stub.c @@ -426,10 +426,13 @@ int drm_destroy_render_node(struct drm_device *dev, int index) list_for_each_entry_safe(node, tmp, &dev->render_node_list, list) { if (node->minor->index == index) { + struct drm_mode_group *group; if (node->minor->open_count) return -EBUSY; + group = &node->minor->mode_group; list_del(&node->list); drm_put_minor(&node->minor); + drm_mode_group_fini(group); kfree(node); return 0; } @@ -442,8 +445,11 @@ void drm_destroy_all_render_nodes(struct drm_device *dev) struct drm_render_node *node, *tmp; list_for_each_entry_safe(node, tmp, &dev->render_node_list, list) { + struct drm_mode_group *group; + group = &node->minor->mode_group; list_del(&node->list); drm_put_minor(&node->minor); + drm_mode_group_fini(group); kfree(node); } } -- 1.7.8.5