Received: by 2002:a05:7412:e79e:b0:f3:1519:9f41 with SMTP id o30csp223448rdd; Wed, 22 Nov 2023 14:06:39 -0800 (PST) X-Google-Smtp-Source: AGHT+IGNynCQx15WIQXIbItSWroSbpZzekZq2lyNkyozVyrbrVVa1zhIFgZlkkXL5mnkK6iKhvcf X-Received: by 2002:a05:6808:124c:b0:3b5:66af:f8d6 with SMTP id o12-20020a056808124c00b003b566aff8d6mr4696776oiv.47.1700690799475; Wed, 22 Nov 2023 14:06:39 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700690799; cv=none; d=google.com; s=arc-20160816; b=pOs/BMw2RCcx2olyJ2nP27+CsXME3NrqpA8I4V0AGSElmbubYoThj2Ac1RTVFcSxBw ZsFhps3KKHDbxJeICOLRbb9vn/j32YGFO4Lon8WRpWNgY4EXr8l4Va2k3d5wr6noK8gY ZfpgVJbDzTFlkanrJppdFt5D9TIjVfBBana8S4F2nbUVUEOyYGXsqKmMAuOK9+/SIJ/Y PmrcouHcP777ZjB+z0MkhypNqCMu21PmDt/+yLsWNOp5serJiBDlEz41ZNQi3hSwhCBb eenI4SeSQHOKE1iXeau5sP/GUHIwQxqB2Pe5eOC9iQPB0LJLQTTVoZ1FItQBrOcTUjFf YTjA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:from :references:cc:to:content-language:subject:user-agent:mime-version :date:message-id:dkim-signature; bh=uPSIZv4zqliXgGTTbSv3SSYHgTnGeCZUAXcuT8rGrMY=; fh=TLdaYVTYpkOucWp2gi2TZIRkEiwPxZ330gpwGOOjymo=; b=CYVq15fJponRlOlNNnSZm1gaKR4jSL+MNFT2iDx5Tq77f8t2yJl/3aBpljtz+p83zo 9WXKSG7OsZzegAD9IF6bN4H1sgJo8G2LHVLZ1LvTXx74efgdFrHwC9fkeYRzOrkXCP/5 Pc/FMQ4FWlvH7DGsJCWfS4gewZjhxxzZMu7XtCcg48FnRCSaWudjPrT3nCvC+96o3nCo 2S13qPiESxnfra/q0gkNhp2GZPEEMRqeorvU0S9PE1ZQXztubYdoq67OM6fXnmO67mvX weVqjIYDrJFkWPvr0vZ2TWUiPijFVMEVVmKPCwhIADAFCE1KCKRwLTRLEQ61x4etR07k 3VTQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@collabora.com header.s=mail header.b=PoLRwynF; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=collabora.com Return-Path: Received: from agentk.vger.email (agentk.vger.email. [2620:137:e000::3:2]) by mx.google.com with ESMTPS id a6-20020a63d206000000b005c278ba0fe3si311628pgg.556.2023.11.22.14.06.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Nov 2023 14:06:39 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) client-ip=2620:137:e000::3:2; Authentication-Results: mx.google.com; dkim=pass header.i=@collabora.com header.s=mail header.b=PoLRwynF; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=collabora.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id 85485807617D; Wed, 22 Nov 2023 14:05:15 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344163AbjKVWFI (ORCPT + 99 others); Wed, 22 Nov 2023 17:05:08 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:32774 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232342AbjKVWFI (ORCPT ); Wed, 22 Nov 2023 17:05:08 -0500 Received: from madras.collabora.co.uk (madras.collabora.co.uk [46.235.227.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 332DEB9 for ; Wed, 22 Nov 2023 14:05:04 -0800 (PST) Received: from [10.3.2.161] (zone.collabora.co.uk [167.235.23.81]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: dmitry.osipenko) by madras.collabora.co.uk (Postfix) with ESMTPSA id 31E596607332; Wed, 22 Nov 2023 22:05:01 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1700690702; bh=L8JWdmRbv/qGbL8ayeiLeAZrkbkPXFdz4DgESw6b6mY=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=PoLRwynFFCCpJfEbuu2PfIDTr3NeSI/VBEZmk2geOCk8erfiGRjZQzDXteIWW7X2U RRpdqwk63aslO0l+eOMNNjPQeAlCPXTxb7fM9AHlFal49/0eIyLAaNXPO04JMivZRt O2+7kA8GOTnJvm4QFFmsn2Qk8OeFHzDP2bsbN9FZP+4+GGKpHC9cSTakDFPAfZE3Lx 1AX0Jg/gus++k0WwXx5PiZNLhsIKdy4hzHNXiewyvtGRK13mMbGOADhh2wxckGC843 1IlFYJFMk0ibNkxSUsfHJrif1TLXH2GR2MPHLRa3zr4U6XQPFlDuz8CsTs4IfT5VxZ UnKN8MHEkF+0g== Message-ID: <26890ba7-5e19-df0c-fce0-26af58e66266@collabora.com> Date: Thu, 23 Nov 2023 01:04:56 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 Subject: Re: [PATCH v18 15/26] drm/panfrost: Explicitly get and put drm-shmem pages Content-Language: en-US To: Boris Brezillon Cc: David Airlie , Gerd Hoffmann , Gurchetan Singh , Chia-I Wu , Daniel Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , =?UTF-8?Q?Christian_K=c3=b6nig?= , Qiang Yu , Steven Price , Emma Anholt , Melissa Wen , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, kernel@collabora.com, virtualization@lists.linux-foundation.org References: <20231029230205.93277-1-dmitry.osipenko@collabora.com> <20231029230205.93277-16-dmitry.osipenko@collabora.com> <20231110115354.356c87f7@collabora.com> From: Dmitry Osipenko In-Reply-To: <20231110115354.356c87f7@collabora.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-2.5 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (agentk.vger.email [0.0.0.0]); Wed, 22 Nov 2023 14:05:15 -0800 (PST) On 11/10/23 13:53, Boris Brezillon wrote: > Hm, there was no drm_gem_shmem_get_pages_sgt() call here, why should we > add a drm_gem_shmem_get_pages()? What we should do instead is add a > drm_gem_shmem_get_pages() for each drm_gem_shmem_get_pages_sgt() we > have in the driver (in panfrost_mmu_map()), and add > drm_gem_shmem_put_pages() calls where they are missing > (panfrost_mmu_unmap()). > >> + if (err) >> + goto err_free; >> + } >> + >> return bo; >> + >> +err_free: >> + drm_gem_shmem_free(&bo->base); >> + >> + return ERR_PTR(err); >> } >> >> struct drm_gem_object * >> diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.c b/drivers/gpu/drm/panfrost/panfrost_mmu.c >> index 770dab1942c2..ac145a98377b 100644 >> --- a/drivers/gpu/drm/panfrost/panfrost_mmu.c >> +++ b/drivers/gpu/drm/panfrost/panfrost_mmu.c >> @@ -504,7 +504,7 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_device *pfdev, int as, >> if (IS_ERR(pages[i])) { >> ret = PTR_ERR(pages[i]); >> pages[i] = NULL; >> - goto err_pages; >> + goto err_unlock; >> } >> } >> >> @@ -512,7 +512,7 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_device *pfdev, int as, >> ret = sg_alloc_table_from_pages(sgt, pages + page_offset, >> NUM_FAULT_PAGES, 0, SZ_2M, GFP_KERNEL); >> if (ret) >> - goto err_pages; >> + goto err_unlock; > Feels like the panfrost_gem_mapping object should hold a ref on the BO > pages, not the BO itself, because, ultimately, the user of the BO is > the GPU. This matches what I was saying about moving get/put_pages() to > panfrost_mmu_map/unmap(): everytime a panfrost_gem_mapping becomes > active, to want to take a pages ref, every time it becomes inactive, > you should release the pages ref. The panfrost_mmu_unmap() is also used by shrinker when BO is purged. I'm unhappy with how icky it all becomes if unmap is made to put pages. Previously map() was implicitly allocating pages with get_sgt() and then pages were implicitly released by drm_gem_shmem_free(). A non-heap BO is mapped when it's created by Panfrost, hence the actual lifetime of pages is kept unchanged by this patch. The implicit allocation is turned into explicit one, i.e. pages are explicitly allocated before BO is mapped. -- Best regards, Dmitry