Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp275159ybv; Thu, 6 Feb 2020 22:48:37 -0800 (PST) X-Google-Smtp-Source: APXvYqyRwQ1uUqF66HN34gUzZZyhVtutoSyY8i6xe1U0p9L4lrPTlEMmbFJK1RK8khuFf1u97lTr X-Received: by 2002:a05:6830:1d4c:: with SMTP id p12mr1644236oth.198.1581058116947; Thu, 06 Feb 2020 22:48:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1581058116; cv=none; d=google.com; s=arc-20160816; b=NA9tIkVieKh101MsQjJAuV5hh3IPbaMaEOKzaulRMWsx3vnK2ylAMVUzFmbp4jp5tS 372693VYZABAECnnugvShecWBpon4lfbbG2v/MFV8gvrWzcmGkdRLiS6uTl+EaRNj1oo ElRloDp/6nN+IbfGksFNyStgqQ8W4nQYKijBqq5mAUz1zi0AU0K7okRkbm3eoSpYZ4Ky /u1hgAxOa/XxmUFQt7wGO8+vioJvtuAPrvka2tiRfbeLFtHNyVdzHngGnoKu/hRzsp35 /ePZUUY+bGBJnTGb31Fitf0tAZqQdrYGwZEZl3HU7zb5yq+oG3Fk6Od0poTWCYbZjQzq mzQQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature; bh=xeb4SyG/vUU8Sv/SzPWNGUfZjEEExVnvsi6QA1tOQ7I=; b=RYr8sVfzkJBrQefY83sKFEdoIj5Ehg3xeg+j/O7+fDV7rtoAGhj0hNzYIGz1zQ3aNM KSCVRM5XLZ2AuvAh1oXT7VYKSK+Z11Ae2za9Wd6kWvjzVw8aa2hS8aZA4yE2Pw+iTV/m INvxYuV2oIedzHUxdQ/3RRf1loindGu3gPmxMTgOGrO0VC65fhMGnp5pJLAf37xv/RI+ yO33cA3zYl9UWmiwZM5MarD9R4V5+PoRiM4bTsfupG7AsLckbxw5wK7KLX22ua3G5/oI 0L2Le9At3w7zJr14I/X4otjK/PWpbXheyPUhkC+TvLxRMlBPnjtEJP5H5lBbPVeSScVc ww4w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=gL1ie3vc; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 106si1163883oti.106.2020.02.06.22.48.24; Thu, 06 Feb 2020 22:48:36 -0800 (PST) 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=@redhat.com header.s=mimecast20190719 header.b=gL1ie3vc; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726954AbgBGGrD (ORCPT + 99 others); Fri, 7 Feb 2020 01:47:03 -0500 Received: from us-smtp-1.mimecast.com ([205.139.110.61]:29466 "EHLO us-smtp-delivery-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726819AbgBGGrD (ORCPT ); Fri, 7 Feb 2020 01:47:03 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1581058021; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc; bh=xeb4SyG/vUU8Sv/SzPWNGUfZjEEExVnvsi6QA1tOQ7I=; b=gL1ie3vccqWO6BOBfKm73uBBn5KrsVkWmmOIRBjE/C00dy/VdY0oApcMHl4CgDgwQXn1XZ KRdz9991S/nIawlqfkfe8lbqq1WLskFdzKxCbWDu9Kcs0k7PMnLOQGEbai5FwA33kqVfj/ 4W1UHWnYjFOYHw8/z+IQazZlbSSuJBg= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-176-tSM7xofLOoKO2VToq70Bbg-1; Fri, 07 Feb 2020 01:46:58 -0500 X-MC-Unique: tSM7xofLOoKO2VToq70Bbg-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id C82B21007270; Fri, 7 Feb 2020 06:46:56 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-112.ams2.redhat.com [10.36.116.112]) by smtp.corp.redhat.com (Postfix) with ESMTP id 10F0E790F2; Fri, 7 Feb 2020 06:46:54 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 646931FCD6; Fri, 7 Feb 2020 07:46:53 +0100 (CET) From: Gerd Hoffmann To: dri-devel@lists.freedesktop.org Cc: olvaffe@gmail.com, gurchetansingh@chromium.org, Gerd Hoffmann , David Airlie , Daniel Vetter , virtualization@lists.linux-foundation.org (open list:VIRTIO GPU DRIVER), linux-kernel@vger.kernel.org (open list) Subject: [PATCH v2] drm/virtio: fix ring free check Date: Fri, 7 Feb 2020 07:46:53 +0100 Message-Id: <20200207064653.14403-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org If the virtio device supports indirect ring descriptors we need only one ring entry for the whole command. Take that into account when checking whenever the virtqueue has enough free entries for our command. Signed-off-by: Gerd Hoffmann --- drivers/gpu/drm/virtio/virtgpu_drv.h | 1 + drivers/gpu/drm/virtio/virtgpu_debugfs.c | 1 + drivers/gpu/drm/virtio/virtgpu_kms.c | 3 +++ drivers/gpu/drm/virtio/virtgpu_vq.c | 3 +++ 4 files changed, 8 insertions(+) diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h index 7e69c06e168e..d278c8c50f39 100644 --- a/drivers/gpu/drm/virtio/virtgpu_drv.h +++ b/drivers/gpu/drm/virtio/virtgpu_drv.h @@ -193,6 +193,7 @@ struct virtio_gpu_device { bool has_virgl_3d; bool has_edid; + bool has_indirect; struct work_struct config_changed_work; diff --git a/drivers/gpu/drm/virtio/virtgpu_debugfs.c b/drivers/gpu/drm/virtio/virtgpu_debugfs.c index 5156e6b279db..e27120d512b0 100644 --- a/drivers/gpu/drm/virtio/virtgpu_debugfs.c +++ b/drivers/gpu/drm/virtio/virtgpu_debugfs.c @@ -47,6 +47,7 @@ static int virtio_gpu_features(struct seq_file *m, void *data) virtio_add_bool(m, "virgl", vgdev->has_virgl_3d); virtio_add_bool(m, "edid", vgdev->has_edid); + virtio_add_bool(m, "indirect", vgdev->has_indirect); virtio_add_int(m, "cap sets", vgdev->num_capsets); virtio_add_int(m, "scanouts", vgdev->num_scanouts); return 0; diff --git a/drivers/gpu/drm/virtio/virtgpu_kms.c b/drivers/gpu/drm/virtio/virtgpu_kms.c index 2f5773e43557..c1086df49816 100644 --- a/drivers/gpu/drm/virtio/virtgpu_kms.c +++ b/drivers/gpu/drm/virtio/virtgpu_kms.c @@ -159,6 +159,9 @@ int virtio_gpu_init(struct drm_device *dev) if (virtio_has_feature(vgdev->vdev, VIRTIO_GPU_F_EDID)) { vgdev->has_edid = true; } + if (virtio_has_feature(vgdev->vdev, VIRTIO_RING_F_INDIRECT_DESC)) { + vgdev->has_indirect = true; + } DRM_INFO("features: %cvirgl %cedid\n", vgdev->has_virgl_3d ? '+' : '-', diff --git a/drivers/gpu/drm/virtio/virtgpu_vq.c b/drivers/gpu/drm/virtio/virtgpu_vq.c index 41e475fbd67b..cc02fc4bab2a 100644 --- a/drivers/gpu/drm/virtio/virtgpu_vq.c +++ b/drivers/gpu/drm/virtio/virtgpu_vq.c @@ -330,6 +330,9 @@ static void virtio_gpu_queue_ctrl_sgs(struct virtio_gpu_device *vgdev, bool notify = false; int ret; + if (vgdev->has_indirect) + elemcnt = 1; + again: spin_lock(&vgdev->ctrlq.qlock); -- 2.18.1