Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp4813192yba; Tue, 30 Apr 2019 04:57:08 -0700 (PDT) X-Google-Smtp-Source: APXvYqx6vmO7CDIJ8a+s4M55Hmz5Bew7EKQcWsFGKOquX7VuSVTwb4wkTT5VQjliqBNN1az4wCyQ X-Received: by 2002:aa7:8e0d:: with SMTP id c13mr71508944pfr.193.1556625428631; Tue, 30 Apr 2019 04:57:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1556625428; cv=none; d=google.com; s=arc-20160816; b=KHY2mbmordfJqTkQpJEQBImXoM64AVd4Idt8iD4KPk2N1UZ19pjYoNx3+Gv2/mYtdN 0DD6K3lekPp8AQZv34MUZgml7pQutaxGOk3nUynbseV7+9IAnIM816k4N7NUdd9evxXL Pr5905D/HExOZewJUwfu8MqX1Etn5faaDpktvFkB+9i++IpZ7DQJABhbnAESh/UGbfo0 tyXYOfdxVBbuEyRVIE5JKXZ0afEzuDzuPbYPRMnhsCs0HdbL7c4DoSteiJJOCFddyQex tQq183VbwVydGY+aTRYTNvBmQXBTUx8vGduLUMoP0/JKq9ahkS+VWyZnVRYEBKN8HW5P cccA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=P8b4Decr+2csijp2UJ/5T3JL/OjZvThyOVQFQyhUnCc=; b=IDgrYPAw1I9YFO0519puWKuBY0UTpSjZOQSw2JfiVYaBRSwF0UnBrf1sdspGc4QTUm AnKwNqX2VKyy02tNBEvbFTShauWA6BBoTKysav/Uz40SeeQw+JG7g44KpaypQfOh69gp KuR3PbO1atuc0vv/w2/f21UdHEgpfrfu4jx6R1lqtTfmdF4KnT72q9/r1RxJ7i6Z4sWs 4mDLy8oHjJ1Tc+9kdTKnRyzlmhLny6CoGy3lfmHjd0SusU/rQk5ZrZ7CAB0RTuU08VR6 eFPiprpEXFuLoRjyvB8j7tDFrdlxn4/tnOcW3ZoQ1x5ugkJ4AAyQrr/TbO4AC6Bb8+Qw umYg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=mrNhbeu1; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d6si11067044pgk.129.2019.04.30.04.56.53; Tue, 30 Apr 2019 04:57:08 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=mrNhbeu1; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727869AbfD3LzM (ORCPT + 99 others); Tue, 30 Apr 2019 07:55:12 -0400 Received: from mail.kernel.org ([198.145.29.99]:36260 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731027AbfD3Ltk (ORCPT ); Tue, 30 Apr 2019 07:49:40 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 3F46020449; Tue, 30 Apr 2019 11:49:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1556624978; bh=mtP6FXwC+gbYIeehYgsHw94R8YvjVniVqPG3sgvr41s=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mrNhbeu119OMEKharebKJe4l+0DlPoZGXIy1Y8dDV9uTs7sUPYYUWpdtbTpJPboeo VonxRbGA/FjluuwYuP/OZyjEEtc+QB+gnUtelkWqW229R/EoW+wLeTA4fduGKPhzkL 2JF43FGx8/f704X4q1BCkmE+8xOk2PGJUyZQfXyE= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, =?UTF-8?q?Christian=20K=C3=B6nig?= , Karol Herbst , Alex Deucher Subject: [PATCH 5.0 43/89] drm/ttm: fix re-init of global structures Date: Tue, 30 Apr 2019 13:38:34 +0200 Message-Id: <20190430113611.784740880@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190430113609.741196396@linuxfoundation.org> References: <20190430113609.741196396@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Christian König commit bd4264112f93045704731850c5e4d85db981cd85 upstream. When a driver unloads without unloading TTM we don't correctly clear the global structures leading to errors on re-init. Next step should probably be to remove the global structures and kobjs all together, but this is tricky since we need to maintain backward compatibility. Signed-off-by: Christian König Reviewed-by: Karol Herbst Tested-by: Karol Herbst CC: stable@vger.kernel.org # 5.0.x Signed-off-by: Alex Deucher Signed-off-by: Greg Kroah-Hartman --- drivers/gpu/drm/ttm/ttm_bo.c | 10 +++++----- drivers/gpu/drm/ttm/ttm_memory.c | 5 +++-- include/drm/ttm/ttm_bo_driver.h | 1 - 3 files changed, 8 insertions(+), 8 deletions(-) --- a/drivers/gpu/drm/ttm/ttm_bo.c +++ b/drivers/gpu/drm/ttm/ttm_bo.c @@ -49,9 +49,8 @@ static void ttm_bo_global_kobj_release(s * ttm_global_mutex - protecting the global BO state */ DEFINE_MUTEX(ttm_global_mutex); -struct ttm_bo_global ttm_bo_glob = { - .use_count = 0 -}; +unsigned ttm_bo_glob_use_count; +struct ttm_bo_global ttm_bo_glob; static struct attribute ttm_bo_count = { .name = "bo_count", @@ -1535,12 +1534,13 @@ static void ttm_bo_global_release(void) struct ttm_bo_global *glob = &ttm_bo_glob; mutex_lock(&ttm_global_mutex); - if (--glob->use_count > 0) + if (--ttm_bo_glob_use_count > 0) goto out; kobject_del(&glob->kobj); kobject_put(&glob->kobj); ttm_mem_global_release(&ttm_mem_glob); + memset(glob, 0, sizeof(*glob)); out: mutex_unlock(&ttm_global_mutex); } @@ -1552,7 +1552,7 @@ static int ttm_bo_global_init(void) unsigned i; mutex_lock(&ttm_global_mutex); - if (++glob->use_count > 1) + if (++ttm_bo_glob_use_count > 1) goto out; ret = ttm_mem_global_init(&ttm_mem_glob); --- a/drivers/gpu/drm/ttm/ttm_memory.c +++ b/drivers/gpu/drm/ttm/ttm_memory.c @@ -461,8 +461,8 @@ out_no_zone: void ttm_mem_global_release(struct ttm_mem_global *glob) { - unsigned int i; struct ttm_mem_zone *zone; + unsigned int i; /* let the page allocator first stop the shrink work. */ ttm_page_alloc_fini(); @@ -475,9 +475,10 @@ void ttm_mem_global_release(struct ttm_m zone = glob->zones[i]; kobject_del(&zone->kobj); kobject_put(&zone->kobj); - } + } kobject_del(&glob->kobj); kobject_put(&glob->kobj); + memset(glob, 0, sizeof(*glob)); } static void ttm_check_swapping(struct ttm_mem_global *glob) --- a/include/drm/ttm/ttm_bo_driver.h +++ b/include/drm/ttm/ttm_bo_driver.h @@ -411,7 +411,6 @@ extern struct ttm_bo_global { /** * Protected by ttm_global_mutex. */ - unsigned int use_count; struct list_head device_list; /**