Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp665193yba; Wed, 24 Apr 2019 07:41:50 -0700 (PDT) X-Google-Smtp-Source: APXvYqxqe9YUTwwmQMQeYSGVx9XV9/7V1FDRsERRvxB7yxAHBBfdFOYneD3Dfx3yHM/Jldj6/WCf X-Received: by 2002:a17:902:2ae6:: with SMTP id j93mr33696922plb.18.1556116910845; Wed, 24 Apr 2019 07:41:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1556116910; cv=none; d=google.com; s=arc-20160816; b=RRHN2eUecXtnOZeSTtlmzTvgKJ77XNKEmFZVpa5QY/PqKGC3GZTLnLOBjZpTmqpTiH CnIAyg2XCTe8B02msisAdBfu+W7/1myglpiq0GDFu+ql7LM7LcrnmRow5K6H7imlcOUl OPjIEz/taIGWl8w/1bDvl8aY5HkDhTip7WGa9beNEYLI4RgFAxWLPl0nQeKdGGlIq2Sd cUnLvM7znAeeHoPZsZtWe7PzBzOplmbKuK8f+kMIDFdnTR7AQz8J1T/Et/JiEAQ4QEiF 9aGk/qXLNWn6TMnPhu1JGBmNHD+vxzgQGOaqotNVWb/HMlz4fbvs97zVBXcJCjxX9ZG2 9Qkg== 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; bh=SUjd3I/imgFM0Dl6RAFqvaSeyJDo8VeI6BeroLur4kk=; b=j0hM/Bs0vZDZedZe4/yvITZYaive69IiuQVQcpDAIdmxxCNW1LoqsdXGEKWYvbtquw EpcSICFM9pov539Ec15UX8av2o3pnse3BAUWh4bTU2ZKvfUV8ZB2rmx7QGlaj+qCuaOA wVInG/jdEpQHvb60g50TXn0OaxVR2E+7d1Pt/XYK8MRNeUFI0vTEd1op8cGnGOPnCDcP z9L4N/qHH6xMAXXo0fyvcSIZLlySo97v9eqj7fWXdqG2ykS4nTwZim5/1oTjqTyAvVyj 5GykzuLUQxIZ2QHXat6plB8BBNaYGG9JW7xCyRbaanla762XOkKfZ/9McR2FeybouJUE heWw== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t11si17512190pgu.104.2019.04.24.07.41.35; Wed, 24 Apr 2019 07:41:50 -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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731512AbfDXOin (ORCPT + 99 others); Wed, 24 Apr 2019 10:38:43 -0400 Received: from mail-io1-f67.google.com ([209.85.166.67]:39384 "EHLO mail-io1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731062AbfDXOim (ORCPT ); Wed, 24 Apr 2019 10:38:42 -0400 Received: by mail-io1-f67.google.com with SMTP id c3so8515537iok.6 for ; Wed, 24 Apr 2019 07:38:42 -0700 (PDT) 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=SUjd3I/imgFM0Dl6RAFqvaSeyJDo8VeI6BeroLur4kk=; b=SyS8wuG5JD26GZ3UYfPINk5SUX+UeXk/sq2Sd2Ls5yJVAisNpFXBob0ceRpbju7Ajq OVr4ULooJHWNus9l8SSj33XWNOgokDpNzjpLI7JH3OiSHSkQNQ1Smi0xl6Ij9hz0vvhE buhxatYAeRW/waJlsptwuWn0Cpd2kvmx2Phj0CgCRDIIgthWTFTQpsKcQOKbbLRSnvar wvzl8sz1GRqUkbdgfo+IC+I+uSez0//3Awfmw5WmHPaKQpeKcOZMmrt38WiacI6i0HD9 Verd3K+LhCHH1GhErSodhlcfm947d0ONvRG0g/FJV0PHz1jgc/S2UUIHE0MPHop4J4HJ T0NA== X-Gm-Message-State: APjAAAU2msEyxiqqvagIiVRSZ5RdfzRi4drc8agVpmAj74rMo8HJ7MnM ViQpbQwybSAwsblEV/ApO8BBTGRNSlcAQqh6q58= X-Received: by 2002:a5d:984a:: with SMTP id p10mr21448918ios.217.1556116721514; Wed, 24 Apr 2019 07:38:41 -0700 (PDT) MIME-Version: 1.0 References: <20190424131355.62817-1-tomeu.vizoso@collabora.com> <20190424132019.GS9857@phenom.ffwll.local> In-Reply-To: <20190424132019.GS9857@phenom.ffwll.local> From: Tomeu Vizoso Date: Wed, 24 Apr 2019 16:38:29 +0200 Message-ID: Subject: Re: [PATCH] drm/panfrost: Add sanity checks to submit IOCTL To: Tomeu Vizoso , open list , Rob Herring , David Airlie , dri-devel Cc: Daniel Vetter 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, 24 Apr 2019 at 15:20, Daniel Vetter wrote: > > On Wed, Apr 24, 2019 at 03:13:53PM +0200, Tomeu Vizoso wrote: > > So userspace can get feedback on any error conditions, instead of going > > ahead and things breaking later. > > > > Signed-off-by: Tomeu Vizoso > > Bonus: some igts to exercise these corner cases. It helps a lot with uapi > review and testing. I'm rebasing that igt branch as we speak :) Tomeu > -Daniel > > > --- > > drivers/gpu/drm/panfrost/panfrost_drv.c | 35 +++++++++++++++++-------- > > 1 file changed, 24 insertions(+), 11 deletions(-) > > > > diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c > > index c06af78ab833..0f2863cb8077 100644 > > --- a/drivers/gpu/drm/panfrost/panfrost_drv.c > > +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c > > @@ -172,13 +172,27 @@ static int panfrost_ioctl_submit(struct drm_device *dev, void *data, > > { > > struct panfrost_device *pfdev = dev->dev_private; > > struct drm_panfrost_submit *args = data; > > - struct drm_syncobj *sync_out; > > + struct drm_syncobj *sync_out = NULL; > > struct panfrost_job *job; > > int ret = 0; > > > > + if (!args->jc) > > + return -EINVAL; > > + > > + if (args->requirements && args->requirements != PANFROST_JD_REQ_FS) > > + return -EINVAL; > > + > > + if (args->out_sync > 0) { > > + sync_out = drm_syncobj_find(file, args->out_sync); > > + if (!sync_out) > > + return -ENODEV; > > + } > > + > > job = kzalloc(sizeof(*job), GFP_KERNEL); > > - if (!job) > > - return -ENOMEM; > > + if (!job) { > > + ret = -ENOMEM; > > + goto fail_out_sync; > > + } > > > > kref_init(&job->refcount); > > > > @@ -190,25 +204,24 @@ static int panfrost_ioctl_submit(struct drm_device *dev, void *data, > > > > ret = panfrost_copy_in_sync(dev, file, args, job); > > if (ret) > > - goto fail; > > + goto fail_job; > > > > ret = panfrost_lookup_bos(dev, file, args, job); > > if (ret) > > - goto fail; > > + goto fail_job; > > > > ret = panfrost_job_push(job); > > if (ret) > > - goto fail; > > + goto fail_job; > > > > /* Update the return sync object for the job */ > > - sync_out = drm_syncobj_find(file, args->out_sync); > > - if (sync_out) { > > + if (sync_out) > > drm_syncobj_replace_fence(sync_out, job->render_done_fence); > > - drm_syncobj_put(sync_out); > > - } > > > > -fail: > > +fail_job: > > panfrost_job_put(job); > > +fail_out_sync: > > + drm_syncobj_put(sync_out); > > > > return ret; > > } > > -- > > 2.20.1 > > > > -- > Daniel Vetter > Software Engineer, Intel Corporation > http://blog.ffwll.ch