From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-14.2 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_2 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7E2C4C4743C for ; Tue, 22 Jun 2021 01:47:29 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 56F1E611C1 for ; Tue, 22 Jun 2021 01:47:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230433AbhFVBtm (ORCPT ); Mon, 21 Jun 2021 21:49:42 -0400 Received: from m12-13.163.com ([220.181.12.13]:57871 "EHLO m12-13.163.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229663AbhFVBtk (ORCPT ); Mon, 21 Jun 2021 21:49:40 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=Date:From:Subject:Message-ID:MIME-Version; bh=9Q6ls poD2ETFi68K/VjbQNPwU6gZk0VWJ8lasQA1a0A=; b=bftKK8avXOGJmE6frsYPa e6hf3Io55uWN4ePX/hSLgmyg6lQGYgwWHmfzQ4ot8XhLzh04tJSoOjftE7qlFHHo /sQrQugi8ImmIP/StyHiAYlSI6/Nzl3z2rb7hVzcHckcta3orRpjpEBmJ9m3+2qa cUkyCmlI//CmS0ZAm8K/EU= Received: from localhost (unknown [218.17.89.111]) by smtp9 (Coremail) with SMTP id DcCowACHwLRdPdFgb61RHg--.9664S2; Tue, 22 Jun 2021 09:31:11 +0800 (CST) Date: Tue, 22 Jun 2021 09:31:09 +0800 From: Chunyou Tang To: Steven Price Cc: tomeu.vizoso@collabora.com, airlied@linux.ie, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, alyssa.rosenzweig@collabora.com, ChunyouTang Subject: Re: [PATCH] drm/panfrost:modify 'break' to 'continue' to traverse the circulation Message-ID: <20210622093109.00005e08@163.com> In-Reply-To: References: <20210617080414.1940-1-tangchunyou@163.com> <4d289eed-59f2-161a-40d1-2a434a1955c2@arm.com> <20210619110923.00001c64@163.com> Organization: icube X-Mailer: Claws Mail 3.10.1 (GTK+ 2.16.6; i586-pc-mingw32msvc) MIME-Version: 1.0 Content-Type: text/plain; charset=GB18030 Content-Transfer-Encoding: 8bit X-CM-TRANSID: DcCowACHwLRdPdFgb61RHg--.9664S2 X-Coremail-Antispam: 1Uf129KBjvJXoWxXry3ZFW8KryDJw1DXr15XFb_yoWrXF1UpF WUGF1YyrW8X3Wrt3929a4IkF1jv3y0qry5WF98AwsxZrsIqF1DXF48C3W8ur98uF45KF48 twnrKasru340ywUanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07jNa9-UUUUU= X-Originating-IP: [218.17.89.111] X-CM-SenderInfo: 5wdqwu5kxq50rx6rljoofrz/xtbBRQC5UVPAMmUbqwAAsZ Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Steve, I make a mistake about the code branch,I will test it later, thinks for your reply. Chunyou ÓÚ Mon, 21 Jun 2021 11:45:18 +0100 Steven Price дµÀ: > On 19/06/2021 04:09, Chunyou Tang wrote: > > Hi Steve, > > 1, > > from > > https://lore.kernel.org/lkml/31644881-134a-2d6e-dddf-e658a3a8176b@arm.com/ > > I can see what your sent,I used a wrong email address,Now it > > correct. 2, > >>> Unless I'm mistaken the situation where some mappings may be NULL > >>> is caused by the loop in panfrost_lookup_bos() not completing > >>> successfully > >>> (panfrost_gem_mapping_get() returning NULL). In this case if > >>> mappings[i] > >>> is NULL then all following mappings must also be NULL. So 'break' > >>> allows > >>> us to skip the later ones. Admittedly the performance here isn't > >>> important so I'm not sure it's worth the optimisation, but AIUI > >>> this code isn't actually wrong. > > > > from panfrost_lookup_bos(),you can see: > > for (i = 0; i < job->bo_count; i++) { > > struct panfrost_gem_mapping *mapping; > > > > bo = to_panfrost_bo(job->bos[i]); > > ICUBE_DEBUG_PRINTK("panfrost bo gem handle=0x%x > > is_dumb=%d\n", bo->gem_handle, bo->is_dumb); > > if (!bo->is_dumb) { > > mapping = panfrost_gem_mapping_get(bo, priv); > > if (!mapping) { > > ret = -EINVAL; > > break; > > } > > > > atomic_inc(&bo->gpu_usecount); > > job->mappings[i] = mapping; > > } else { > > atomic_inc(&bo->gpu_usecount); > > job->mappings[i] = NULL; > > } > > } > > This code isn't upstream - in drm-misc/drm-misc-next (and all mainline > kernels from what I can tell) this doesn't have any "is_dumb" test. > Which branch are you using? > > > if bo->is_dumb is TRUE,the job->mappings[i] will set to NULL,and the > > while will be continue,so if job->mappings[i] is NULL,the following > > can not be NULL. > > I agree that with the above code the panfrost_job_cleanup() would need > changing. But we don't (currently) have this code upstream, so this > change doesn't make sense upstream. > > Thanks, > > Steve > > > 3, > > I've had this problem in our project,the value of is_dumb like > > these: 0 > > 0 > > 0 > > 1 > > 0 > > 0 > > 0 > > so,when job->mappings[i] is NULL,we can not break the while in > > panfrost_job_cleanup(). > > > > thanks > > Chunyou > > > > ÓÚ Fri, 18 Jun 2021 13:43:25 +0100 > > Steven Price дµÀ: > > > >> On 17/06/2021 09:04, ChunyouTang wrote: > >>> From: ChunyouTang > >>> > >>> The 'break' can cause 'Memory manager not clean during takedown' > >>> > >>> It cannot use break to finish the circulation,it should use > >>> > >>> continue to traverse the circulation.it should put every mapping > >>> > >>> which is not NULL. > >> > >> You don't appear to have answered my question about whether you've > >> actually seen this happen (and ideally what circumstances). In my > >> previous email[1] I explained why I don't think this is needed. You > >> need to convince me that I've overlooked something. > >> > >> Thanks, > >> > >> Steve > >> > >> [1] > >> https://lore.kernel.org/r/31644881-134a-2d6e-dddf-e658a3a8176b%40arm.com > >> > >>> Signed-off-by: ChunyouTang > >>> --- > >>> drivers/gpu/drm/panfrost/panfrost_job.c | 2 +- > >>> 1 file changed, 1 insertion(+), 1 deletion(-) > >>> > >>> diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c > >>> b/drivers/gpu/drm/panfrost/panfrost_job.c index > >>> 6003cfeb1322..52bccc1d2d42 100644 --- > >>> a/drivers/gpu/drm/panfrost/panfrost_job.c +++ > >>> b/drivers/gpu/drm/panfrost/panfrost_job.c @@ -281,7 +281,7 @@ > >>> static void panfrost_job_cleanup(struct kref *ref) if > >>> (job->mappings) { for (i = 0; i < job->bo_count; i++) { > >>> if (!job->mappings[i]) > >>> - break; > >>> + continue; > >>> > >>> atomic_dec(&job->mappings[i]->obj->gpu_usecount); > >>> panfrost_gem_mapping_put(job->mappings[i]); > >>> > > > >