PM: runtime: Avoid device usage count underflows
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 13 Apr 2022 15:30:32 +0000 (17:30 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 13 Apr 2022 15:30:32 +0000 (17:30 +0200)
commit82586a721595fde2c1bc0dac7deed2fe9d42c106
treed097c447ca632d516bd63b8708584eaec269eb15
parentbd8284e968ecfc7777703cd76eabbbbf9f3ac9ff
PM: runtime: Avoid device usage count underflows

A PM-runtime device usage count underflow is potentially critical,
because it may cause a device to be suspended when it is expected to
be operational.  It is also a programming problem that would be good
to catch and warn about.

For this reason, (1) make rpm_check_suspend_allowed() return an error
when the device usage count is negative to prevent devices from being
suspended in that case, (2) introduce rpm_drop_usage_count() that will
detect device usage count underflows, warn about them and fix them up,
and (3) use it to drop the usage count in a few places instead of
atomic_dec_and_test().

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/base/power/runtime.c