From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sasha Levin Subject: [PATCH AUTOSEL 4.20 37/81] drm/amdgpu: Transfer fences to dmabuf importer Date: Thu, 28 Feb 2019 10:07:29 -0500 Message-ID: <20190228150813.10256-37-sashal@kernel.org> References: <20190228150813.10256-1-sashal@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190228150813.10256-1-sashal-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, stable-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: Sasha Levin , dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Chris Wilson , amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Alex Deucher , =?UTF-8?q?Christian=20K=C3=B6nig?= RnJvbTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CgpbIFVwc3RyZWFt IGNvbW1pdCA2ZTExZWE5ZGU5NTc2YTY0NDA0NWZmZGMyMDY3YzA5YmMyMDEyZWRhIF0KCmFtZGdw dSBvbmx5IHVzZXMgc2hhcmVkLWZlbmNlcyBpbnRlcm5hbGx5LCBidXQgZG1hYnVmIGltcG9ydGVy cyByZWx5IG9uCmltcGxpY2l0IHdyaXRlIGhhemFyZCB0cmFja2luZyB2aWEgdGhlIHJlc2VydmF0 aW9uX29iamVjdC5mZW5jZV9leGNsLgpGb3IgZXhhbXBsZSwgdGhlIGltcG9ydGVyIHVzZSB0aGUg d3JpdGUgaGF6YXJkIGZvciB0aW1pbmcgYSBwYWdlIGZsaXAgdG8Kb25seSBvY2N1ciBhZnRlciB0 aGUgZXhwb3J0ZXIgaGFzIGZpbmlzaGVkIGZsdXNoaW5nIGl0cyB3cml0ZSBpbnRvIHRoZQpzdXJm YWNlLiBBcyBzdWNoLCBvbiBleHBvcnRpbmcgYSBkbWFidWYsIHdlIG11c3QgZWl0aGVyIGZsdXNo IGFsbApvdXRzdGFuZGluZyBmZW5jZXMgKGZvciB3ZSBkbyBub3Qga25vdyB3aGljaCBhcmUgd3Jp dGVzIGFuZCBzaG91bGQgaGF2ZQpiZWVuIGV4Y2x1c2l2ZSkgb3IgYWx0ZXJuYXRpdmVseSBjcmVh dGUgYSBuZXcgZXhjbHVzaXZlIGZlbmNlIHRoYXQgaXMKdGhlIGNvbXBvc2l0ZSBvZiBhbGwgdGhl IGV4aXN0aW5nIHNoYXJlZCBmZW5jZXMsIGFuZCBzbyB3aWxsIG9ubHkgYmUKc2lnbmFsZWQgd2hl biBhbGwgZWFybGllciBmZW5jZXMgYXJlIHNpZ25hbGVkIChlbnN1cmluZyB0aGF0IHdlIGNhbiBu b3QKYmUgc2lnbmFsZWQgYmVmb3JlIHRoZSBjb21wbGV0aW9uIG9mIGFueSBlYXJsaWVyIHdyaXRl KS4KCnYyOiByZXNlcnZhdGlvbl9vYmplY3QgaXMgYWxyZWFkeSBsb2NrZWQgYnkgYW1kZ3B1X2Jv X3Jlc2VydmUoKQp2MzogUmVwbGFjZSBsb29waW5nIHdpdGggZ2V0X2ZlbmNlc19yY3UgYW5kIHNw ZWNpYWwgY2FzZSB0aGUgcHJvbW90aW9uCm9mIGEgc2luZ2xlIHNoYXJlZCBmZW5jZSBkaXJlY3Rs eSB0byBhbiBleGNsdXNpdmUgZmVuY2UsIGJ5cGFzc2luZyB0aGUKZmVuY2UgYXJyYXkuCnY0OiBE cm9wIHRoZSBmZW5jZSBhcnJheSByZWYgYWZ0ZXIgYXNzaWduaW5nIHRvIHJlc2VydmF0aW9uX29i amVjdAoKQnVnemlsbGE6IGh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dp P2lkPTEwNzM0MQpUZXN0Y2FzZTogaWd0L2FtZF9wcmltZS9hbWQtdG8taTkxNQpSZWZlcmVuY2Vz OiA4ZTk0YTQ2YzE3NzAgKCJkcm0vYW1kZ3B1OiBBdHRhY2ggZXhjbHVzaXZlIGZlbmNlIHRvIHBy aW1lIGV4cG9ydGVkIGJvJ3MuICh2NSkiKQpTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNo cmlzQGNocmlzLXdpbHNvbi5jby51az4KQ2M6IEFsZXggRGV1Y2hlciA8YWxleGFuZGVyLmRldWNo ZXJAYW1kLmNvbT4KQ2M6ICJDaHJpc3RpYW4gS8O2bmlnIiA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQu Y29tPgpSZXZpZXdlZC1ieTogIkNocmlzdGlhbiBLw7ZuaWciIDxjaHJpc3RpYW4ua29lbmlnQGFt ZC5jb20+ClNpZ25lZC1vZmYtYnk6IEFsZXggRGV1Y2hlciA8YWxleGFuZGVyLmRldWNoZXJAYW1k LmNvbT4KU2lnbmVkLW9mZi1ieTogU2FzaGEgTGV2aW4gPHNhc2hhbEBrZXJuZWwub3JnPgotLS0K IGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9wcmltZS5jIHwgNTkgKysrKysrKysr KysrKysrKysrKystLS0KIDEgZmlsZSBjaGFuZ2VkLCA1MSBpbnNlcnRpb25zKCspLCA4IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9w cmltZS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ByaW1lLmMKaW5kZXgg ZTQ1ZTkyOWFhYWI1Yi4uOTBhNTk3MGFmNGI3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X3ByaW1lLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X3ByaW1lLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJhbWRncHVfZ2Vt LmgiCiAjaW5jbHVkZSA8ZHJtL2FtZGdwdV9kcm0uaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtYnVm Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWZlbmNlLWFycmF5Lmg+CiAKIHN0YXRpYyBjb25zdCBz dHJ1Y3QgZG1hX2J1Zl9vcHMgYW1kZ3B1X2RtYWJ1Zl9vcHM7CiAKQEAgLTE4OSw2ICsxOTAsNDgg QEAgYW1kZ3B1X2dlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQogCitzdGF0aWMgaW50CitfX3Jlc2VydmF0aW9u X29iamVjdF9tYWtlX2V4Y2x1c2l2ZShzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0ICpvYmopCit7 CisJc3RydWN0IGRtYV9mZW5jZSAqKmZlbmNlczsKKwl1bnNpZ25lZCBpbnQgY291bnQ7CisJaW50 IHI7CisKKwlpZiAoIXJlc2VydmF0aW9uX29iamVjdF9nZXRfbGlzdChvYmopKSAvKiBubyBzaGFy ZWQgZmVuY2VzIHRvIGNvbnZlcnQgKi8KKwkJcmV0dXJuIDA7CisKKwlyID0gcmVzZXJ2YXRpb25f b2JqZWN0X2dldF9mZW5jZXNfcmN1KG9iaiwgTlVMTCwgJmNvdW50LCAmZmVuY2VzKTsKKwlpZiAo cikKKwkJcmV0dXJuIHI7CisKKwlpZiAoY291bnQgPT0gMCkgeworCQkvKiBOb3cgdGhhdCB3YXMg dW5leHBlY3RlZC4gKi8KKwl9IGVsc2UgaWYgKGNvdW50ID09IDEpIHsKKwkJcmVzZXJ2YXRpb25f b2JqZWN0X2FkZF9leGNsX2ZlbmNlKG9iaiwgZmVuY2VzWzBdKTsKKwkJZG1hX2ZlbmNlX3B1dChm ZW5jZXNbMF0pOworCQlrZnJlZShmZW5jZXMpOworCX0gZWxzZSB7CisJCXN0cnVjdCBkbWFfZmVu Y2VfYXJyYXkgKmFycmF5OworCisJCWFycmF5ID0gZG1hX2ZlbmNlX2FycmF5X2NyZWF0ZShjb3Vu dCwgZmVuY2VzLAorCQkJCQkgICAgICAgZG1hX2ZlbmNlX2NvbnRleHRfYWxsb2MoMSksIDAsCisJ CQkJCSAgICAgICBmYWxzZSk7CisJCWlmICghYXJyYXkpCisJCQlnb3RvIGVycl9mZW5jZXNfcHV0 OworCisJCXJlc2VydmF0aW9uX29iamVjdF9hZGRfZXhjbF9mZW5jZShvYmosICZhcnJheS0+YmFz ZSk7CisJCWRtYV9mZW5jZV9wdXQoJmFycmF5LT5iYXNlKTsKKwl9CisKKwlyZXR1cm4gMDsKKwor ZXJyX2ZlbmNlc19wdXQ6CisJd2hpbGUgKGNvdW50LS0pCisJCWRtYV9mZW5jZV9wdXQoZmVuY2Vz W2NvdW50XSk7CisJa2ZyZWUoZmVuY2VzKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKwogLyoqCiAg KiBhbWRncHVfZ2VtX21hcF9hdHRhY2ggLSAmZG1hX2J1Zl9vcHMuYXR0YWNoIGltcGxlbWVudGF0 aW9uCiAgKiBAZG1hX2J1ZjogU2hhcmVkIERNQSBidWZmZXIKQEAgLTIyMCwxNiArMjYzLDE2IEBA IHN0YXRpYyBpbnQgYW1kZ3B1X2dlbV9tYXBfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFfYnVm LAogCiAJaWYgKGF0dGFjaC0+ZGV2LT5kcml2ZXIgIT0gYWRldi0+ZGV2LT5kcml2ZXIpIHsKIAkJ LyoKLQkJICogV2FpdCBmb3IgYWxsIHNoYXJlZCBmZW5jZXMgdG8gY29tcGxldGUgYmVmb3JlIHdl IHN3aXRjaCB0byBmdXR1cmUKLQkJICogdXNlIG9mIGV4Y2x1c2l2ZSBmZW5jZSBvbiB0aGlzIHBy aW1lIHNoYXJlZCBiby4KKwkJICogV2Ugb25seSBjcmVhdGUgc2hhcmVkIGZlbmNlcyBmb3IgaW50 ZXJuYWwgdXNlLCBidXQgaW1wb3J0ZXJzCisJCSAqIG9mIHRoZSBkbWFidWYgcmVseSBvbiBleGNs dXNpdmUgZmVuY2VzIGZvciBpbXBsaWNpdGx5CisJCSAqIHRyYWNraW5nIHdyaXRlIGhhemFyZHMu IEFzIGFueSBvZiB0aGUgY3VycmVudCBmZW5jZXMgbWF5CisJCSAqIGNvcnJlc3BvbmQgdG8gYSB3 cml0ZSwgd2UgbmVlZCB0byBjb252ZXJ0IGFsbCBleGlzdGluZworCQkgKiBmZW5jZXMgb24gdGhl IHJlc2VydmF0aW9uIG9iamVjdCBpbnRvIGEgc2luZ2xlIGV4Y2x1c2l2ZQorCQkgKiBmZW5jZS4K IAkJICovCi0JCXIgPSByZXNlcnZhdGlvbl9vYmplY3Rfd2FpdF90aW1lb3V0X3JjdShiby0+dGJv LnJlc3YsCi0JCQkJCQkJdHJ1ZSwgZmFsc2UsCi0JCQkJCQkJTUFYX1NDSEVEVUxFX1RJTUVPVVQp OwotCQlpZiAodW5saWtlbHkociA8IDApKSB7Ci0JCQlEUk1fREVCVUdfUFJJTUUoIkZlbmNlIHdh aXQgZmFpbGVkOiAlbGlcbiIsIHIpOworCQlyID0gX19yZXNlcnZhdGlvbl9vYmplY3RfbWFrZV9l eGNsdXNpdmUoYm8tPnRiby5yZXN2KTsKKwkJaWYgKHIpCiAJCQlnb3RvIGVycm9yX3VucmVzZXJ2 ZTsKLQkJfQogCX0KIAogCS8qIHBpbiBidWZmZXIgaW50byBHVFQgKi8KLS0gCjIuMTkuMQoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWls aW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 47191C43381 for ; Thu, 28 Feb 2019 15:31:48 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 163F720C01 for ; Thu, 28 Feb 2019 15:31:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1551367908; bh=Z4ZAmPjOotVqEMjpuTB9BtsExFQxt9B9UmAqTG49QSM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=n9EX/5C4lCNMNiy6PtOWG22PrdVa6fpMPh2laU2bzAX9RAChbUEwbffNUabEpKAU5 IbcXoutTlnKYkEZziVNqjr1pwQu0rQCpy20oxjp9lMZTVT0ZnxoRrwR/nuySm5l9RB NZwfRdqghzMO425FnYR15OI3fBwwX6Nl3AWODvak= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388148AbfB1Pbl (ORCPT ); Thu, 28 Feb 2019 10:31:41 -0500 Received: from mail.kernel.org ([198.145.29.99]:41718 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387475AbfB1PJM (ORCPT ); Thu, 28 Feb 2019 10:09:12 -0500 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 610B3218CD; Thu, 28 Feb 2019 15:09:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1551366551; bh=Z4ZAmPjOotVqEMjpuTB9BtsExFQxt9B9UmAqTG49QSM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CxNGAYHJOabZEHqOyfY5qga5idU2TI1V+5RdSmWkeWxo7RWpdFmjz+4PJ08fvJpnK cusbM90HNug3rK1Q8trpgzk9eHGQvlwS2GwgbQ8nebPze13+iJ/nRc5aODRT3illww 6qjkkyS+zYNUCs6WQbxD+qQFs5liXh4MzGXSNgAE= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Chris Wilson , Alex Deucher , =?UTF-8?q?Christian=20K=C3=B6nig?= , Sasha Levin , amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Subject: [PATCH AUTOSEL 4.20 37/81] drm/amdgpu: Transfer fences to dmabuf importer Date: Thu, 28 Feb 2019 10:07:29 -0500 Message-Id: <20190228150813.10256-37-sashal@kernel.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190228150813.10256-1-sashal@kernel.org> References: <20190228150813.10256-1-sashal@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Chris Wilson [ Upstream commit 6e11ea9de9576a644045ffdc2067c09bc2012eda ] amdgpu only uses shared-fences internally, but dmabuf importers rely on implicit write hazard tracking via the reservation_object.fence_excl. For example, the importer use the write hazard for timing a page flip to only occur after the exporter has finished flushing its write into the surface. As such, on exporting a dmabuf, we must either flush all outstanding fences (for we do not know which are writes and should have been exclusive) or alternatively create a new exclusive fence that is the composite of all the existing shared fences, and so will only be signaled when all earlier fences are signaled (ensuring that we can not be signaled before the completion of any earlier write). v2: reservation_object is already locked by amdgpu_bo_reserve() v3: Replace looping with get_fences_rcu and special case the promotion of a single shared fence directly to an exclusive fence, bypassing the fence array. v4: Drop the fence array ref after assigning to reservation_object Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107341 Testcase: igt/amd_prime/amd-to-i915 References: 8e94a46c1770 ("drm/amdgpu: Attach exclusive fence to prime exported bo's. (v5)") Signed-off-by: Chris Wilson Cc: Alex Deucher Cc: "Christian König" Reviewed-by: "Christian König" Signed-off-by: Alex Deucher Signed-off-by: Sasha Levin --- drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c | 59 ++++++++++++++++++++--- 1 file changed, 51 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c index e45e929aaab5b..90a5970af4b7f 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c @@ -38,6 +38,7 @@ #include "amdgpu_gem.h" #include #include +#include static const struct dma_buf_ops amdgpu_dmabuf_ops; @@ -189,6 +190,48 @@ amdgpu_gem_prime_import_sg_table(struct drm_device *dev, return ERR_PTR(ret); } +static int +__reservation_object_make_exclusive(struct reservation_object *obj) +{ + struct dma_fence **fences; + unsigned int count; + int r; + + if (!reservation_object_get_list(obj)) /* no shared fences to convert */ + return 0; + + r = reservation_object_get_fences_rcu(obj, NULL, &count, &fences); + if (r) + return r; + + if (count == 0) { + /* Now that was unexpected. */ + } else if (count == 1) { + reservation_object_add_excl_fence(obj, fences[0]); + dma_fence_put(fences[0]); + kfree(fences); + } else { + struct dma_fence_array *array; + + array = dma_fence_array_create(count, fences, + dma_fence_context_alloc(1), 0, + false); + if (!array) + goto err_fences_put; + + reservation_object_add_excl_fence(obj, &array->base); + dma_fence_put(&array->base); + } + + return 0; + +err_fences_put: + while (count--) + dma_fence_put(fences[count]); + kfree(fences); + return -ENOMEM; +} + /** * amdgpu_gem_map_attach - &dma_buf_ops.attach implementation * @dma_buf: Shared DMA buffer @@ -220,16 +263,16 @@ static int amdgpu_gem_map_attach(struct dma_buf *dma_buf, if (attach->dev->driver != adev->dev->driver) { /* - * Wait for all shared fences to complete before we switch to future - * use of exclusive fence on this prime shared bo. + * We only create shared fences for internal use, but importers + * of the dmabuf rely on exclusive fences for implicitly + * tracking write hazards. As any of the current fences may + * correspond to a write, we need to convert all existing + * fences on the reservation object into a single exclusive + * fence. */ - r = reservation_object_wait_timeout_rcu(bo->tbo.resv, - true, false, - MAX_SCHEDULE_TIMEOUT); - if (unlikely(r < 0)) { - DRM_DEBUG_PRIME("Fence wait failed: %li\n", r); + r = __reservation_object_make_exclusive(bo->tbo.resv); + if (r) goto error_unreserve; - } } /* pin buffer into GTT */ -- 2.19.1