Failure to hibernate on Dell Latitude 7430
Subsystems (3)
cover Failure to hibernate on Dell Latitude 7430
I have a Dell Latitude 7430, and recently whenever I hibernate with systemctl hibernate, the machine would immediately wake.
I bisected it to:
0c4cae1bc00d PM: hibernate: Avoid missing wakeup events during hibernation
However, the underlying problem seems to be that during hibernation, my system gets a 0xcf (power button release) event, and the above change causes it to abort hibernation correctly.
I also noticed that holding the power button down (when it's configured to suspend) causes the system to suspend and then wake upon release, if it's held long enough.
I'm attaching a patch which fixes the problem for me, by skipping the wake on any of the release events. These events are all marked KEY_IGNORE, so think this is a reasonable thing to do.
I'm a little worried about the consequences of doing this unconditionally in intel-hid. Perhaps it should be a quirk?
David McFarland (1):
platform/x86/intel/hid: Don't wake on 5-button releases
drivers/platform/x86/intel/hid.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
Signature · 1 line
2.42.0
PATCH 1/1 platform/x86/intel/hid: Don't wake on 5-button releases
If, for example, the power button is configured to suspend, holding it and releasing it after the machine has suspended, will wake the machine.
Also on some machines, power button release events are sent during hibernation, even if the button wasn't used to hibernate the machine. This causes hibernation to be aborted.
--- drivers/platform/x86/intel/hid.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
drivers/platform/x86/intel/hid.c +7 -1
@@ -504,6 +504,7 @@ static void notify_handler(acpi_handle handle, u32 event, void *context)struct platform_device *device = context;struct intel_hid_priv *priv =dev_get_drvdata (&device->dev);unsigned long long ev_index; +struct key_entry *ke;int err;/*
@@ -545,11 +546,16 @@ static void notify_handler(acpi_handle handle, u32 event, void *context)if (event ==0xc0 || !priv->array)return ; -if (!sparse_keymap_entry_from_scancode (priv->array, event)) { + ke =sparse_keymap_entry_from_scancode (priv->array, event); + +if (!ke) {dev_info (&device->dev,"unknown event 0x%x\n" , event);return ; } +if (ke->type ==KE_IGNORE ) +return ; + wakeup:pm_wakeup_hard_event (&device->dev);
Signature · 1 line
2.42.0
Re: [PATCH 1/1] platform/x86/intel/hid: Don't wake on 5-button releases
[CCing Chris, who authored the culprit; also CCing the platform folks and a few lists]
Quoted 2 lines · David McFarland
If, for example, the power button is configured to suspend, holding it and releasing it after the machine has suspended, will wake the machine.
David, from here is looks like this is stalled for ten days now. Or was there some progress and I just missed it?
Quoted 3 lines
Also on some machines, power button release events are sent during hibernation, even if the button wasn't used to hibernate the machine. This causes hibernation to be aborted.
From the cover letter[1] is sounds a lot like a "Fixes: 0c4cae1bc00d31 ("PM: hibernate: Avoid missing wakeup events during hibernation")" would be appropriate here.
Regarding the patch itself: hopefully this mail will get things moving.
[1]
https://lore.kernel.org/linux-pm/[email protected]/
Ciao, Thorsten (wearing his 'the Linux kernel's regression tracker' hat) --
Everything you wanna know about Linux kernel regression tracking:
https://linux-regtracking.leemhuis.info/about/#tldr
If I did something stupid, please tell me, as explained on that page.
#regzbot poke
Quoted 35 lines
Signed-off-by David McFarland <[email protected]>Quoted 1 line
---
drivers/platform/x86/intel/hid.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)drivers/platform/x86/intel/hid.c +7
-1@@ -504,6 +504,7 @@ static void notify_handler(acpi_handle handle, u32 event, void *context)struct platform_device *device = context;struct intel_hid_priv *priv =dev_get_drvdata (&device->dev);unsigned long long ev_index; +struct key_entry *ke;int err;/* @@ -545,11 +546,16 @@ static void notify_handler(acpi_handle handle, u32 event, void *context)if (event ==0xc0 || !priv->array)return ; -if (!sparse_keymap_entry_from_scancode (priv->array, event)) { + ke =sparse_keymap_entry_from_scancode (priv->array, event); + +if (!ke) {dev_info (&device->dev,"unknown event 0x%x\n" , event);return ; } +if (ke->type ==KE_IGNORE ) +return ; + wakeup:pm_wakeup_hard_event (&device->dev);
Re: [PATCH 1/1] platform/x86/intel/hid: Don't wake on 5-button releases
"Linux regression tracking (Thorsten Leemhuis)"
Quoted 2 lines · <[email protected]> writes:
David, from here is looks like this is stalled for ten days now. Or was there some progress and I just missed it?
No, I've not seen any emails since your last.
Quoted 3 lines
From the cover letter[1] is sounds a lot like a "Fixes:
0c4cae1bc00d31("PM: hibernate: Avoid missing wakeup events during hibernation")" would be appropriate here.
The specific behaviour I encountered (failure to hibernate) started with that commit, but I think it just exposed the underlying behaviour (wake on button release), which probably dates to when the driver was introduced.
I believe it would have been possible to reproduce the other behaviour I mentioned (long hold of button to suspend causes the machine to wake on release), even before 0c4cae1bc00d31.
That's why I left it off, but I'm happy to revise.
Re: [PATCH 1/1] platform/x86/intel/hid: Don't wake on 5-button releases
Quoted 6 lines · David McFarland
"Linux regression tracking (Thorsten Leemhuis)"
Quoted 2 lines · <[email protected]> writes:
David, from here is looks like this is stalled for ten days now. Or was there some progress and I just missed it?
No, I've not seen any emails since your last.
Thx for confirming.
Quoted 8 lines
Quoted 3 lines
From the cover letter[1] is sounds a lot like a "Fixes:
0c4cae1bc00d31("PM: hibernate: Avoid missing wakeup events during hibernation")" would be appropriate here.The specific behaviour I encountered (failure to hibernate) started with that commit, but I think it just exposed the underlying behaviour (wake on button release), which probably dates to when the driver was introduced.
Well, it depends on the maintainer in question (so you might better want to ignore this advice!), but I'd say: mention that in the patch description and add Fixes: tag, to ensure people pick it up when the change that exposed the problem is backported.
This is hinted at in submitting-patches: "This tag also assists the stable kernel team in determining which stable kernel versions should receive your fix.". Maybe that text should mention scenario.
Ciao, Thorsten
Enrik Berkhan
Tested-byRe: [PATCH 1/1] platform/x86/intel/hid: Don't wake on 5-button releases
In reply to Linux regression tracking (Thorsten Leemhuis)-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
Quoted 2 lines · Linux regression tracking (Thorsten Leemhuis)
[CCing Chris, who authored the culprit; also CCing the platform folks and a few lists]
(Intentionally replying to the "wrong" e-mail to get the enlarged recipient list for free ...)
Quoted 8 lines
Regarding the patch itself: hopefully this mail will get things moving.
Quoted 10 lines
Ciao, Thorsten (wearing his 'the Linux kernel's regression tracker' hat)
--
Everything you wanna know about Linux kernel regression tracking:
https://linux-regtracking.leemhuis.info/about/#tldr
If I did something stupid, please tell me, as explained on that page.#regzbot poke
Quoted 1 line
Signed-off-by David McFarland <[email protected]>
Quoted 28 lines
Quoted 28 lines
Quoted 1 line
---
drivers/platform/x86/intel/hid.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)drivers/platform/x86/intel/hid.c +0
-0@@ -504,6 +504,7 @@ static void notify_handler(acpi_handle handle, u32 event, void *context) struct platform_device *device = context;struct
intel_hid_priv*priv = dev_get_drvdata(&device-Quoted 1 line
dev);
unsigned long long
ev_index;drivers/platform/x86/intel/hid.c +1
-0+struct key_entry *ke;int err;
/*drivers/platform/x86/intel/hid.c +0
-0@@ -545,11 +546,16 @@ static void notify_handler(acpi_handle handle, u32 event, void *context) if (event == 0xc0 || !priv->array) return;drivers/platform/x86/intel/hid.c +0
-1- if (!sparse_keymap_entry_from_scancode(priv-Quoted 1 line
array, event)) {
drivers/platform/x86/intel/hid.c +1
-0+ ke = sparse_keymap_entry_from_scancode(priv-Quoted 1 line
array, event);
Quoted 13 lines
Quoted 10 lines
drivers/platform/x86/intel/hid.c +2
-0+ +if (!ke) {
dev_info(&device->dev, "unknown event 0x%x\n", event);
return;
}drivers/platform/x86/intel/hid.c +3
-0+if (ke->type ==KE_IGNORE ) +return ; +Quoted 3 lines
wakeup:
pm_wakeup_hard_event(&device->dev);
-----BEGIN PGP SIGNATURE-----
iQGzBAEBCAAdFiEEbLyQBMI0qAWiF6l31AjqSkbLPKQFAmYK1IQACgkQ1AjqSkbL PKSUXwv/YWiU334Osus+niffw9gN94vCQid6OWuTIbX2zMNIunHmpHouMtfo6dpb 7Qsyaz0sxaUEclRPLf/bSAV8zWromM/4Xoa/DoBq+GPOLle5wTJAlislhZVfDZFX FZ0EfUg+MvThqlJD8yhGNJWGVnSn92hDid7yy5Y/BSWTPCNhRxEsqy+d0pN82EnD 0mqWnpfG28uqK6dtOLnvbiOuWQhgKYerKFYHXw8FLxZV0eKb3+RqBFf6ZdsAjUEC +d7G9Oq4pc9jxZNvOMop+z3Eskd/bD8Wi2aDtR1qcRENMaK0ucevTuOjGL8Gh80c SbgKu2eU/qVlbnVrcaPgpB0CXXza7SYUynw5XWB8jBWOj6w2nxpnQPm5a0Z5aNYw /kLuabhSommEmUIJtoOA2vgO8D0ACfF2n95cNXaJRiOhuag3SRoair50TOzmf09Z 4uco5iaWeIQwEpVFGdy+qh0V18kYclnNMZHC9bhO6heBDLB9Wy/iXDxko9tMXm/v XnfAKKw9
=udJV
-----END PGP SIGNATURE-----
Re: [PATCH 1/1] platform/x86/intel/hid: Don't wake on 5-button releases
In reply to David McFarlandHi David,
Thank you for your patch.
I became aware of this patch because the discussion on the regressions list. Next time for patches to files under drivers/platform/x86/ at a minimum please Cc: [email protected] and preferably also send the patch directly to me and Ilpo as shown by get_maintainer.pl:
[hans@shalem linux]$ scripts/get_maintainer.pl -f drivers/platform/x86/intel/vbtn.c AceLan Kao <[email protected]> (maintainer:INTEL VIRTUAL BUTTON DRIVER) Hans de Goede <[email protected]> (maintainer:X86 PLATFORM DRIVERS) "Ilpo Järvinen" <[email protected]> (maintainer:X86 PLATFORM DRIVERS) [email protected] (open list:INTEL VIRTUAL BUTTON DRIVER) [email protected] (open list)
Please make sure you are sending this to the right people for v2.
Quoted 7 lines · David McFarland
If, for example, the power button is configured to suspend, holding it and releasing it after the machine has suspended, will wake the machine.
Also on some machines, power button release events are sent during hibernation, even if the button wasn't used to hibernate the machine. This causes hibernation to be aborted.
As discussed by Thorsten this needs a fixes tag, to help with backporting it to relevant stable kernels. Also for v2 please don't forget to add Enrik's Tested-by from elsewhere in thread:
Quoted 18 lines
Signed-off-by David McFarland <[email protected]>--- drivers/platform/x86/intel/hid.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)drivers/platform/x86/intel/hid.c +1
-0@@ -504,6 +504,7 @@ static void notify_handler(acpi_handle handle, u32 event, void *context)struct platform_device *device = context;struct intel_hid_priv *priv =dev_get_drvdata (&device->dev);unsigned long long ev_index; +struct key_entry *ke;int err;/*
drivers/platform/x86/intel/hid.c static void notify_handler(acpi_handle handle, u32 event, void *context) · line 550
Quoted 6 lines
drivers/platform/x86/intel/hid.c +2
-1@@ -545,11 +546,16 @@ static void notify_handler(acpi_handle handle, u32 event, void *context)if (event ==0xc0 || !priv->array)return ; -if (!sparse_keymap_entry_from_scancode (priv->array, event)) { + ke =sparse_keymap_entry_from_scancode (priv->array, event); +
I would prefer for there to be no empty line between the "ke =" assignment and the "if (!ke)".
Otherwise the patch looks good to me, so for v3
you can add:
After fixing this + adding the Fixes and Tested-by tags.
Regards,
Hans
Quoted 11 lines
drivers/platform/x86/intel/hid.c +4
-0+if (!ke) {dev_info (&device->dev,"unknown event 0x%x\n" , event);return ; } +if (ke->type ==KE_IGNORE ) +return ; + wakeup:pm_wakeup_hard_event (&device->dev);
PATCH v2 1/1 platform/x86/intel/hid: Don't wake on 5-button releases
If, for example, the power button is configured to suspend, holding it and releasing it after the machine has suspended, will wake the machine.
Also on some machines, power button release events are sent during hibernation, even if the button wasn't used to hibernate the machine. This causes hibernation to be aborted.
---
v2: Added tags and fixed whitespace, as requested by Hans.
drivers/platform/x86/intel/hid.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
drivers/platform/x86/intel/hid.c +6 -1
@@ -504,6 +504,7 @@ static void notify_handler(acpi_handle handle, u32 event, void *context)struct platform_device *device = context;struct intel_hid_priv *priv =dev_get_drvdata (&device->dev);unsigned long long ev_index; +struct key_entry *ke;int err;/*
@@ -545,11 +546,15 @@ static void notify_handler(acpi_handle handle, u32 event, void *context)if (event ==0xc0 || !priv->array)return ; -if (!sparse_keymap_entry_from_scancode (priv->array, event)) { + ke =sparse_keymap_entry_from_scancode (priv->array, event); +if (!ke) {dev_info (&device->dev,"unknown event 0x%x\n" , event);return ; } +if (ke->type ==KE_IGNORE ) +return ; + wakeup:pm_wakeup_hard_event (&device->dev);
Signature · 1 line
2.42.0
Re: [PATCH v2] platform/x86/intel/hid: Don't wake on 5-button releases
Hi,
Quoted 11 lines · David McFarland
If, for example, the power button is configured to suspend, holding it and releasing it after the machine has suspended, will wake the machine.
Also on some machines, power button release events are sent during hibernation, even if the button wasn't used to hibernate the machine. This causes hibernation to be aborted.
Fixes 0c4cae1bc00d ("PM: hibernate: Avoid missing wakeup events during hibernation")Signed-off-by David McFarland <[email protected]>Tested-by Enrik Berkhan <[email protected]>Reviewed-by Hans de Goede <[email protected]>
Thank you, this version looks good to me.
Ilpo, can you pick this up as a bug-fix for the 6.9 cycle please?
Regards,
Hans
Quoted 35 lines
---
v2: Added tags and fixed whitespace, as requested by Hans.drivers/platform/x86/intel/hid.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)drivers/platform/x86/intel/hid.c +6
-1@@ -504,6 +504,7 @@ static void notify_handler(acpi_handle handle, u32 event, void *context)struct platform_device *device = context;struct intel_hid_priv *priv =dev_get_drvdata (&device->dev);unsigned long long ev_index; +struct key_entry *ke;int err;/* @@ -545,11 +546,15 @@ static void notify_handler(acpi_handle handle, u32 event, void *context)if (event ==0xc0 || !priv->array)return ; -if (!sparse_keymap_entry_from_scancode (priv->array, event)) { + ke =sparse_keymap_entry_from_scancode (priv->array, event); +if (!ke) {dev_info (&device->dev,"unknown event 0x%x\n" , event);return ; } +if (ke->type ==KE_IGNORE ) +return ; + wakeup:pm_wakeup_hard_event (&device->dev);
Ilpo Järvinen
maintainerRe: [PATCH v2] platform/x86/intel/hid: Don't wake on 5-button releases
In reply to David McFarlandQuoted 8 lines · David McFarland
If, for example, the power button is configured to suspend, holding it and releasing it after the machine has suspended, will wake the machine.
Also on some machines, power button release events are sent during hibernation, even if the button wasn't used to hibernate the machine. This causes hibernation to be aborted.
[...]
Thank you for your contribution, it has been applied to my local review-ilpo branch. Note it will show up in the public platform-drivers-x86/review-ilpo branch only once I've pushed my local branch there, which might take a while.
The list of commits applied:
[1/1] platform/x86/intel/hid: Don't wake on 5-button releases
commit: 5864e479ca4344f3a5df8074524da24c960f440b
--
i.
Quoted 2 lines · David McFarland
I have a Dell Latitude 7430, and recently whenever I hibernate with
systemctl hibernate, the machine would immediately wake.
Thanks for the report and the proposed patch.
Quoted 3 lines
I bisected it to:
0c4cae1bc00dPM: hibernate: Avoid missing wakeup events during hibernation
I CCed the author of that change, which should at least be aware of this any maybe help out.
Also CCed the people that take care of the code your patch modifies, they should be the best to judge what should be done here.
FWIW, the start of the thread and the proposed patch can be found here:
https://lore.kernel.org/all/[email protected]/
Ciao, Thorsten
Quoted 12 lines
However, the underlying problem seems to be that during hibernation, my system gets a
0xcf(power button release) event, and the above change causes it to abort hibernation correctly.I also noticed that holding the power button down (when it's configured to suspend) causes the system to suspend and then wake upon release, if it's held long enough.
I'm attaching a patch which fixes the problem for me, by skipping the wake on any of the release events. These events are all marked
KEY_IGNORE, so think this is a reasonable thing to do.
Quoted 8 lines
I'm a little worried about the consequences of doing this unconditionally in intel-hid. Perhaps it should be a quirk?
David McFarland (1):
platform/x86/intel/hid: Don't wake on 5-button releasesdrivers/platform/x86/intel/hid.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
P.S.: To be sure the issue doesn't fall through the cracks unnoticed, I'm adding it to regzbot, the Linux kernel regression tracking bot:
#regzbot ^introduced 0c4cae1bc00d
#regzbot title PM: hibernate: & platform/x86/intel/hid: hibernate on Dell Latitude 7430 fails
#regzbot ignore-activity
--
Everything you wanna know about Linux kernel regression tracking:
https://linux-regtracking.leemhuis.info/about/#tldr
That page also explains what to do if mails like this annoy you.