Skip to content

Commit 0eb4ff6

Browse files
jhovoldgregkh
authored andcommitted
slimbus: core: fix runtime PM imbalance on report present
Make sure to balance the runtime PM usage count in case slimbus device or address allocation fails on report present, which would otherwise prevent the controller from suspending. Fixes: 4b14e62 ("slimbus: Add support for 'clock-pause' feature") Cc: stable@vger.kernel.org # 4.16 Signed-off-by: Johan Hovold <johan@kernel.org> Link: https://patch.msgid.link/20251126145329.5022-3-johan@kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 0b52eda commit 0eb4ff6

1 file changed

Lines changed: 9 additions & 7 deletions

File tree

drivers/slimbus/core.c

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -489,21 +489,23 @@ int slim_device_report_present(struct slim_controller *ctrl,
489489
if (ctrl->sched.clk_state != SLIM_CLK_ACTIVE) {
490490
dev_err(ctrl->dev, "slim ctrl not active,state:%d, ret:%d\n",
491491
ctrl->sched.clk_state, ret);
492-
goto slimbus_not_active;
492+
goto out_put_rpm;
493493
}
494494

495495
sbdev = slim_get_device(ctrl, e_addr);
496-
if (IS_ERR(sbdev))
497-
return -ENODEV;
496+
if (IS_ERR(sbdev)) {
497+
ret = -ENODEV;
498+
goto out_put_rpm;
499+
}
498500

499501
if (sbdev->is_laddr_valid) {
500502
*laddr = sbdev->laddr;
501-
return 0;
503+
ret = 0;
504+
} else {
505+
ret = slim_device_alloc_laddr(sbdev, true);
502506
}
503507

504-
ret = slim_device_alloc_laddr(sbdev, true);
505-
506-
slimbus_not_active:
508+
out_put_rpm:
507509
pm_runtime_mark_last_busy(ctrl->dev);
508510
pm_runtime_put_autosuspend(ctrl->dev);
509511
return ret;

0 commit comments

Comments
 (0)