Re: git: a25cfcab9a9d - main - linuxkpi: Support s2idle in `pm_suspend_target_state`

From: Jessica Clarke <jrtc27_at_freebsd.org>
Date: Mon, 06 Oct 2025 22:17:35 UTC
On 6 Oct 2025, at 23:02, Bjoern A. Zeeb <bz@freebsd.org> wrote:
> 
> On Mon, 6 Oct 2025, Aymeric Wibo wrote:
> 
>> The branch main has been updated by obiwac:
>> 
>> URL: https://cgit.FreeBSD.org/src/commit/?id=a25cfcab9a9d2c7d733b85bf04b504369623de1c
>> 
>> commit a25cfcab9a9d2c7d733b85bf04b504369623de1c
>> Author:     Aymeric Wibo <obiwac@FreeBSD.org>
>> AuthorDate: 2025-10-06 21:38:58 +0000
>> Commit:     Aymeric Wibo <obiwac@FreeBSD.org>
>> CommitDate: 2025-10-06 21:49:54 +0000
>> 
>>   linuxkpi: Support s2idle in `pm_suspend_target_state`
>> 
>>   When going to s2idle, set Linux' pm_suspend_target_state to
>>   PM_SUSPEND_TO_IDLE instead of setting PM_SUSPEND_MEM (for S3) in all
>>   cases.
>> 
>>   This is necessary because more recent versions of the amdgpu DRM drivers
>>   have different paths for when entering s2idle & S0ix is supported than
>>   S3.
>> 
>>   Reviewed by:    bz
>>   Approved by:    bz
> 
> I cannot apporve them; I am neither a mentor, srcmgr, re, or other entity in this case.

Having a src commit bit not under mentorship is enough.

Jessica

> But thank you for splitting them up into two logical chunks (with the only bit that adding
> the enum here should have been part of the other half so each of them would have compiled
> independently).
> 
> 
>>   Sponsored by:   The FreeBSD Foundation
>>   Differential Revision:  https://reviews.freebsd.org/D51591
>> ---
>> sys/compat/linuxkpi/common/src/linux_acpi.c | 30 +++++++++++++++++++----------
>> 1 file changed, 20 insertions(+), 10 deletions(-)
>> 
>> diff --git a/sys/compat/linuxkpi/common/src/linux_acpi.c b/sys/compat/linuxkpi/common/src/linux_acpi.c
>> index 60e14cfc98c5..c7d62c745c7e 100644
>> --- a/sys/compat/linuxkpi/common/src/linux_acpi.c
>> +++ b/sys/compat/linuxkpi/common/src/linux_acpi.c
>> @@ -119,17 +119,27 @@ acpi_evaluate_dsm(ACPI_HANDLE ObjHandle, const guid_t *guid,
>> }
>> 
>> static void
>> -linux_handle_power_suspend_event(void *arg __unused,
>> -    enum power_stype stype __unused)
>> +linux_handle_power_suspend_event(void *arg __unused, enum power_stype stype)
>> {
>> - /*
>> -  * Only support S3 for now.
>> -  * acpi_sleep_event isn't always called so we use power_suspend_early
>> -  * instead which means we don't know what state we're switching to.
>> -  * TODO: Make acpi_sleep_event consistent
>> -  */
>> - linux_acpi_target_sleep_state = ACPI_STATE_S3;
>> - pm_suspend_target_state = PM_SUSPEND_MEM;
>> + switch (stype) {
>> + case POWER_STYPE_SUSPEND_TO_IDLE:
>> + /*
>> +  * XXX: obiwac Not 100% sure this is correct, but
>> +  * acpi_target_sleep_state does seem to be set to
>> +  * ACPI_STATE_S3 during s2idle on Linux.
>> +  */
>> + linux_acpi_target_sleep_state = ACPI_STATE_S3;
>> + pm_suspend_target_state = PM_SUSPEND_TO_IDLE;
>> + break;
>> + case POWER_STYPE_SUSPEND_TO_MEM:
>> + linux_acpi_target_sleep_state = ACPI_STATE_S3;
>> + pm_suspend_target_state = PM_SUSPEND_MEM;
>> + break;
>> + default:
>> + printf("%s: sleep type %d not yet supported\n",
>> +     __func__, stype);
>> + break;
>> + }
>> }
>> 
>> static void
>> 
> 
> -- 
> Bjoern A. Zeeb                                                     r15:7