Received: by 2002:a25:f815:0:0:0:0:0 with SMTP id u21csp1388578ybd; Wed, 26 Jun 2019 16:57:15 -0700 (PDT) X-Google-Smtp-Source: APXvYqwndXa8yDo3t7ot8NbWes4QofeN+0WjTgWmi/a5JM16w/pZl1cof/86dn5t6HnqRoBGE8To X-Received: by 2002:a63:f4e:: with SMTP id 14mr678919pgp.58.1561593435228; Wed, 26 Jun 2019 16:57:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1561593435; cv=none; d=google.com; s=arc-20160816; b=NUoYt5PV73l7Sa14SwdR0ceslDwm9jVWX89H58vfaomNOBW7JPOvoR7ThxqJC9KGvs QsAOJ2+vLctmhJYjeIabmSptM41nFZaMu+dG+UG+rYIyic3CBWCUtuAxCLvgZNai38Pc JnjtXsA1LjWzjuSB9vmiFo8vNmMn/qbsCfg6Tn7pV2GCTQrqFI5KHcK7jW9d31kr1T5b u3UN1AkFT9J1FDWnxDoSZijHOxxGwDHgg6HPUJ+UkWCNX4/IiV52Kro1I24/FCWJFNVS +jtoauI83ZeE2HmHRurZVw4WRKkr2qKQRblmO4RiDoon7ZmN2D8S84QFBb9NXn7PyuXH I2Tg== 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=WFOmBfL98emh/MYkHT7m04HAElQFNQEeVW5ROqlJL+Y=; b=XfXRwxeDGIHOLTLucp456UuSZMu61QeZbD/m8XXW1ub3514WbXj8SbqQjDhsHX81qU 5zfZe52MAr0DQbkZolNxrF8BGQRY8L+BmWlrHHSl4v1MtuUUKcJI/wqzZVMLc5a/AQ2K /K9ijl042uMZ+M51883TBHkAfZ0kLcpjw6Bi9JXw3vU1wQ86JccakeCazQz+j+GUGVSM y398COKBN4catBBezXleLM5YxTHMDTT3QlHFvrLZyRVho5ae1e4y0QIeiTNGbV46saeo 2ZN1OygzSVluAbCXCdYomx3FemtT81t7XKVoZxPZCCDKtmCbJfjS41UqporQzkoK8lAH A3uA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=WkdsB900; 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 d3si437178pgv.492.2019.06.26.16.56.58; Wed, 26 Jun 2019 16:57:15 -0700 (PDT) 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=WkdsB900; 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 S1726706AbfFZXzd (ORCPT + 99 others); Wed, 26 Jun 2019 19:55:33 -0400 Received: from mail-io1-f68.google.com ([209.85.166.68]:45001 "EHLO mail-io1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726606AbfFZXzd (ORCPT ); Wed, 26 Jun 2019 19:55:33 -0400 Received: by mail-io1-f68.google.com with SMTP id s7so642478iob.11 for ; Wed, 26 Jun 2019 16:55:33 -0700 (PDT) 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=WFOmBfL98emh/MYkHT7m04HAElQFNQEeVW5ROqlJL+Y=; b=WkdsB90003wZlIbZPOM6yLKQ8fZBLPGqZD10BWCj96jgkU45YwHT5zGBlN5RrS2PjH pieBPX2NOzAKAgDARKZwvKO71cNZl1UlkkjYQCJ8lj0+qHwNg2VtG2cJECKc5bjHTmwr Dg2ykRz1tGxTbqn45qfr393V2c2KX0AW7GsXwEdu8Q6I8bmrjyz6wikBj4K0vP3QtNDL jZOKCHdQbEhllLoUcNHcFkD+UjcVIANEc6MnGoYQIwF0nMdBe1+OFnWXoxpXl1QQf8x0 Qi/y2bncdtk52+xsoJb4kKI+4BKc8ZN8XP0Ag9T+uKf8XV9Lhwtg4+3bygxI5ufL+jnq +uUQ== 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=WFOmBfL98emh/MYkHT7m04HAElQFNQEeVW5ROqlJL+Y=; b=lMWUt3A1+xLCNtwfz2H8bHzHvbBAr6ujqro8HbZh5eiLLJTrJNTxPjKSKJhxq5tc7K DH4R5FNLDgWryTNJfPl8ezzfRuGP7cjY+SUGSga5zWgmYeu9TShAOzJ/98XWoMsiGH9n zwVpQ+ID3YZiqHq06BvGryV/m5U7Rd0B7ZTFm6LCIFZNngh5m+pnakuoBsKYy9Xu9BLm Vg91ofNUjWtisbgUgHo7Db3gyznKPneHTn+pRb7+tl9/D8/c3KJGwu2VXW2b8D6Ks84K HClvDdsdmElyLFvb+okafGT1Mc7PeVg6gE8sXUE1r6dT2m5ioGYnDaiXhL+KgaiYIw1O aYIQ== X-Gm-Message-State: APjAAAXEYSiOrUSMqlGXCvFK5TOYibIi0ynlpdrhDnec+5cHay3mNHZo 3tC9TdKKjWauU7RURQSiFsJoC12JM1/MXPhMvOs= X-Received: by 2002:a02:b10b:: with SMTP id r11mr836507jah.140.1561593331304; Wed, 26 Jun 2019 16:55:31 -0700 (PDT) MIME-Version: 1.0 References: <20190620060726.926-1-kraxel@redhat.com> <20190620060726.926-3-kraxel@redhat.com> In-Reply-To: <20190620060726.926-3-kraxel@redhat.com> From: Chia-I Wu Date: Wed, 26 Jun 2019 16:55:20 -0700 Message-ID: Subject: Re: [PATCH v4 02/12] drm/virtio: switch virtio_gpu_wait_ioctl() to gem helper. To: Gerd Hoffmann Cc: ML dri-devel , David Airlie , open list , "open list:VIRTIO GPU DRIVER" 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 Wed, Jun 19, 2019 at 11:07 PM Gerd Hoffmann wrote: > > Use drm_gem_reservation_object_wait() in virtio_gpu_wait_ioctl(). > This also makes the ioctl run lockless. The userspace has a BO cache to avoid freeing BOs immediately but to reuse them on next allocations. The BO cache checks if a BO is busy before reuse, and I am seeing a big negative perf impact because of slow virtio_gpu_wait_ioctl. I wonder if this helps. > > v2: use reservation_object_test_signaled_rcu for VIRTGPU_WAIT_NOWAIT. > > Signed-off-by: Gerd Hoffmann > Reviewed-by: Daniel Vetter > --- > drivers/gpu/drm/virtio/virtgpu_ioctl.c | 24 ++++++++++-------------- > 1 file changed, 10 insertions(+), 14 deletions(-) > > diff --git a/drivers/gpu/drm/virtio/virtgpu_ioctl.c b/drivers/gpu/drm/virtio/virtgpu_ioctl.c > index ac60be9b5c19..313c770ea2c5 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_ioctl.c > +++ b/drivers/gpu/drm/virtio/virtgpu_ioctl.c > @@ -464,23 +464,19 @@ static int virtio_gpu_wait_ioctl(struct drm_device *dev, void *data, > struct drm_file *file) > { > struct drm_virtgpu_3d_wait *args = data; > - struct drm_gem_object *gobj = NULL; > - struct virtio_gpu_object *qobj = NULL; > + struct drm_gem_object *obj; > + long timeout = 15 * HZ; > int ret; > - bool nowait = false; > > - gobj = drm_gem_object_lookup(file, args->handle); > - if (gobj == NULL) > - return -ENOENT; > + if (args->flags & VIRTGPU_WAIT_NOWAIT) { > + obj = drm_gem_object_lookup(file, args->handle); Don't we need a NULL check here? > + ret = reservation_object_test_signaled_rcu(obj->resv, true); > + drm_gem_object_put_unlocked(obj); > + return ret ? 0 : -EBUSY; > + } > > - qobj = gem_to_virtio_gpu_obj(gobj); > - > - if (args->flags & VIRTGPU_WAIT_NOWAIT) > - nowait = true; > - ret = virtio_gpu_object_wait(qobj, nowait); > - > - drm_gem_object_put_unlocked(gobj); > - return ret; > + return drm_gem_reservation_object_wait(file, args->handle, > + true, timeout); > } > > static int virtio_gpu_get_caps_ioctl(struct drm_device *dev, > -- > 2.18.1 > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel