Thread (9 messages) flat view 9 messages, 6 authors, 2022-02-14

Re: 5.17-rc regression: rmi4 clients cannot deal with asynchronous suspend? (was: X1 Carbon touchpad not resumed)

From: Jarkko Nikula <hidden>
Date: 2022-02-08 14:58:05
Also in: linux-i2c, lkml

Hi

On 2/8/22 04:50, Hugh Dickins wrote:
On Mon, 7 Feb 2022, Dmitry Torokhov wrote:
quoted
On Mon, Feb 07, 2022 at 01:41:36PM -0800, Rajat Jain wrote:
quoted
quoted
quoted
quoted
Bisection led to 172d931910e1db800f4e71e8ed92281b6f8c6ee2
("i2c: enable async suspend/resume on i2c client devices")
and reverting that fixes it for me.
Thank you for the report plus bisection and sorry for the regression!
+1, Thanks for the bisection, and apologies for the inconveniences.

The problem here seems to be that for some reason, some devices (all
connected to rmi4 adapter) failed to resume, but only when
asynchronous suspend is enabled (by 172d931910e1):

[   79.221064] rmi4_smbus 6-002c: failed to get SMBus version number!
[   79.265074] rmi4_physical rmi4-00: rmi_driver_reset_handler: Failed
to read current IRQ mask.
[   79.308330] rmi4_f01 rmi4-00.fn01: Failed to restore normal operation: -6.
[   79.308335] rmi4_f01 rmi4-00.fn01: Resume failed with code -6.
[   79.308339] rmi4_physical rmi4-00: Failed to suspend functions: -6
[   79.308342] rmi4_smbus 6-002c: Failed to resume device: -6
[   79.351967] rmi4_physical rmi4-00: Failed to read irqs, code=-6
v5.17-rc3 on Lenovo ThinkPad X1 Carbon 8th don't even suspend due the 
same commit 172d931910e1. Sadly I tested the original patch on other 
machine(s) but not on this one with rmi4 :-(

[   39.957293] PM: suspend entry (s2idle)
[   40.938666] Filesystems sync: 0.980 seconds
[   40.942751] Freezing user space processes ... (elapsed 0.001 seconds) 
done.
[   40.945511] OOM killer disabled.
[   40.946111] Freezing remaining freezable tasks ... (elapsed 0.001 
seconds) done.
[   40.948590] printk: Suspending console(s) (use no_console_suspend to 
debug)
[   40.993123] i801_smbus 0000:00:1f.4: No response
[   40.993218] rmi4_f01 rmi4-00.fn01: Failed to write sleep mode: -6.
[   40.993232] rmi4_f01 rmi4-00.fn01: Suspend failed with code -6.
[   40.993241] rmi4_physical rmi4-00: Failed to suspend functions: -6
[   40.993404] rmi4_smbus 1-002c: Failed to suspend device: -6
[   40.993414] PM: dpm_run_callback(): rmi_smb_suspend+0x0/0x30 
[rmi_smbus] returns -6
[   40.993438] rmi4_smbus 1-002c: PM: failed to suspend async: error -6
[   41.014198] PM: Some devices failed to suspend, or early wake event 
detected
[   41.021544] i801_smbus 0000:00:1f.4: No response
[   41.021612] rmi4_f03 rmi4-00.fn03: rmi_f03_pt_write: Failed to write 
to F03 TX register (-6).
[   41.022189] i801_smbus 0000:00:1f.4: No response
[   41.022230] rmi4_f03 rmi4-00.fn03: rmi_f03_pt_write: Failed to write 
to F03 TX register (-6).
[   41.023480] i801_smbus 0000:00:1f.4: No response
[   41.023542] rmi4_physical rmi4-00: rmi_driver_clear_irq_bits: Failed 
to change enabled interrupts!
[   41.033850] i801_smbus 0000:00:1f.4: No response
[   41.034006] OOM killer enabled.
[   41.035449] i801_smbus 0000:00:1f.4: No response
[   41.035722] Restarting tasks ...
[   41.036705] rmi4_physical rmi4-00: rmi_driver_set_irq_bits: Failed to 
change enabled interrupts!
[   41.038367] done.
[   41.039003] psmouse: probe of serio2 failed with error -1
[   41.071700] PM: suspend exit
quoted
I wonder if we could apply a little bit more targeted patch:
diff --git a/drivers/input/rmi4/rmi_smbus.c b/drivers/input/rmi4/rmi_smbus.c
index 2407ea43de59..3901d06d38ca 100644
--- a/drivers/input/rmi4/rmi_smbus.c
+++ b/drivers/input/rmi4/rmi_smbus.c
@@ -335,6 +335,7 @@ static int rmi_smb_probe(struct i2c_client *client,
  		return error;
  	}
  
+	device_disable_async_suspend(&client->dev);
  	return 0;
  }
  
... and if that works then we cant try to establish proper dependencies
via device links later.

Hugh, could you please try this out and see if it helps?
Yes, that works nicely, thanks Dmitry.
Gladly fixes the issue on ThinkPad X1 Carbon 8th too:

Tested-by: Jarkko Nikula <redacted>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help