RE: [RFC PATCH 0/2] x86: allow to notify host about guest entering s2idle

From: Limonciello, Mario
Date: Thu Jul 07 2022 - 11:27:42 EST


[Public]



> -----Original Message-----
> From: Grzegorz Jaszczyk <jaz@xxxxxxxxxxxx>
> Sent: Thursday, July 7, 2022 07:53
> To: linux-kernel@xxxxxxxxxxxxxxx
> Cc: jaz@xxxxxxxxxxxx; dmy@xxxxxxxxxxxx; Limonciello, Mario
> <Mario.Limonciello@xxxxxxx>; seanjc@xxxxxxxxxx; dbehr@xxxxxxxxxx;
> upstream@xxxxxxxxxxxx; zide.chen@xxxxxxxxxxxxxxxxxxxxxxxxxxxxx; Rafael J.
> Wysocki <rafael@xxxxxxxxxx>; Len Brown <lenb@xxxxxxxxxx>; Hans de Goede
> <hdegoede@xxxxxxxxxx>; Mark Gross <markgross@xxxxxxxxxx>; Pavel Machek
> <pavel@xxxxxx>; Mika Westerberg <mika.westerberg@xxxxxxxxxxxxxxx>; Sachi
> King <nakato@xxxxxxxxx>; open list:ACPI <linux-acpi@xxxxxxxxxxxxxxx>; open
> list:X86 PLATFORM DRIVERS <platform-driver-x86@xxxxxxxxxxxxxxx>; open
> list:HIBERNATION (aka Software Suspend, aka swsusp) <linux-
> pm@xxxxxxxxxxxxxxx>
> Subject: [RFC PATCH 0/2] x86: allow to notify host about guest entering s2idle
>
> According to the mailing list discussion [1] about the preferred approach
> for notifying hypervisor/VMM about guest entering s2idle state this RFC was
> implemented.
>
> Instead of original hypercall based approach, which involves KVM change [2]
> and makes it hypervisor specific, implement different mechanism, which
> takes advantage of MMIO/PIO trapping and makes it hypervisor independent.
>
> Patch #1 extends S2Idle ops by new notify handler which will be invoked as
> a very last command before system actually enters S2Idle states. It also
> allows to register and use driver specific notification hook which is used
> in patch #2.
>
> Patch #2 introduces new driver for virtual PMC, which registers
> acpi_s2idle_dev_ops's notify handler. Its implementation is based on an
> ACPI _DSM evaluation, which in turn can perform MMIO access and allow to
> trap and therefore notify the VMM about guest entering S2Idle state.
>
> Please see individual patches and commit logs for more verbose description.
>
> This patchset is marked as RFC since patch #2 implements driver for non
> existing device "HYPE0001", which ACPI ID was not registered yet.
> Furthermore the required registration process [3] will not be started
> before getting positive feedback about this patchset.
>
> [1]
> https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpatchw
> ork.kernel.org%2Fproject%2Flinux-pm%2Fpatch%2F20220609110337.1238762-
> 2-
> jaz%40semihalf.com%2F&amp;data=05%7C01%7Cmario.limonciello%40amd.co
> m%7C514a545cf9aa4a7b6d9508da6018138b%7C3dd8961fe4884e608e11a82d9
> 94e183d%7C0%7C0%7C637927953769026163%7CUnknown%7CTWFpbGZsb3d8
> eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%
> 7C3000%7C%7C%7C&amp;sdata=RIDiHUNpHUsBYyK3pwGND%2BWJoioXZNCKt
> mML2%2F1LAxs%3D&amp;reserved=0
> [2]
> https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpatchw
> ork.kernel.org%2Fproject%2Flinux-pm%2Fpatch%2F20220609110337.1238762-
> 3-
> jaz%40semihalf.com%2F&amp;data=05%7C01%7Cmario.limonciello%40amd.co
> m%7C514a545cf9aa4a7b6d9508da6018138b%7C3dd8961fe4884e608e11a82d9
> 94e183d%7C0%7C0%7C637927953769026163%7CUnknown%7CTWFpbGZsb3d8
> eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%
> 7C3000%7C%7C%7C&amp;sdata=BqykAwWzO%2BfeGPSsAqTmX13O8F0Vvm3G
> PL56EpmdSJ8%3D&amp;reserved=0
> [3]
> https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fuefi.org
> %2FPNP_ACPI_Registry&amp;data=05%7C01%7Cmario.limonciello%40amd.co
> m%7C514a545cf9aa4a7b6d9508da6018138b%7C3dd8961fe4884e608e11a82d9
> 94e183d%7C0%7C0%7C637927953769026163%7CUnknown%7CTWFpbGZsb3d8
> eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%
> 7C3000%7C%7C%7C&amp;sdata=QXK52zFXJGEBm6xIv6IFeF7Xxgz4Yp5UmgLSQ
> diXtlI%3D&amp;reserved=0
>
> Grzegorz Jaszczyk (2):
> suspend: extend S2Idle ops by new notify handler
> platform/x86: Add virtual PMC driver used for S2Idle
>
> drivers/acpi/x86/s2idle.c | 11 +++++
> drivers/platform/x86/Kconfig | 7 ++++
> drivers/platform/x86/Makefile | 1 +
> drivers/platform/x86/virt_pmc.c | 73 +++++++++++++++++++++++++++++++++
> include/linux/acpi.h | 1 +
> include/linux/suspend.h | 1 +
> kernel/power/suspend.c | 4 ++
> 7 files changed, 98 insertions(+)
> create mode 100644 drivers/platform/x86/virt_pmc.c
>
> --
> 2.37.0.rc0.161.g10f37bed90-goog

Thanks, you matched the implementation I was expecting.
This looks fine by me.