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=-15.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=ham 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 67708C4743C for ; Mon, 21 Jun 2021 10:45:24 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 499FA611BD for ; Mon, 21 Jun 2021 10:45:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230175AbhFUKrh (ORCPT ); Mon, 21 Jun 2021 06:47:37 -0400 Received: from foss.arm.com ([217.140.110.172]:60546 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229641AbhFUKrf (ORCPT ); Mon, 21 Jun 2021 06:47:35 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 380ED1FB; Mon, 21 Jun 2021 03:45:21 -0700 (PDT) Received: from [192.168.1.179] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 074AE3F718; Mon, 21 Jun 2021 03:45:19 -0700 (PDT) Subject: Re: [PATCH] drm/panfrost:modify 'break' to 'continue' to traverse the circulation To: Chunyou Tang Cc: tomeu.vizoso@collabora.com, airlied@linux.ie, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, alyssa.rosenzweig@collabora.com, ChunyouTang References: <20210617080414.1940-1-tangchunyou@163.com> <4d289eed-59f2-161a-40d1-2a434a1955c2@arm.com> <20210619110923.00001c64@163.com> From: Steven Price Message-ID: Date: Mon, 21 Jun 2021 11:45:18 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1 MIME-Version: 1.0 In-Reply-To: <20210619110923.00001c64@163.com> Content-Type: text/plain; charset=gb18030 Content-Language: en-GB Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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]); >>> > >