Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp1827492ybv; Thu, 6 Feb 2020 10:29:42 -0800 (PST) X-Google-Smtp-Source: APXvYqycBTEFlaybw1fXghOJvGLDExlk42e+o+Hs0Y9mCT4yIm3sj6W+Ko149HHcpkNs+x+GHDe2 X-Received: by 2002:a9d:5e82:: with SMTP id f2mr19970657otl.240.1581013781957; Thu, 06 Feb 2020 10:29:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1581013781; cv=none; d=google.com; s=arc-20160816; b=KG4fQOIqcgwmlsy0f4g35Y7z1jUtH+KBfN2hp36RA2u9FsSm8FXkfHqDCKoxD6KpZW dOCKEU3svx2nKALfsy36vA7QuFyNoe1Posx85Ig3wrSy8Z62rML+OFiUqKURQ1Qy1Zq/ 40lhWN6SDtGSwVoKzkAYdiciLkBIgewTqs++cEnEM3GCo1d+5GeCFXT653jh/GEA6OCu ihXhPcL2F7IyPv7wcCOegDxUN45nhts1dH0iqTvcagUxvQoJ5wylZHfDq52Bog5Od9wD jfuapRHLl2h/6GLdBjH3WniWZwyB4bnCDKYhatYI6H7OkPiKQXHGJyR45b08KHSh6Bha DFKw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=4HW00T6Osm6WH4TyAw4D1VjVNdK7xc2XqYCF6kdJYx0=; b=q9GYPn1S3GZFR11fpyiniPAJJqN7YEP9qPgtVC0hhIlCYANpOleiO5RleLhQ7Ag3Uc nhluuX1qDivWTXUj/ugPgAuy+XFK6bDJP92DfWo6ePUzfqUGgHYdORIa+wPOlUYjrjjl 8rMyNGBp6rT3rVfoi7Iwo3KDL4/1J1newuF5F33vxQCJrIyuCW5UY9YA/Ve6uSnA1UxH nReROvvFaTaOXa0CXtKzpJNGxA8oFSC4t64BFLVU3TezYZ4a42IK5P+ABrWw8+Az+Eme fkrqZXVGFekdDRBCI/Xy7w9qHleInvQvYn9gfP67FGXokNO4zfKaNsEYefSE7eNBxrq2 FwiA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=p+tk1qgQ; 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=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q126si2653864oia.8.2020.02.06.10.29.29; Thu, 06 Feb 2020 10:29:41 -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=@gmail.com header.s=20161025 header.b=p+tk1qgQ; 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=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727798AbgBFS2I (ORCPT + 99 others); Thu, 6 Feb 2020 13:28:08 -0500 Received: from mail-il1-f195.google.com ([209.85.166.195]:35474 "EHLO mail-il1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726990AbgBFS2I (ORCPT ); Thu, 6 Feb 2020 13:28:08 -0500 Received: by mail-il1-f195.google.com with SMTP id g12so5986742ild.2 for ; Thu, 06 Feb 2020 10:28:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=4HW00T6Osm6WH4TyAw4D1VjVNdK7xc2XqYCF6kdJYx0=; b=p+tk1qgQXb5MKd11ClypwRaVeIVdMZ4K2SD+LwlQ7GOM6fhKhbWva4FwPXvXOTGMWa DGj8rNa/PNMeIRlw+JnrjTPWtpL4lkNNMO0F2m1NFve1Mneh8erKwo0pr9ACTGBf0Vx/ 1tPD/PXcE5bZ+8XAs8F37YkCFMsK7kdgusMnmj/JbLNUbQ2uAbCjEQRNElvlZiM7vAmI hdtGWwONx5WxJtut7/1nJyAgCfCxMcaMSEMFbn8v+wHLLKQ0eL0O9jdW42FJ23ngwG67 KqVjIWWUxrQrCwIXxNmORZcMn8+m2aXsWHSimGL+rqAVaKBGxBqOVapp1JP3jfje4pwJ Iw3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=4HW00T6Osm6WH4TyAw4D1VjVNdK7xc2XqYCF6kdJYx0=; b=d9KnsHmDbICp6Npv108DcYws8hc2km7fpdhXHJdEuq5Mhu5paAoSrAwYkEr4TymPTp eI+vJ81enbtEORGh4anAWvh9lgswMIXVCzd4uclDrm0u89S4PqZ/9S1B77Q2L2IK3WP8 ITdAtNmIOouJ34YLfhtW/sRQnncVSjLrdlgRSGwKWio1jdGDOZMjZruJqbLdfrE1j8Yg ZiKcGjdRu6rC/GG1rIim/EcCQasCzp9uaFHQyMRW63Xf0bYpsALx/e9VdIvLRiSouvMx 84nIy2HCkuQxyzEhh+Pc+SztfDAWW5Y87ZDJ54SbifwWjGkHpGmqYrLNeXUX7nUlCQvR LxSQ== X-Gm-Message-State: APjAAAV8L+fT0FzOKVCfS/oiQF7c4X5h68gTYJOfuoPja57BLYT+nYLj EEhXzDW2L31vERF+uvfKDy9s7mYoYaJ/1HqgLA0= X-Received: by 2002:a5e:df06:: with SMTP id f6mr34797002ioq.84.1581013687236; Thu, 06 Feb 2020 10:28:07 -0800 (PST) MIME-Version: 1.0 References: <20200206111416.31269-1-kraxel@redhat.com> In-Reply-To: <20200206111416.31269-1-kraxel@redhat.com> From: Chia-I Wu Date: Thu, 6 Feb 2020 10:27:56 -0800 Message-ID: Subject: Re: [PATCH] drm/virtio: fix ring free check To: Gerd Hoffmann Cc: ML dri-devel , Gurchetan Singh , David Airlie , Daniel Vetter , "open list:VIRTIO GPU DRIVER" , open list Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Feb 6, 2020 at 3:14 AM Gerd Hoffmann wrote: > > 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_vq.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/virtio/virtgpu_vq.c b/drivers/gpu/drm/virtio/virtgpu_vq.c > index 41e475fbd67b..a2ec09dba530 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_vq.c > +++ b/drivers/gpu/drm/virtio/virtgpu_vq.c > @@ -328,7 +328,8 @@ static void virtio_gpu_queue_ctrl_sgs(struct virtio_gpu_device *vgdev, > { > struct virtqueue *vq = vgdev->ctrlq.vq; > bool notify = false; > - int ret; > + bool indirect; > + int vqcnt, ret; > > again: > spin_lock(&vgdev->ctrlq.qlock); > @@ -341,9 +342,11 @@ static void virtio_gpu_queue_ctrl_sgs(struct virtio_gpu_device *vgdev, > return; > } > > - if (vq->num_free < elemcnt) { > + indirect = virtio_has_feature(vgdev->vdev, VIRTIO_RING_F_INDIRECT_DESC); > + vqcnt = indirect ? 1 : elemcnt; Is the feature dynamic and require the lock held? If not, the result can be cached and the fixup can happen before grabbing the lock if (vgdev->has_indirect_desc) elemcnt = 1; Either way, patch is Reviewed-by: Chia-I Wu > + if (vq->num_free < vqcnt) { > spin_unlock(&vgdev->ctrlq.qlock); > - wait_event(vgdev->ctrlq.ack_queue, vq->num_free >= elemcnt); > + wait_event(vgdev->ctrlq.ack_queue, vq->num_free >= vqcnt); > goto again; > } > > -- > 2.18.1 >