From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Paul Subject: [PATCH 1/4] drm/ttm: fix ttm_bo_cleanup_refs_or_queue once more Date: Thu, 30 Nov 2017 19:23:03 -0500 Message-ID: <20171201002311.28098-2-lyude@redhat.com> References: <20171201002311.28098-1-lyude@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by gabe.freedesktop.org (Postfix) with ESMTPS id 54CC66EB59 for ; Fri, 1 Dec 2017 00:24:16 +0000 (UTC) In-Reply-To: <20171201002311.28098-1-lyude@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: stable@vger.kernel.org Cc: =?UTF-8?q?Nicolai=20H=C3=A4hnle?= , David Airlie , =?UTF-8?q?Michel=20D=C3=A4nzer?= , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Peter Zijlstra , Alex Deucher , =?UTF-8?q?Christian=20K=C3=B6nig?= List-Id: dri-devel@lists.freedesktop.org RnJvbTogQ2hyaXN0aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPgoKV2l0aCBz aGFyZWQgcmVzZXJ2YXRpb24gb2JqZWN0cyBfX3R0bV9ib19yZXNlcnZlKCkgY2FuIGVhc2lseSBm YWlsIGV2ZW4gb24KZGVzdHJveWVkIEJPcy4gVGhpcyBwcmV2ZW50cyBjb3JyZWN0IGhhbmRsaW5n IHdoZW4gd2UgbmVlZCB0byBpbmRpdmlkdWFsaXplCnRoZSByZXNlcnZhdGlvbiBvYmplY3QuCgpG aXggdGhpcyBieSBpbmRpdmlkdWFsaXppbmcgdGhlIG9iamVjdCBiZWZvcmUgZXZlbiB0cnlpbmcg dG8gcmVzZXJ2ZSBpdC4KCmNvbW1pdCAzNzhlMmQ1YjUwNGZlMDIzMWM1NTc3NTFlNThiODBmY2Y3 MTdjYzIwIHVwc3RyZWFtCgpTaWduZWQtb2ZmLWJ5OiBDaHJpc3RpYW4gS8O2bmlnIDxjaHJpc3Rp YW4ua29lbmlnQGFtZC5jb20+CkFja2VkLWJ5OiBDaHVubWluZyBaaG91IDxkYXZpZDEuemhvdUBh bWQuY29tPgpTaWduZWQtb2ZmLWJ5OiBBbGV4IERldWNoZXIgPGFsZXhhbmRlci5kZXVjaGVyQGFt ZC5jb20+ClNpZ25lZC1vZmYtYnk6IEx5dWRlIFBhdWwgPGx5dWRlQHJlZGhhdC5jb20+Ci0tLQog ZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm8uYyB8IDMyICsrKysrKysrKysrKysrKysrLS0tLS0t LS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTcgaW5zZXJ0aW9ucygrKSwgMTUgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm8uYyBiL2RyaXZlcnMv Z3B1L2RybS90dG0vdHRtX2JvLmMKaW5kZXggMTgwY2U2Mjk2NDE2Li5iZWU3N2QzMTg5NWIgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL3R0bS90dG1fYm8uYwpAQCAtNDQwLDI4ICs0NDAsMjkgQEAgc3RhdGljIHZvaWQgdHRtX2Jv X2NsZWFudXBfcmVmc19vcl9xdWV1ZShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvKQogCXN0 cnVjdCB0dG1fYm9fZ2xvYmFsICpnbG9iID0gYm8tPmdsb2I7CiAJaW50IHJldDsKIAorCXJldCA9 IHR0bV9ib19pbmRpdmlkdWFsaXplX3Jlc3YoYm8pOworCWlmIChyZXQpIHsKKwkJLyogTGFzdCBy ZXNvcnQsIGlmIHdlIGZhaWwgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUKKwkJICogZmVuY2Vz IGJsb2NrIGZvciB0aGUgQk8gdG8gYmVjb21lIGlkbGUKKwkJICovCisJCXJlc2VydmF0aW9uX29i amVjdF93YWl0X3RpbWVvdXRfcmN1KGJvLT5yZXN2LCB0cnVlLCBmYWxzZSwKKwkJCQkJCSAgICAz MCAqIEhaKTsKKwkJc3Bpbl9sb2NrKCZnbG9iLT5scnVfbG9jayk7CisJCWdvdG8gZXJyb3I7CisJ fQorCiAJc3Bpbl9sb2NrKCZnbG9iLT5scnVfbG9jayk7CiAJcmV0ID0gX190dG1fYm9fcmVzZXJ2 ZShibywgZmFsc2UsIHRydWUsIE5VTEwpOwotCiAJaWYgKCFyZXQpIHsKLQkJaWYgKCF0dG1fYm9f d2FpdChibywgZmFsc2UsIHRydWUpKSB7CisJCWlmIChyZXNlcnZhdGlvbl9vYmplY3RfdGVzdF9z aWduYWxlZF9yY3UoJmJvLT50dG1fcmVzdiwgdHJ1ZSkpIHsKIAkJCXR0bV9ib19kZWxfZnJvbV9s cnUoYm8pOwogCQkJc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKKwkJCWlmIChiby0+cmVz diAhPSAmYm8tPnR0bV9yZXN2KQorCQkJCXJlc2VydmF0aW9uX29iamVjdF91bmxvY2soJmJvLT50 dG1fcmVzdik7CiAJCQl0dG1fYm9fY2xlYW51cF9tZW10eXBlX3VzZShibyk7Ci0KIAkJCXJldHVy bjsKIAkJfQogCi0JCXJldCA9IHR0bV9ib19pbmRpdmlkdWFsaXplX3Jlc3YoYm8pOwotCQlpZiAo cmV0KSB7Ci0JCQkvKiBMYXN0IHJlc29ydCwgaWYgd2UgZmFpbCB0byBhbGxvY2F0ZSBtZW1vcnkg Zm9yIHRoZQotCQkJICogZmVuY2VzIGJsb2NrIGZvciB0aGUgQk8gdG8gYmVjb21lIGlkbGUgYW5k IGZyZWUgaXQuCi0JCQkgKi8KLQkJCXNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7Ci0JCQl0 dG1fYm9fd2FpdChibywgdHJ1ZSwgdHJ1ZSk7Ci0JCQl0dG1fYm9fY2xlYW51cF9tZW10eXBlX3Vz ZShibyk7Ci0JCQlyZXR1cm47Ci0JCX0KIAkJdHRtX2JvX2ZsdXNoX2FsbF9mZW5jZXMoYm8pOwog CiAJCS8qCkBAIC00NzQsMTEgKzQ3NSwxMiBAQCBzdGF0aWMgdm9pZCB0dG1fYm9fY2xlYW51cF9y ZWZzX29yX3F1ZXVlKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8pCiAJCQl0dG1fYm9fYWRk X3RvX2xydShibyk7CiAJCX0KIAotCQlpZiAoYm8tPnJlc3YgIT0gJmJvLT50dG1fcmVzdikKLQkJ CXJlc2VydmF0aW9uX29iamVjdF91bmxvY2soJmJvLT50dG1fcmVzdik7CiAJCV9fdHRtX2JvX3Vu cmVzZXJ2ZShibyk7CiAJfQorCWlmIChiby0+cmVzdiAhPSAmYm8tPnR0bV9yZXN2KQorCQlyZXNl cnZhdGlvbl9vYmplY3RfdW5sb2NrKCZiby0+dHRtX3Jlc3YpOwogCitlcnJvcjoKIAlrcmVmX2dl dCgmYm8tPmxpc3Rfa3JlZik7CiAJbGlzdF9hZGRfdGFpbCgmYm8tPmRkZXN0cm95LCAmYmRldi0+ ZGRlc3Ryb3kpOwogCXNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7Ci0tIAoyLjE0LjMKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBt YWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752524AbdLAAYT (ORCPT ); Thu, 30 Nov 2017 19:24:19 -0500 Received: from mx1.redhat.com ([209.132.183.28]:56778 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752307AbdLAAYQ (ORCPT ); Thu, 30 Nov 2017 19:24:16 -0500 From: Lyude Paul To: stable@vger.kernel.org Cc: =?UTF-8?q?Christian=20K=C3=B6nig?= , David Airlie , Alex Deucher , Sinclair Yeh , =?UTF-8?q?Nicolai=20H=C3=A4hnle?= , Chunming Zhou , =?UTF-8?q?Michel=20D=C3=A4nzer?= , Peter Zijlstra , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/4] drm/ttm: fix ttm_bo_cleanup_refs_or_queue once more Date: Thu, 30 Nov 2017 19:23:03 -0500 Message-Id: <20171201002311.28098-2-lyude@redhat.com> In-Reply-To: <20171201002311.28098-1-lyude@redhat.com> References: <20171201002311.28098-1-lyude@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Fri, 01 Dec 2017 00:24:16 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Christian König With shared reservation objects __ttm_bo_reserve() can easily fail even on destroyed BOs. This prevents correct handling when we need to individualize the reservation object. Fix this by individualizing the object before even trying to reserve it. commit 378e2d5b504fe0231c557751e58b80fcf717cc20 upstream Signed-off-by: Christian König Acked-by: Chunming Zhou Signed-off-by: Alex Deucher Signed-off-by: Lyude Paul --- drivers/gpu/drm/ttm/ttm_bo.c | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c index 180ce6296416..bee77d31895b 100644 --- a/drivers/gpu/drm/ttm/ttm_bo.c +++ b/drivers/gpu/drm/ttm/ttm_bo.c @@ -440,28 +440,29 @@ static void ttm_bo_cleanup_refs_or_queue(struct ttm_buffer_object *bo) struct ttm_bo_global *glob = bo->glob; int ret; + ret = ttm_bo_individualize_resv(bo); + if (ret) { + /* Last resort, if we fail to allocate memory for the + * fences block for the BO to become idle + */ + reservation_object_wait_timeout_rcu(bo->resv, true, false, + 30 * HZ); + spin_lock(&glob->lru_lock); + goto error; + } + spin_lock(&glob->lru_lock); ret = __ttm_bo_reserve(bo, false, true, NULL); - if (!ret) { - if (!ttm_bo_wait(bo, false, true)) { + if (reservation_object_test_signaled_rcu(&bo->ttm_resv, true)) { ttm_bo_del_from_lru(bo); spin_unlock(&glob->lru_lock); + if (bo->resv != &bo->ttm_resv) + reservation_object_unlock(&bo->ttm_resv); ttm_bo_cleanup_memtype_use(bo); - return; } - ret = ttm_bo_individualize_resv(bo); - if (ret) { - /* Last resort, if we fail to allocate memory for the - * fences block for the BO to become idle and free it. - */ - spin_unlock(&glob->lru_lock); - ttm_bo_wait(bo, true, true); - ttm_bo_cleanup_memtype_use(bo); - return; - } ttm_bo_flush_all_fences(bo); /* @@ -474,11 +475,12 @@ static void ttm_bo_cleanup_refs_or_queue(struct ttm_buffer_object *bo) ttm_bo_add_to_lru(bo); } - if (bo->resv != &bo->ttm_resv) - reservation_object_unlock(&bo->ttm_resv); __ttm_bo_unreserve(bo); } + if (bo->resv != &bo->ttm_resv) + reservation_object_unlock(&bo->ttm_resv); +error: kref_get(&bo->list_kref); list_add_tail(&bo->ddestroy, &bdev->ddestroy); spin_unlock(&glob->lru_lock); -- 2.14.3