Received: by 2002:a05:6358:d09b:b0:dc:cd0c:909e with SMTP id jc27csp2182086rwb; Wed, 30 Nov 2022 03:33:33 -0800 (PST) X-Google-Smtp-Source: AA0mqf6AKGocRyCl5LCxWdVcFtbgPuKDQq9VWSQwzvyfLk4WPgCFIKri0M0hlVt0wtHO6JQdCNRn X-Received: by 2002:a17:903:31cd:b0:180:be71:6773 with SMTP id v13-20020a17090331cd00b00180be716773mr42327779ple.42.1669808013162; Wed, 30 Nov 2022 03:33:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669808013; cv=none; d=google.com; s=arc-20160816; b=hDDA1BKiyKLUIyQ7RabGdAZkkPzNbEYjQa3ffV/f0rNWs/HeK96s+g/GPxuReZ8YQ4 usvW5i2F8idv6RyiWltoufjT4LFJWPjkkNDIzUiKGGhYjyLrRtr6MmobChLep3n+0vpU aMdy+q/0rnOHSpdBsnlOUtTcTRetqyH/ZO0Uysiw3yg3KCt3w8mQ291DbgS60z8p8k0o UQYaehNRm4xz0jDcsOHR84BQ7b4BWQK/dMTrmaplXyV3vuQaUZYdIoJdi/dXBFW4SLet anBqdSVGwHtzuPjVT4nbKZd0qitiHPdxm7j1XcqmnS8aYuimijAGUv2cw1vxZrMhQ/tx FKBg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:mail-followup-to:message-id:subject:cc:to:from:date :dkim-signature; bh=RuSCu6Sc5O77Oj3wELaaUy6VtrciSxnoo8y2CPFyY+U=; b=P9IRoG9W55sHY9VAxe9WUCwsJi0voGTtXGcqwMGqravevI+kl1eB0hWuZYedQNk3OQ taSY9c20Y2IRNWNymrKZVK+RuNMaTMmtMJ9rM87oQhM0liCBEUMa0PQhmGDEB3HEeyNQ Ndl+V8UWm54AdzoAgBhVwO7lfmuNtqR0UVcBp4eJqBqN4daw/hPj6VXXx/yFvtl8Qgtl /eK6iiJ69JN3K7fM0w+240ynibe12tm7lvdktinAwnVOxrjsM2u9cDDiw+Xa/BBboshy 7GYP4UP14j9n76ACfFEUChH7KfDQEUnJDUUjFhCZ9/58HWE1TQZTMUg33lgtolR+H2Aj Ef6A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ffwll.ch header.s=google header.b=M5OU+Uwm; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id n10-20020a170902d2ca00b00186a4783b53si1093895plc.478.2022.11.30.03.33.22; Wed, 30 Nov 2022 03:33:33 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@ffwll.ch header.s=google header.b=M5OU+Uwm; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234564AbiK3LW3 (ORCPT + 84 others); Wed, 30 Nov 2022 06:22:29 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42892 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234905AbiK3LVj (ORCPT ); Wed, 30 Nov 2022 06:21:39 -0500 Received: from mail-wm1-x333.google.com (mail-wm1-x333.google.com [IPv6:2a00:1450:4864:20::333]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6755077219 for ; Wed, 30 Nov 2022 03:21:23 -0800 (PST) Received: by mail-wm1-x333.google.com with SMTP id t1so12959619wmi.4 for ; Wed, 30 Nov 2022 03:21:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=in-reply-to:content-disposition:mime-version:references :mail-followup-to:message-id:subject:cc:to:from:date:from:to:cc :subject:date:message-id:reply-to; bh=RuSCu6Sc5O77Oj3wELaaUy6VtrciSxnoo8y2CPFyY+U=; b=M5OU+UwmCE1dEQUm9MGdXnRpdzmbCWLfqjalSYP23MuqwTZ9RwFy/pfMOsPhuvK6s3 RiK7JxFxDC/TRdJDjog5UlAx3+QHvvk+4eHlFtUCvbrEYR1WO7WCBR59V08EJk4u9QnO N8B08dkiBlp3ZJc8e7cHv8OxsGRBeXy47Ce3k= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:content-disposition:mime-version:references :mail-followup-to:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=RuSCu6Sc5O77Oj3wELaaUy6VtrciSxnoo8y2CPFyY+U=; b=C3+V7aKC9hRBjJ7qY6421EZ7XQNiPSqA6lLjcOW0DubqTO07Lc+MMpmEYRjIvaYU0u 0vRVSoST2e5/a8m6JKaXEkZDuESpkUTl8fozGHX9cyQAweCzcxwnfsyhPPViwwokf1EG TgcJWWduvTs5lWNHRjwcP0uMd0N75t+4IzlYfL+749n/qnWVDJ9e3+dhzrB1o0nbPON6 lCvmlqRoJDr8aBiKTeq2xbeqQRMFKilhYx29hT1eSmxWVlmUTgX0QpLKISgnLK41dqU/ 7dJQOpHKtTWRwwwCTxKrRA2To8Iy/95LKEkYIlS230vf/jAgT+iRh/ispKaMbBHn494O fubw== X-Gm-Message-State: ANoB5pl0lTOfYFhv1wBbt2afnhgacDJ0HI/QbrUB2DeoTbehvwRB5ewD 1HF1isQLWO+Wy5/eEZZlvXc/kg== X-Received: by 2002:a05:600c:2241:b0:3cf:9ced:dce4 with SMTP id a1-20020a05600c224100b003cf9ceddce4mr43768262wmm.120.1669807281946; Wed, 30 Nov 2022 03:21:21 -0800 (PST) Received: from phenom.ffwll.local (212-51-149-33.fiber7.init7.net. [212.51.149.33]) by smtp.gmail.com with ESMTPSA id f11-20020a05600c154b00b003c6f3e5ba42sm5960234wmg.46.2022.11.30.03.21.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 30 Nov 2022 03:21:21 -0800 (PST) Date: Wed, 30 Nov 2022 12:21:19 +0100 From: Daniel Vetter To: Rob Clark Cc: Guenter Roeck , Rob Clark , open list , stable@vger.kernel.org, Eric Anholt , Noralf =?iso-8859-1?Q?Tr=F8nnes?= , dri-devel@lists.freedesktop.org, Thomas Zimmermann Subject: Re: [2/2] drm/shmem-helper: Avoid vm_open error paths Message-ID: Mail-Followup-To: Rob Clark , Guenter Roeck , Rob Clark , open list , stable@vger.kernel.org, Eric Anholt , Noralf =?iso-8859-1?Q?Tr=F8nnes?= , dri-devel@lists.freedesktop.org, Thomas Zimmermann References: <20221129200242.298120-3-robdclark@gmail.com> <20221129203205.GA2132357@roeck-us.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Operating-System: Linux phenom 5.19.0-2-amd64 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Nov 29, 2022 at 12:47:42PM -0800, Rob Clark wrote: > On Tue, Nov 29, 2022 at 12:32 PM Guenter Roeck wrote: > > > > On Tue, Nov 29, 2022 at 12:02:42PM -0800, Rob Clark wrote: > > > From: Rob Clark > > > > > > vm_open() is not allowed to fail. Fortunately we are guaranteed that > > > the pages are already pinned, and only need to increment the refcnt. So > > > just increment it directly. > > > > I don't know anything about drm or gem, but I am wondering _how_ > > this would be guaranteed. Would it be through the pin function ? > > Just wondering, because that function does not seem to be mandatory. > > We've pinned the pages already in mmap.. vm->open() is perhaps not the > best name for the callback function, but it is called for copying an > existing vma into a new process (and for some other cases which do not > apply here because VM_DONTEXPAND). > > (Other drivers pin pages in the fault handler, where there is actually > potential to return an error, but that change was a bit more like > re-writing shmem helper ;-)) Yhea vm_ops->open should really be called vm_ops->dupe or ->copy or something like that ... -Daniel > > BR, > -R > > > > > > > Fixes: 2194a63a818d ("drm: Add library for shmem backed GEM objects") > > > Cc: stable@vger.kernel.org > > > Signed-off-by: Rob Clark > > > --- > > > drivers/gpu/drm/drm_gem_shmem_helper.c | 14 +++++++++++--- > > > 1 file changed, 11 insertions(+), 3 deletions(-) > > > > > > diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c > > > index 110a9eac2af8..9885ba64127f 100644 > > > --- a/drivers/gpu/drm/drm_gem_shmem_helper.c > > > +++ b/drivers/gpu/drm/drm_gem_shmem_helper.c > > > @@ -571,12 +571,20 @@ static void drm_gem_shmem_vm_open(struct vm_area_struct *vma) > > > { > > > struct drm_gem_object *obj = vma->vm_private_data; > > > struct drm_gem_shmem_object *shmem = to_drm_gem_shmem_obj(obj); > > > - int ret; > > > > > > WARN_ON(shmem->base.import_attach); > > > > > > - ret = drm_gem_shmem_get_pages(shmem); > > > - WARN_ON_ONCE(ret != 0); > > > + mutex_lock(&shmem->pages_lock); > > > + > > > + /* > > > + * We should have already pinned the pages, vm_open() just grabs > > > > should or guaranteed ? This sounds a bit weaker than the commit > > description. > > > > > + * an additional reference for the new mm the vma is getting > > > + * copied into. > > > + */ > > > + WARN_ON_ONCE(!shmem->pages_use_count); > > > + > > > + shmem->pages_use_count++; > > > + mutex_unlock(&shmem->pages_lock); > > > > The previous code, in that situation, would not increment pages_use_count, > > and it would not set not set shmem->pages. Hopefully, it would not try to > > do anything with the pages it was unable to get. The new code assumes that > > shmem->pages is valid even if pages_use_count is 0, while at the same time > > taking into account that this can possibly happen (or the WARN_ON_ONCE > > would not be needed). > > > > Again, I don't know anything about gem and drm, but it seems to me that > > there might now be a severe problem later on if the WARN_ON_ONCE() > > ever triggers. > > > > Thanks, > > Guenter > > > > > > > > drm_gem_vm_open(vma); > > > } -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch