All of lore.kernel.org
 help / color / mirror / Atom feed
From: Boris Brezillon <boris.brezillon@collabora.com>
To: Dan Carpenter <dan.carpenter@linaro.org>
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [bug report] drm/panthor: Call panthor_gpu_coherency_init() after PM resume()
Date: Mon, 14 Apr 2025 09:34:48 +0200	[thread overview]
Message-ID: <20250414093448.64cef724@collabora.com> (raw)
In-Reply-To: <6cb91960-1bb6-43d5-aec3-ed6048e8613e@stanley.mountain>

On Sat, 12 Apr 2025 17:39:58 +0300
Dan Carpenter <dan.carpenter@linaro.org> wrote:

> Hello Boris Brezillon,
> 
> Commit 7d5a3b22f5b5 ("drm/panthor: Call panthor_gpu_coherency_init()
> after PM resume()") from Apr 4, 2025 (linux-next), leads to the
> following Smatch static checker warning:
> 
> 	drivers/gpu/drm/panthor/panthor_device.c:248 panthor_device_init()
> 	warn: missing unwind goto?
> 
> drivers/gpu/drm/panthor/panthor_device.c
>     167 int panthor_device_init(struct panthor_device *ptdev)
>     168 {
>     169         u32 *dummy_page_virt;
>     170         struct resource *res;
>     171         struct page *p;
>     172         int ret;
>     173 
>     174         init_completion(&ptdev->unplug.done);
>     175         ret = drmm_mutex_init(&ptdev->base, &ptdev->unplug.lock);
>     176         if (ret)
>     177                 return ret;
>     178 
>     179         ret = drmm_mutex_init(&ptdev->base, &ptdev->pm.mmio_lock);
>     180         if (ret)
>     181                 return ret;
>     182 
>     183         atomic_set(&ptdev->pm.state, PANTHOR_DEVICE_PM_STATE_SUSPENDED);
>     184         p = alloc_page(GFP_KERNEL | __GFP_ZERO);
>     185         if (!p)
>     186                 return -ENOMEM;
>     187 
>     188         ptdev->pm.dummy_latest_flush = p;
>     189         dummy_page_virt = page_address(p);
>     190         ret = drmm_add_action_or_reset(&ptdev->base, panthor_device_free_page,
>     191                                        ptdev->pm.dummy_latest_flush);
>     192         if (ret)
>     193                 return ret;
>     194 
>     195         /*
>     196          * Set the dummy page holding the latest flush to 1. This will cause the
>     197          * flush to avoided as we know it isn't necessary if the submission
>     198          * happens while the dummy page is mapped. Zero cannot be used because
>     199          * that means 'always flush'.
>     200          */
>     201         *dummy_page_virt = 1;
>     202 
>     203         INIT_WORK(&ptdev->reset.work, panthor_device_reset_work);
>     204         ptdev->reset.wq = alloc_ordered_workqueue("panthor-reset-wq", 0);
>     205         if (!ptdev->reset.wq)
>     206                 return -ENOMEM;
>     207 
>     208         ret = drmm_add_action_or_reset(&ptdev->base, panthor_device_reset_cleanup, NULL);
>     209         if (ret)
>     210                 return ret;
>     211 
>     212         ret = panthor_clk_init(ptdev);
>     213         if (ret)
>     214                 return ret;
>     215 
>     216         ret = panthor_devfreq_init(ptdev);
>     217         if (ret)
>     218                 return ret;
>     219 
>     220         ptdev->iomem = devm_platform_get_and_ioremap_resource(to_platform_device(ptdev->base.dev),
>     221                                                               0, &res);
>     222         if (IS_ERR(ptdev->iomem))
>     223                 return PTR_ERR(ptdev->iomem);
>     224 
>     225         ptdev->phys_addr = res->start;
>     226 
>     227         ret = devm_pm_runtime_enable(ptdev->base.dev);
>     228         if (ret)
>     229                 return ret;
>     230 
>     231         ret = pm_runtime_resume_and_get(ptdev->base.dev);
>     232         if (ret)
>     233                 return ret;
>     234 
>     235         /* If PM is disabled, we need to call panthor_device_resume() manually. */
>     236         if (!IS_ENABLED(CONFIG_PM)) {
>     237                 ret = panthor_device_resume(ptdev->base.dev);
>     238                 if (ret)
>     239                         return ret;
>     240         }
>     241 
>     242         ret = panthor_gpu_init(ptdev);
>     243         if (ret)
>     244                 goto err_rpm_put;
>     245 
>     246         ret = panthor_gpu_coherency_init(ptdev);
>     247         if (ret)
> --> 248                 return ret;  
>                         ^^^^^^^^^^^
> Missing cleanup?

Thanks for the report, it should definitely be

			goto err_unplug_gpu;

Do you plan to send a patch, or should I do it?

> 
>     249 
>     250         ret = panthor_mmu_init(ptdev);
>     251         if (ret)
>     252                 goto err_unplug_gpu;
>     253 
>     254         ret = panthor_fw_init(ptdev);
>     255         if (ret)
>     256                 goto err_unplug_mmu;
>     257 
>     258         ret = panthor_sched_init(ptdev);
>     259         if (ret)
>     260                 goto err_unplug_fw;
>     261 
>     262         /* ~3 frames */
>     263         pm_runtime_set_autosuspend_delay(ptdev->base.dev, 50);
>     264         pm_runtime_use_autosuspend(ptdev->base.dev);
>     265 
>     266         ret = drm_dev_register(&ptdev->base, 0);
>     267         if (ret)
>     268                 goto err_disable_autosuspend;
>     269 
>     270         pm_runtime_put_autosuspend(ptdev->base.dev);
>     271         return 0;
>     272 
>     273 err_disable_autosuspend:
>     274         pm_runtime_dont_use_autosuspend(ptdev->base.dev);
>     275         panthor_sched_unplug(ptdev);
>     276 
>     277 err_unplug_fw:
>     278         panthor_fw_unplug(ptdev);
>     279 
>     280 err_unplug_mmu:
>     281         panthor_mmu_unplug(ptdev);
>     282 
>     283 err_unplug_gpu:
>     284         panthor_gpu_unplug(ptdev);
>     285 
>     286 err_rpm_put:
>     287         pm_runtime_put_sync_suspend(ptdev->base.dev);
>     288         return ret;
>     289 }
> 
> regards,
> dan carpenter


  reply	other threads:[~2025-04-14  7:35 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-12 14:39 [bug report] drm/panthor: Call panthor_gpu_coherency_init() after PM resume() Dan Carpenter
2025-04-14  7:34 ` Boris Brezillon [this message]
2025-04-14  7:51   ` Dan Carpenter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250414093448.64cef724@collabora.com \
    --to=boris.brezillon@collabora.com \
    --cc=dan.carpenter@linaro.org \
    --cc=dri-devel@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.