Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp265977yba; Mon, 1 Apr 2019 06:08:03 -0700 (PDT) X-Google-Smtp-Source: APXvYqzDabamUNsWDEyIew/83EvfZxySL6Xf+0LqbldE2Qj/p+GiZgnG3USf+zlAU17LtmHOn3Rr X-Received: by 2002:a63:3fc2:: with SMTP id m185mr39240395pga.145.1554124083303; Mon, 01 Apr 2019 06:08:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554124083; cv=none; d=google.com; s=arc-20160816; b=SBDJdHaQLHHODrgoSokP5FujMLZaaM4y0T5iUKyxkA3OhH/F+p5VM7yp9Nb5sXOlfI 9pyFhq0iv8ievvPldJpl2tLHSFlGvnk2eJQjyG5C/zsHZTDTvvUUyAw5nfa7BmpZa57J c4CbVPEU5FFKQSRExa3pHj66Ad+s9FVzjpkUqyRxfoZVftF/A+M6thsmCJtJi475ir+v 6IXETmwu1B63BWQ0zosJf8wj1mqMGRsnNss41UColdvFxd14jJjV5x7kNhJ3cSO5Y8c6 AjC++Dg9sXgPvv63CnTJ/UXjMx0JKihtkfqSnUs8Wwzk6RKYAaQ3r8jUCYu0vSkZJu+z L/QQ== 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=c7nfqyavCOHYwP5bfIj4Lx+eog2sSv/F9dC/tuo3Ysg=; b=obdwpa9LljZqFbYrgB6B18si4IRZ0+qQd2ELbVTTREtXy52/AYNKUB6CTr830h2vt8 1MQTC6yLQXte9CQlyyEjt0kiiPYMhhAGXtsGG1T5bS1Ga1d55zPz7paqQ1UUQkv3sYk3 ePWHS+Qi5ceileDXtV0/JaCQIjUnjJo5Qx1mj2zWg0E179RhCnY+HZD+Zyp0/I1B0An3 4ahv7BymjMkX+VvRBCZLsV1Jtj3bfm/2YNYfFb39ZNuw++633I7r++Rbo+/YKLSx5/5B kf/YWasavFrvCuc0RxZAtuWevnstlrniTOXoAxCRBjjT4vStgTZq314rFrxSWYWL9nHZ TctQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ffwll.ch header.s=google header.b=Mab1bpzC; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x10si6425445plo.422.2019.04.01.06.07.45; Mon, 01 Apr 2019 06:08:03 -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=@ffwll.ch header.s=google header.b=Mab1bpzC; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726834AbfDANHB (ORCPT + 99 others); Mon, 1 Apr 2019 09:07:01 -0400 Received: from mail-it1-f193.google.com ([209.85.166.193]:33185 "EHLO mail-it1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726473AbfDANHB (ORCPT ); Mon, 1 Apr 2019 09:07:01 -0400 Received: by mail-it1-f193.google.com with SMTP id v8so17382222itf.0 for ; Mon, 01 Apr 2019 06:07:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=c7nfqyavCOHYwP5bfIj4Lx+eog2sSv/F9dC/tuo3Ysg=; b=Mab1bpzCeid3WPDcMGc85Hx6aSDmDJ2oRWM5Vn2469/ub/av3WIdBLimt38Jh02V6h d5rLAwo+a+rojnLXmCp0JF4QCabTHbMq3tygfsQih4PbCLlL6kdyw5fifuNo6M6gRPg6 NBpGHwite2rVfW6KQTjRRpJqPW1w97p676KEc= 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=c7nfqyavCOHYwP5bfIj4Lx+eog2sSv/F9dC/tuo3Ysg=; b=Nr4Rz8brbmg/5bHnXkkz2HwNahgQX7gX4R99hfFIZyeI6t60oKTrHROiVFPe0jjHzg OAMYn7jSPbruV39GbQMBQIUbJkDZtfHs13jUu7hebNOxVMI2TpezIQGTiTL7MYMMMG33 AVLLU+T+hqisuL9ASU4hbs3yksV++gnJMpcvnqSmVPngyeKfRUru9CBoRhpVUEw12dRx Yx7L37UAa2Us0iIpnN+PZvEfsMU20Fs28TpDDGsM8h7mf/+J+AhV9cbg6QnI35b6eg5s PwE+Ly0LvQiFoYP1e1xSeOpy+/9V4RbsLNXib0WGtcXRWX5NHgWh9S3KMHmel9toe6kU XaSA== X-Gm-Message-State: APjAAAU9P65416016bOLIQGOM6zIIxcmDxetTHWquH0H6yRJQf9o5ZMh 4ipHi0HVAgTGbjqaSH4Ce+oNc6r1q3iRDkKwfC2C8g== X-Received: by 2002:a24:3dc7:: with SMTP id n190mr15546962itn.62.1554124019944; Mon, 01 Apr 2019 06:06:59 -0700 (PDT) MIME-Version: 1.0 References: <20190401074730.12241-1-robh@kernel.org> <20190401074730.12241-3-robh@kernel.org> In-Reply-To: <20190401074730.12241-3-robh@kernel.org> From: Daniel Vetter Date: Mon, 1 Apr 2019 15:06:48 +0200 Message-ID: Subject: Re: [PATCH v2 2/3] drm: Add a drm_gem_objects_lookup helper To: Rob Herring Cc: dri-devel , Linux Kernel Mailing List , Linux ARM , Will Deacon , Robin Murphy , Joerg Roedel , "list@263.net:IOMMU DRIVERS , Joerg Roedel ," , Maarten Lankhorst , Maxime Ripard , Sean Paul , David Airlie , Alyssa Rosenzweig , Lyude Paul , Eric Anholt , Neil Armstrong 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 Mon, Apr 1, 2019 at 9:47 AM Rob Herring wrote: > > Similar to the single handle drm_gem_object_lookup(), > drm_gem_objects_lookup() takes an array of handles and returns an array > of GEM objects. > > Cc: Maarten Lankhorst > Cc: Maxime Ripard > Cc: Sean Paul > Cc: David Airlie > Cc: Daniel Vetter > Signed-off-by: Rob Herring > --- > drivers/gpu/drm/drm_gem.c | 46 +++++++++++++++++++++++++++++++-------- > include/drm/drm_gem.h | 2 ++ > 2 files changed, 39 insertions(+), 9 deletions(-) > > diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c > index 388b3742e562..5c9bff45e5e1 100644 > --- a/drivers/gpu/drm/drm_gem.c > +++ b/drivers/gpu/drm/drm_gem.c > @@ -663,6 +663,42 @@ void drm_gem_put_pages(struct drm_gem_object *obj, struct page **pages, > } > EXPORT_SYMBOL(drm_gem_put_pages); > > +/** > + * drm_gem_objects_lookup - look up GEM objects from an array of handles > + * @filp: DRM file private date > + * @handle: pointer to array of userspace handle > + * @count: size of handle array > + * @objs: pointer to array of drm_gem_object pointers > + * > + * Returns: > + * > + * @objs filled in with GEM object pointers. -ENOENT is returned on a lookup > + * failure. 0 is returned on success. Bonus points for adding references between the array and normal lookup functions to guide people around. Also a comment that the buffers need to be released with drm_gem_object_put(). > + */ > +int drm_gem_objects_lookup(struct drm_file *filp, u32 *handle, int count, > + struct drm_gem_object **objs) With a pointer to a pointer I'd expect this function to do the allocation, but it doesn't. Normal pointer is enough to pass an array. Also maybe make the handle pointer const, so it's clear that it's an input parameter. With the bikesheds addressed: Reviewed-by: Daniel Vetter > +{ > + int i, ret = 0; > + struct drm_gem_object *obj; > + > + spin_lock(&filp->table_lock); > + > + for (i = 0; i < count; i++) { > + /* Check if we currently have a reference on the object */ > + obj = idr_find(&filp->object_idr, handle[i]); > + if (!obj) { > + ret = -ENOENT; > + break; > + } > + drm_gem_object_get(obj); > + objs[i] = obj; > + } > + spin_unlock(&filp->table_lock); > + > + return ret; > +} > +EXPORT_SYMBOL(drm_gem_objects_lookup); > + > /** > * drm_gem_object_lookup - look up a GEM object from its handle > * @filp: DRM file private date > @@ -678,15 +714,7 @@ drm_gem_object_lookup(struct drm_file *filp, u32 handle) > { > struct drm_gem_object *obj; > > - spin_lock(&filp->table_lock); > - > - /* Check if we currently have a reference on the object */ > - obj = idr_find(&filp->object_idr, handle); > - if (obj) > - drm_gem_object_get(obj); > - > - spin_unlock(&filp->table_lock); > - > + drm_gem_objects_lookup(filp, &handle, 1, &obj); > return obj; > } > EXPORT_SYMBOL(drm_gem_object_lookup); > diff --git a/include/drm/drm_gem.h b/include/drm/drm_gem.h > index 2955aaab3dca..5404225e0194 100644 > --- a/include/drm/drm_gem.h > +++ b/include/drm/drm_gem.h > @@ -381,6 +381,8 @@ struct page **drm_gem_get_pages(struct drm_gem_object *obj); > void drm_gem_put_pages(struct drm_gem_object *obj, struct page **pages, > bool dirty, bool accessed); > > +int drm_gem_objects_lookup(struct drm_file *filp, u32 *handle, int count, > + struct drm_gem_object **objs); > struct drm_gem_object *drm_gem_object_lookup(struct drm_file *filp, u32 handle); > long drm_gem_reservation_object_wait(struct drm_file *filep, u32 handle, > bool wait_all, unsigned long timeout); > -- > 2.19.1 > -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch