Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 076395ca authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Rafael J. Wysocki
Browse files

PM / Domains: Propagate start and restore errors during runtime resume



During runtime resume the return values of the start and restore steps
are ignored. As a result drivers are not notified of runtime resume
failures and can't propagate them up. Fix it by returning an error if
either the start or restore step fails, and clean up properly in the
error path.

Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Acked-by: default avatarKevin Hilman <khilman@baylibre.com>
Acked-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 0ba554e4
Loading
Loading
Loading
Loading
+18 −2
Original line number Diff line number Diff line
@@ -487,8 +487,13 @@ static int pm_genpd_runtime_resume(struct device *dev)
	if (timed && runtime_pm)
		time_start = ktime_get();

	genpd_start_dev(genpd, dev);
	genpd_restore_dev(genpd, dev);
	ret = genpd_start_dev(genpd, dev);
	if (ret)
		goto err_poweroff;

	ret = genpd_restore_dev(genpd, dev);
	if (ret)
		goto err_stop;

	/* Update resume latency value if the measured time exceeds it. */
	if (timed && runtime_pm) {
@@ -503,6 +508,17 @@ static int pm_genpd_runtime_resume(struct device *dev)
	}

	return 0;

err_stop:
	genpd_stop_dev(genpd, dev);
err_poweroff:
	if (!dev->power.irq_safe) {
		mutex_lock(&genpd->lock);
		genpd_poweroff(genpd, 0);
		mutex_unlock(&genpd->lock);
	}

	return ret;
}

static bool pd_ignore_unused;