From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sasha Levin Subject: [PATCH AUTOSEL 5.2 005/171] drm/virtio: set seqno for dma-fence Date: Thu, 18 Jul 2019 23:53:56 -0400 Message-ID: <20190719035643.14300-5-sashal@kernel.org> References: <20190719035643.14300-1-sashal@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by gabe.freedesktop.org (Postfix) with ESMTPS id 959096E49A for ; Fri, 19 Jul 2019 03:56:52 +0000 (UTC) In-Reply-To: <20190719035643.14300-1-sashal@kernel.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Sasha Levin , dri-devel@lists.freedesktop.org, virtualization@lists.linux-foundation.org, Gerd Hoffmann , Emil Velikov List-Id: dri-devel@lists.freedesktop.org RnJvbTogQ2hpYS1JIFd1IDxvbHZhZmZlQGdtYWlsLmNvbT4KClsgVXBzdHJlYW0gY29tbWl0IGVm ZTJiZjk2NTUyMmJmMDc5NmQ0MTNiNDdhMmFiYmY4MWQ0NzFkNmYgXQoKVGhpcyBpcyBtb3RpdmF0 ZWQgYnkgaGF2aW5nIG1lYW5pbmdmdWwgZnRyYWNlIGV2ZW50cywgYnV0IGl0IGFsc28KZml4ZXMg dXNlIGNhc2VzIHdoZXJlIGRtYV9mZW5jZV9pc19sYXRlciBpcyBjYWxsZWQsIHN1Y2ggYXMgaW4K c3luY19maWxlX21lcmdlLgoKSW4gb3RoZXIgZHJpdmVycywgZmVuY2UgY3JlYXRpb24gYW5kIGNt ZGJ1ZiBzdWJtaXNzaW9uIG5vcm1hbGx5CmhhcHBlbiBhdG9taWNhbGx5LAoKICBtdXRleF9sb2Nr KCk7CiAgZmVuY2UgPSBkbWFfZmVuY2VfY3JlYXRlKC4uLiwgKyt0aW1lbGluZS0+c2Vxbm8pOwog IHN1Ym1pdF9jbWRidWYoKTsKICBtdXRleF91bmxvY2soKTsKCmFuZCBoYXZlIG5vIHN1Y2ggaXNz dWUuICBCdXQgaW4gb3VyIGRyaXZlciwgYmVjYXVzZSBtb3N0IGlvY3RscwpxdWV1ZSBjb21tYW5k cyBpbnRvIGN0cmxxLCB3ZSBkbyBub3Qgd2FudCB0byBncmFiIGEgbG9jay4gIEluc3RlYWQsCndl IHNldCBzZXFubyB0byAwIHdoZW4gYSBmZW5jZSBpcyBjcmVhdGVkLCBhbmQgdXBkYXRlIGl0IHdo ZW4gdGhlCmNvbW1hbmQgaXMgZmluYWxseSBxdWV1ZWQgYW5kIHRoZSBzZXFubyBpcyBrbm93bi4K ClNpZ25lZC1vZmYtYnk6IENoaWEtSSBXdSA8b2x2YWZmZUBnbWFpbC5jb20+ClJldmlld2VkLWJ5 OiBFbWlsIFZlbGlrb3YgPGVtaWwudmVsaWtvdkBjb2xsYWJvcmEuY29tPgpMaW5rOiBodHRwOi8v cGF0Y2h3b3JrLmZyZWVkZXNrdG9wLm9yZy9wYXRjaC9tc2dpZC8yMDE5MDQyOTIyMDgyNS4xNTY2 NDQtMS1vbHZhZmZlQGdtYWlsLmNvbQpTaWduZWQtb2ZmLWJ5OiBHZXJkIEhvZmZtYW5uIDxrcmF4 ZWxAcmVkaGF0LmNvbT4KU2lnbmVkLW9mZi1ieTogU2FzaGEgTGV2aW4gPHNhc2hhbEBrZXJuZWwu b3JnPgotLS0KIGRyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9kcnYuaCAgIHwgIDEgLQog ZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2ZlbmNlLmMgfCAxNyArKysrKysrKysrLS0t LS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9kcnYuaCBiL2RyaXZl cnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9kcnYuaAppbmRleCBiNjlhZTEwY2EyMzguLmQ3MjRm YjNkZTQ0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2Rydi5o CisrKyBiL2RyaXZlcnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9kcnYuaApAQCAtMTAyLDcgKzEw Miw2IEBAIHN0cnVjdCB2aXJ0aW9fZ3B1X2ZlbmNlIHsKIAlzdHJ1Y3QgZG1hX2ZlbmNlIGY7CiAJ c3RydWN0IHZpcnRpb19ncHVfZmVuY2VfZHJpdmVyICpkcnY7CiAJc3RydWN0IGxpc3RfaGVhZCBu b2RlOwotCXVpbnQ2NF90IHNlcTsKIH07CiAjZGVmaW5lIHRvX3ZpcnRpb19mZW5jZSh4KSBcCiAJ Y29udGFpbmVyX29mKHgsIHN0cnVjdCB2aXJ0aW9fZ3B1X2ZlbmNlLCBmKQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2ZlbmNlLmMgYi9kcml2ZXJzL2dwdS9kcm0v dmlydGlvL3ZpcnRncHVfZmVuY2UuYwppbmRleCA4N2QxOTY2MTkyZjQuLjcyYjRmNzU2MTQzMiAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2ZlbmNlLmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2ZlbmNlLmMKQEAgLTQwLDE2ICs0MCwxNCBA QCBib29sIHZpcnRpb19mZW5jZV9zaWduYWxlZChzdHJ1Y3QgZG1hX2ZlbmNlICpmKQogewogCXN0 cnVjdCB2aXJ0aW9fZ3B1X2ZlbmNlICpmZW5jZSA9IHRvX3ZpcnRpb19mZW5jZShmKTsKIAotCWlm IChhdG9taWM2NF9yZWFkKCZmZW5jZS0+ZHJ2LT5sYXN0X3NlcSkgPj0gZmVuY2UtPnNlcSkKKwlp ZiAoYXRvbWljNjRfcmVhZCgmZmVuY2UtPmRydi0+bGFzdF9zZXEpID49IGZlbmNlLT5mLnNlcW5v KQogCQlyZXR1cm4gdHJ1ZTsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKIHN0YXRpYyB2b2lkIHZpcnRp b19mZW5jZV92YWx1ZV9zdHIoc3RydWN0IGRtYV9mZW5jZSAqZiwgY2hhciAqc3RyLCBpbnQgc2l6 ZSkKIHsKLQlzdHJ1Y3QgdmlydGlvX2dwdV9mZW5jZSAqZmVuY2UgPSB0b192aXJ0aW9fZmVuY2Uo Zik7Ci0KLQlzbnByaW50ZihzdHIsIHNpemUsICIlbGx1IiwgZmVuY2UtPnNlcSk7CisJc25wcmlu dGYoc3RyLCBzaXplLCAiJWxsdSIsIGYtPnNlcW5vKTsKIH0KIAogc3RhdGljIHZvaWQgdmlydGlv X3RpbWVsaW5lX3ZhbHVlX3N0cihzdHJ1Y3QgZG1hX2ZlbmNlICpmLCBjaGFyICpzdHIsIGludCBz aXplKQpAQCAtNzYsNiArNzQsMTEgQEAgc3RydWN0IHZpcnRpb19ncHVfZmVuY2UgKnZpcnRpb19n cHVfZmVuY2VfYWxsb2Moc3RydWN0IHZpcnRpb19ncHVfZGV2aWNlICp2Z2RldikKIAkJcmV0dXJu IGZlbmNlOwogCiAJZmVuY2UtPmRydiA9IGRydjsKKworCS8qIFRoaXMgb25seSBwYXJ0aWFsbHkg aW5pdGlhbGl6ZXMgdGhlIGZlbmNlIGJlY2F1c2UgdGhlIHNlcW5vIGlzCisJICogdW5rbm93biB5 ZXQuICBUaGUgZmVuY2UgbXVzdCBub3QgYmUgdXNlZCBvdXRzaWRlIG9mIHRoZSBkcml2ZXIKKwkg KiB1bnRpbCB2aXJ0aW9fZ3B1X2ZlbmNlX2VtaXQgaXMgY2FsbGVkLgorCSAqLwogCWRtYV9mZW5j ZV9pbml0KCZmZW5jZS0+ZiwgJnZpcnRpb19mZW5jZV9vcHMsICZkcnYtPmxvY2ssIGRydi0+Y29u dGV4dCwgMCk7CiAKIAlyZXR1cm4gZmVuY2U7CkBAIC04OSwxMyArOTIsMTMgQEAgaW50IHZpcnRp b19ncHVfZmVuY2VfZW1pdChzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZnZGV2LAogCXVuc2ln bmVkIGxvbmcgaXJxX2ZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRydi0+bG9jaywgaXJx X2ZsYWdzKTsKLQlmZW5jZS0+c2VxID0gKytkcnYtPnN5bmNfc2VxOworCWZlbmNlLT5mLnNlcW5v ID0gKytkcnYtPnN5bmNfc2VxOwogCWRtYV9mZW5jZV9nZXQoJmZlbmNlLT5mKTsKIAlsaXN0X2Fk ZF90YWlsKCZmZW5jZS0+bm9kZSwgJmRydi0+ZmVuY2VzKTsKIAlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZkcnYtPmxvY2ssIGlycV9mbGFncyk7CiAKIAljbWRfaGRyLT5mbGFncyB8PSBjcHVfdG9f bGUzMihWSVJUSU9fR1BVX0ZMQUdfRkVOQ0UpOwotCWNtZF9oZHItPmZlbmNlX2lkID0gY3B1X3Rv X2xlNjQoZmVuY2UtPnNlcSk7CisJY21kX2hkci0+ZmVuY2VfaWQgPSBjcHVfdG9fbGU2NChmZW5j ZS0+Zi5zZXFubyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwOSw3ICsxMTIsNyBAQCB2b2lkIHZp cnRpb19ncHVfZmVuY2VfZXZlbnRfcHJvY2VzcyhzdHJ1Y3QgdmlydGlvX2dwdV9kZXZpY2UgKnZn ZGV2LAogCXNwaW5fbG9ja19pcnFzYXZlKCZkcnYtPmxvY2ssIGlycV9mbGFncyk7CiAJYXRvbWlj NjRfc2V0KCZ2Z2Rldi0+ZmVuY2VfZHJ2Lmxhc3Rfc2VxLCBsYXN0X3NlcSk7CiAJbGlzdF9mb3Jf ZWFjaF9lbnRyeV9zYWZlKGZlbmNlLCB0bXAsICZkcnYtPmZlbmNlcywgbm9kZSkgewotCQlpZiAo bGFzdF9zZXEgPCBmZW5jZS0+c2VxKQorCQlpZiAobGFzdF9zZXEgPCBmZW5jZS0+Zi5zZXFubykK IAkJCWNvbnRpbnVlOwogCQlkbWFfZmVuY2Vfc2lnbmFsX2xvY2tlZCgmZmVuY2UtPmYpOwogCQls aXN0X2RlbCgmZmVuY2UtPm5vZGUpOwotLSAKMi4yMC4xCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZl bEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9kcmktZGV2ZWw= 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=-10.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable 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 0EE25C76195 for ; Fri, 19 Jul 2019 03:57:02 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id DA0B6218A6 for ; Fri, 19 Jul 2019 03:57:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1563508621; bh=YxhhvzvXE6Bce1kbgm2suGKFRx5o/yNjvKqLyD1/Lok=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=Jq7VSTB/MAGIPwxvTMqbk68b8/f1QSNoSfJDYkhWsH1Zp5/Oee+e3bmKIypWfkSQ1 piMLFe4Ol66P19qaME74s28ujyXmrqyZpD9WZR74ErZp3jnxs7RCHmKHXcywx7mtWc va2F7owQNnxhPP807QTUn3wxNbw7dXTdHNFu8S6g= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726935AbfGSD45 (ORCPT ); Thu, 18 Jul 2019 23:56:57 -0400 Received: from mail.kernel.org ([198.145.29.99]:56206 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726829AbfGSD4x (ORCPT ); Thu, 18 Jul 2019 23:56:53 -0400 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 A0C032184E; Fri, 19 Jul 2019 03:56:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1563508612; bh=YxhhvzvXE6Bce1kbgm2suGKFRx5o/yNjvKqLyD1/Lok=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=G7b2ZUqWJl3fhpmtc+jy4zTnXuwaZfTdB2nDtXWQrOT3wzHi5KW4FuPsH+xtJXuAq etFrOaUWTeP+4SXaF0TzWIZmz4oXc1tOq/G7oGKIVG0Y5K0TAL2HzMJuUWIt0geiJs Rl6zATMhebQpVUpt33FqVmG3LSQkes4mJd1nH9iI= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Chia-I Wu , Emil Velikov , Gerd Hoffmann , Sasha Levin , dri-devel@lists.freedesktop.org, virtualization@lists.linux-foundation.org Subject: [PATCH AUTOSEL 5.2 005/171] drm/virtio: set seqno for dma-fence Date: Thu, 18 Jul 2019 23:53:56 -0400 Message-Id: <20190719035643.14300-5-sashal@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190719035643.14300-1-sashal@kernel.org> References: <20190719035643.14300-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review 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: Chia-I Wu [ Upstream commit efe2bf965522bf0796d413b47a2abbf81d471d6f ] This is motivated by having meaningful ftrace events, but it also fixes use cases where dma_fence_is_later is called, such as in sync_file_merge. In other drivers, fence creation and cmdbuf submission normally happen atomically, mutex_lock(); fence = dma_fence_create(..., ++timeline->seqno); submit_cmdbuf(); mutex_unlock(); and have no such issue. But in our driver, because most ioctls queue commands into ctrlq, we do not want to grab a lock. Instead, we set seqno to 0 when a fence is created, and update it when the command is finally queued and the seqno is known. Signed-off-by: Chia-I Wu Reviewed-by: Emil Velikov Link: http://patchwork.freedesktop.org/patch/msgid/20190429220825.156644-1-olvaffe@gmail.com Signed-off-by: Gerd Hoffmann Signed-off-by: Sasha Levin --- drivers/gpu/drm/virtio/virtgpu_drv.h | 1 - drivers/gpu/drm/virtio/virtgpu_fence.c | 17 ++++++++++------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h index b69ae10ca238..d724fb3de44e 100644 --- a/drivers/gpu/drm/virtio/virtgpu_drv.h +++ b/drivers/gpu/drm/virtio/virtgpu_drv.h @@ -102,7 +102,6 @@ struct virtio_gpu_fence { struct dma_fence f; struct virtio_gpu_fence_driver *drv; struct list_head node; - uint64_t seq; }; #define to_virtio_fence(x) \ container_of(x, struct virtio_gpu_fence, f) diff --git a/drivers/gpu/drm/virtio/virtgpu_fence.c b/drivers/gpu/drm/virtio/virtgpu_fence.c index 87d1966192f4..72b4f7561432 100644 --- a/drivers/gpu/drm/virtio/virtgpu_fence.c +++ b/drivers/gpu/drm/virtio/virtgpu_fence.c @@ -40,16 +40,14 @@ bool virtio_fence_signaled(struct dma_fence *f) { struct virtio_gpu_fence *fence = to_virtio_fence(f); - if (atomic64_read(&fence->drv->last_seq) >= fence->seq) + if (atomic64_read(&fence->drv->last_seq) >= fence->f.seqno) return true; return false; } static void virtio_fence_value_str(struct dma_fence *f, char *str, int size) { - struct virtio_gpu_fence *fence = to_virtio_fence(f); - - snprintf(str, size, "%llu", fence->seq); + snprintf(str, size, "%llu", f->seqno); } static void virtio_timeline_value_str(struct dma_fence *f, char *str, int size) @@ -76,6 +74,11 @@ struct virtio_gpu_fence *virtio_gpu_fence_alloc(struct virtio_gpu_device *vgdev) return fence; fence->drv = drv; + + /* This only partially initializes the fence because the seqno is + * unknown yet. The fence must not be used outside of the driver + * until virtio_gpu_fence_emit is called. + */ dma_fence_init(&fence->f, &virtio_fence_ops, &drv->lock, drv->context, 0); return fence; @@ -89,13 +92,13 @@ int virtio_gpu_fence_emit(struct virtio_gpu_device *vgdev, unsigned long irq_flags; spin_lock_irqsave(&drv->lock, irq_flags); - fence->seq = ++drv->sync_seq; + fence->f.seqno = ++drv->sync_seq; dma_fence_get(&fence->f); list_add_tail(&fence->node, &drv->fences); spin_unlock_irqrestore(&drv->lock, irq_flags); cmd_hdr->flags |= cpu_to_le32(VIRTIO_GPU_FLAG_FENCE); - cmd_hdr->fence_id = cpu_to_le64(fence->seq); + cmd_hdr->fence_id = cpu_to_le64(fence->f.seqno); return 0; } @@ -109,7 +112,7 @@ void virtio_gpu_fence_event_process(struct virtio_gpu_device *vgdev, spin_lock_irqsave(&drv->lock, irq_flags); atomic64_set(&vgdev->fence_drv.last_seq, last_seq); list_for_each_entry_safe(fence, tmp, &drv->fences, node) { - if (last_seq < fence->seq) + if (last_seq < fence->f.seqno) continue; dma_fence_signal_locked(&fence->f); list_del(&fence->node); -- 2.20.1