On Mon, Jul 09, 2018 at 04:49:37PM -0700, Evan Green wrote: > pm_runtime_suspended can return 0 even if the last runtime power > management function called in the device was a suspend call. This > trips up the i2c-qcom-geni's suspend_noirq accounting, which was > trying to use the function to determine if it should disable clocks > or if that had already been done. > > The fix is to track whether or not clocks have been enabled explicitly > in the driver with a new member. While in there, also honor the return > value of geni_se_resources_off, which can technically fail. > > An example of the warning generated during suspend: > [ 68.314733] WARNING: CPU: 0 PID: 1990 at drivers/clk/clk.c:595 clk_core_disable+0x28/0x200 > [ 68.464576] Call trace: > [ 68.554410] [<ffffff80083f0ed0>] clk_core_disable+0x28/0x200 > [ 68.560244] [<ffffff80083f349c>] clk_disable+0x38/0x4c > [ 68.565541] [<ffffff8008408910>] geni_se_resources_off+0x40/0x74 > [ 68.571731] [<ffffff800862aadc>] geni_i2c_runtime_suspend+0x2c/0x3c > [ 68.578185] [<ffffff800862ae6c>] geni_i2c_suspend_noirq+0x38/0x68 > [ 68.584475] [<ffffff800852bd40>] dpm_run_callback+0x104/0x210 > [ 68.590404] [<ffffff800852c3d4>] __device_suspend_noirq+0x158/0x1a8 > [ 68.596859] [<ffffff800852dff0>] dpm_noirq_suspend_devices+0x180/0x38c > [ 68.603594] [<ffffff80080fdebc>] suspend_devices_and_enter+0x49c/0x964 > [ 68.610321] [<ffffff80080fea14>] pm_suspend+0x690/0x6e0 > [ 68.615712] [<ffffff80080fc930>] state_store+0xd4/0xf8 > [ 68.621014] [<ffffff80088a57f0>] kobj_attr_store+0x18/0x28 > [ 68.626672] [<ffffff8008297a54>] sysfs_kf_write+0x5c/0x68 > [ 68.632240] [<ffffff8008296a00>] kernfs_fop_write+0x174/0x1b8 > [ 68.638177] [<ffffff800821a2c4>] __vfs_write+0x58/0x160 > [ 68.643567] [<ffffff800821a5d8>] vfs_write+0xcc/0x184 > [ 68.648780] [<ffffff800821a850>] SyS_write+0x64/0xb4 > > Signed-off-by: Evan Green <evgreen@xxxxxxxxxxxx> Applied to for-next (squashed into the main driver), thanks!
Attachment:
signature.asc
Description: PGP signature