Re: [bug report] remoteproc: k3-r5: Do not allow core1 to power up before core0 via sysfs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello Dan,

On 03/05/24 20:54, Dan Carpenter wrote:
Hello Beleswar Padhi,

Commit 3c8a9066d584 ("remoteproc: k3-r5: Do not allow core1 to power
up before core0 via sysfs") from Apr 30, 2024 (linux-next), leads to
the following Smatch static checker warning:

drivers/remoteproc/ti_k3_r5_remoteproc.c:583 k3_r5_rproc_start()
warn: missing unwind goto?

drivers/remoteproc/ti_k3_r5_remoteproc.c:651 k3_r5_rproc_stop()
warn: missing unwind goto?

drivers/remoteproc/ti_k3_r5_remoteproc.c
      546 static int k3_r5_rproc_start(struct rproc *rproc)
      547 {
      548         struct k3_r5_rproc *kproc = rproc->priv;
      549         struct k3_r5_cluster *cluster = kproc->cluster;
      550         struct device *dev = kproc->dev;
      551         struct k3_r5_core *core0, *core;
      552         u32 boot_addr;
      553         int ret;
      554
      555         ret = k3_r5_rproc_request_mbox(rproc);
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      556         if (ret)
      557                 return ret;
      558
      559         boot_addr = rproc->bootaddr;
      560         /* TODO: add boot_addr sanity checking */
      561         dev_dbg(dev, "booting R5F core using boot addr = 0x%x\n", boot_addr);
      562
      563         /* boot vector need not be programmed for Core1 in LockStep mode */
      564         core = kproc->core;
      565         ret = ti_sci_proc_set_config(core->tsp, boot_addr, 0, 0);
      566         if (ret)
      567                 goto put_mbox;
      568
      569         /* unhalt/run all applicable cores */
      570         if (cluster->mode == CLUSTER_MODE_LOCKSTEP) {
      571                 list_for_each_entry_reverse(core, &cluster->cores, elem) {
      572                         ret = k3_r5_core_run(core);
      573                         if (ret)
      574                                 goto unroll_core_run;
      575                 }
      576         } else {
      577                 /* do not allow core 1 to start before core 0 */
      578                 core0 = list_first_entry(&cluster->cores, struct k3_r5_core,
      579                                          elem);
      580                 if (core != core0 && core0->rproc->state == RPROC_OFFLINE) {
      581                         dev_err(dev, "%s: can not start core 1 before core 0\n",
      582                                 __func__);
--> 583                         return -EPERM;

Is there no clean up on this error path?  I think we need to do a
goto put_mbox at least.

Thank you for pointing out. Apologies for the oversight. I have sent a PATCH addressing this bug.

Link to PATCH:

https://lore.kernel.org/all/20240506141849.1735679-1-b-padhi@xxxxxx/

Regards,
Beleswar


      584                 }
      585
      586                 ret = k3_r5_core_run(core);
      587                 if (ret)
      588                         goto put_mbox;
      589         }
      590
      591         return 0;
      592
      593 unroll_core_run:
      594         list_for_each_entry_continue(core, &cluster->cores, elem) {
      595                 if (k3_r5_core_halt(core))
      596                         dev_warn(core->dev, "core halt back failed\n");
      597         }
      598 put_mbox:
      599         mbox_free_channel(kproc->mbox);
      600         return ret;
      601 }

regards,
dan carpenter





[Index of Archives]     [Linux Sound]     [ALSA Users]     [ALSA Devel]     [Linux Audio Users]     [Linux Media]     [Kernel]     [Photo Sharing]     [Gimp]     [Yosemite News]     [Linux Media]

  Powered by Linux