* [PATCH 0/4] Add some extra debugging mechanisms for s0i3 @ 2022-08-28 22:21 Mario Limonciello 2022-08-28 22:21 ` [PATCH 1/4] ACPI: s2idle: Add a new ->enter() callback for platform_s2idle_ops Mario Limonciello 0 siblings, 1 reply; 5+ messages in thread From: Mario Limonciello @ 2022-08-28 22:21 UTC (permalink / raw) To: mario.limonciello, Len Brown, platform-driver-x86, linux-acpi, linux-pm Cc: rafael, hdegoede, linux-kernel Recently there have been reports of problems where the system consumes too much power after certain interrupts occur that would notify the kernel of some event but those events aren't marked for wakeup. These problems have been root caused to the timing of the kernel moving the cores into ACPI C3 relative to other events from the previous wakeup not being settled. Linux will more aggressively move the cores into C3 for s2idle than Windows does for Modern Standby. To aide with debugging this class of problems in the future add a new set of optional debugging infrastructure. Mario Limonciello (4): ACPI: s2idle: Add a new ->enter() callback for platform_s2idle_ops platform/x86/amd: pmc: Add defines for STB events platform/x86/amd: pmc: Always write to the STB platform/x86/amd: pmc: Add an extra STB message for entering s2idle drivers/acpi/x86/s2idle.c | 14 ++++++++++++++ drivers/platform/x86/amd/pmc.c | 33 +++++++++++++++++++++------------ include/linux/acpi.h | 1 + include/linux/suspend.h | 1 + kernel/power/suspend.c | 3 +++ 5 files changed, 40 insertions(+), 12 deletions(-) -- 2.34.1 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/4] ACPI: s2idle: Add a new ->enter() callback for platform_s2idle_ops 2022-08-28 22:21 [PATCH 0/4] Add some extra debugging mechanisms for s0i3 Mario Limonciello @ 2022-08-28 22:21 ` Mario Limonciello 2022-08-29 0:38 ` kernel test robot ` (2 more replies) 0 siblings, 3 replies; 5+ messages in thread From: Mario Limonciello @ 2022-08-28 22:21 UTC (permalink / raw) To: mario.limonciello, Rafael J. Wysocki, Len Brown, Pavel Machek Cc: hdegoede, linux-acpi, linux-kernel, linux-pm On some platforms it is found that Linux more aggressively enters s2idle than Windows enters Modern Standby and this uncovers some synchronization issues for the platform. To aid in debugging this class of problems in the future, add support for an extra optional callback intended for drivers to emit extra debugging. Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> --- drivers/acpi/x86/s2idle.c | 14 ++++++++++++++ include/linux/acpi.h | 1 + include/linux/suspend.h | 1 + kernel/power/suspend.c | 3 +++ 4 files changed, 19 insertions(+) diff --git a/drivers/acpi/x86/s2idle.c b/drivers/acpi/x86/s2idle.c index f9ac12b778e6..c984093a3657 100644 --- a/drivers/acpi/x86/s2idle.c +++ b/drivers/acpi/x86/s2idle.c @@ -486,6 +486,19 @@ int acpi_s2idle_prepare_late(void) return 0; } +void acpi_s2idle_enter(void) +{ + struct acpi_s2idle_dev_ops *handler; + + if (!lps0_device_handle || sleep_no_lps0) + return; + + list_for_each_entry(handler, &lps0_s2idle_devops_head, list_node) { + if (handler->enter) + handler->enter(); + } +} + void acpi_s2idle_restore_early(void) { struct acpi_s2idle_dev_ops *handler; @@ -527,6 +540,7 @@ static const struct platform_s2idle_ops acpi_s2idle_ops_lps0 = { .begin = acpi_s2idle_begin, .prepare = acpi_s2idle_prepare, .prepare_late = acpi_s2idle_prepare_late, + .enter = acpi_s2idle_enter, .wake = acpi_s2idle_wake, .restore_early = acpi_s2idle_restore_early, .restore = acpi_s2idle_restore, diff --git a/include/linux/acpi.h b/include/linux/acpi.h index 6f64b2f3dc54..9df14b5a875c 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h @@ -1076,6 +1076,7 @@ struct acpi_s2idle_dev_ops { struct list_head list_node; void (*prepare)(void); void (*restore)(void); + void (*enter)(void); }; int acpi_register_lps0_dev(struct acpi_s2idle_dev_ops *arg); void acpi_unregister_lps0_dev(struct acpi_s2idle_dev_ops *arg); diff --git a/include/linux/suspend.h b/include/linux/suspend.h index 70f2921e2e70..5a3fdca0a628 100644 --- a/include/linux/suspend.h +++ b/include/linux/suspend.h @@ -191,6 +191,7 @@ struct platform_s2idle_ops { int (*begin)(void); int (*prepare)(void); int (*prepare_late)(void); + void (*enter)(void); bool (*wake)(void); void (*restore_early)(void); void (*restore)(void); diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c index 827075944d28..0c08032d6b50 100644 --- a/kernel/power/suspend.c +++ b/kernel/power/suspend.c @@ -136,6 +136,9 @@ static void s2idle_loop(void) break; } + if (s2idle_ops && s2idle_ops->enter) + s2idle_ops->enter(); + s2idle_enter(); } -- 2.34.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 1/4] ACPI: s2idle: Add a new ->enter() callback for platform_s2idle_ops 2022-08-28 22:21 ` [PATCH 1/4] ACPI: s2idle: Add a new ->enter() callback for platform_s2idle_ops Mario Limonciello @ 2022-08-29 0:38 ` kernel test robot 2022-08-29 2:10 ` kernel test robot 2022-08-29 6:03 ` kernel test robot 2 siblings, 0 replies; 5+ messages in thread From: kernel test robot @ 2022-08-29 0:38 UTC (permalink / raw) To: Mario Limonciello, Rafael J. Wysocki, Len Brown, Pavel Machek Cc: kbuild-all, hdegoede, linux-acpi, linux-kernel, linux-pm Hi Mario, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on rafael-pm/linux-next] [also build test WARNING on linus/master v6.0-rc2 next-20220826] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Mario-Limonciello/Add-some-extra-debugging-mechanisms-for-s0i3/20220829-062334 base: https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git linux-next config: x86_64-defconfig (https://download.01.org/0day-ci/archive/20220829/202208290836.C3cKDij9-lkp@intel.com/config) compiler: gcc-11 (Debian 11.3.0-5) 11.3.0 reproduce (this is a W=1 build): # https://github.com/intel-lab-lkp/linux/commit/af6400b51370a2bc04906697aeec5a938e6ee446 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Mario-Limonciello/Add-some-extra-debugging-mechanisms-for-s0i3/20220829-062334 git checkout af6400b51370a2bc04906697aeec5a938e6ee446 # save the config file mkdir build_dir && cp config build_dir/.config make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash drivers/acpi/ If you fix the issue, kindly add following tag where applicable Reported-by: kernel test robot <lkp@intel.com> All warnings (new ones prefixed by >>): >> drivers/acpi/x86/s2idle.c:489:6: warning: no previous prototype for 'acpi_s2idle_enter' [-Wmissing-prototypes] 489 | void acpi_s2idle_enter(void) | ^~~~~~~~~~~~~~~~~ vim +/acpi_s2idle_enter +489 drivers/acpi/x86/s2idle.c 488 > 489 void acpi_s2idle_enter(void) 490 { 491 struct acpi_s2idle_dev_ops *handler; 492 493 if (!lps0_device_handle || sleep_no_lps0) 494 return; 495 496 list_for_each_entry(handler, &lps0_s2idle_devops_head, list_node) { 497 if (handler->enter) 498 handler->enter(); 499 } 500 } 501 -- 0-DAY CI Kernel Test Service https://01.org/lkp ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/4] ACPI: s2idle: Add a new ->enter() callback for platform_s2idle_ops 2022-08-28 22:21 ` [PATCH 1/4] ACPI: s2idle: Add a new ->enter() callback for platform_s2idle_ops Mario Limonciello 2022-08-29 0:38 ` kernel test robot @ 2022-08-29 2:10 ` kernel test robot 2022-08-29 6:03 ` kernel test robot 2 siblings, 0 replies; 5+ messages in thread From: kernel test robot @ 2022-08-29 2:10 UTC (permalink / raw) To: Mario Limonciello, Rafael J. Wysocki, Len Brown, Pavel Machek Cc: llvm, kbuild-all, hdegoede, linux-acpi, linux-kernel, linux-pm Hi Mario, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on rafael-pm/linux-next] [also build test WARNING on linus/master v6.0-rc3 next-20220826] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Mario-Limonciello/Add-some-extra-debugging-mechanisms-for-s0i3/20220829-062334 base: https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git linux-next config: x86_64-randconfig-a011-20220829 (https://download.01.org/0day-ci/archive/20220829/202208291045.mtIt51vk-lkp@intel.com/config) compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project f28c006a5895fc0e329fe15fead81e37457cb1d1) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/intel-lab-lkp/linux/commit/af6400b51370a2bc04906697aeec5a938e6ee446 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Mario-Limonciello/Add-some-extra-debugging-mechanisms-for-s0i3/20220829-062334 git checkout af6400b51370a2bc04906697aeec5a938e6ee446 # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash drivers/acpi/ If you fix the issue, kindly add following tag where applicable Reported-by: kernel test robot <lkp@intel.com> All warnings (new ones prefixed by >>): >> drivers/acpi/x86/s2idle.c:489:6: warning: no previous prototype for function 'acpi_s2idle_enter' [-Wmissing-prototypes] void acpi_s2idle_enter(void) ^ drivers/acpi/x86/s2idle.c:489:1: note: declare 'static' if the function is not intended to be used outside of this translation unit void acpi_s2idle_enter(void) ^ static 1 warning generated. vim +/acpi_s2idle_enter +489 drivers/acpi/x86/s2idle.c 488 > 489 void acpi_s2idle_enter(void) 490 { 491 struct acpi_s2idle_dev_ops *handler; 492 493 if (!lps0_device_handle || sleep_no_lps0) 494 return; 495 496 list_for_each_entry(handler, &lps0_s2idle_devops_head, list_node) { 497 if (handler->enter) 498 handler->enter(); 499 } 500 } 501 -- 0-DAY CI Kernel Test Service https://01.org/lkp ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/4] ACPI: s2idle: Add a new ->enter() callback for platform_s2idle_ops 2022-08-28 22:21 ` [PATCH 1/4] ACPI: s2idle: Add a new ->enter() callback for platform_s2idle_ops Mario Limonciello 2022-08-29 0:38 ` kernel test robot 2022-08-29 2:10 ` kernel test robot @ 2022-08-29 6:03 ` kernel test robot 2 siblings, 0 replies; 5+ messages in thread From: kernel test robot @ 2022-08-29 6:03 UTC (permalink / raw) To: Mario Limonciello, Rafael J. Wysocki, Len Brown, Pavel Machek Cc: kbuild-all, hdegoede, linux-acpi, linux-kernel, linux-pm Hi Mario, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on rafael-pm/linux-next] [also build test WARNING on linus/master v6.0-rc3 next-20220826] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Mario-Limonciello/Add-some-extra-debugging-mechanisms-for-s0i3/20220829-062334 base: https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git linux-next config: i386-randconfig-s003 (https://download.01.org/0day-ci/archive/20220829/202208291354.DVB7CN3N-lkp@intel.com/config) compiler: gcc-11 (Debian 11.3.0-5) 11.3.0 reproduce: # apt-get install sparse # sparse version: v0.6.4-39-gce1a6720-dirty # https://github.com/intel-lab-lkp/linux/commit/af6400b51370a2bc04906697aeec5a938e6ee446 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Mario-Limonciello/Add-some-extra-debugging-mechanisms-for-s0i3/20220829-062334 git checkout af6400b51370a2bc04906697aeec5a938e6ee446 # save the config file mkdir build_dir && cp config build_dir/.config make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=i386 SHELL=/bin/bash drivers/acpi/ If you fix the issue, kindly add following tag where applicable Reported-by: kernel test robot <lkp@intel.com> sparse warnings: (new ones prefixed by >>) drivers/acpi/x86/s2idle.c:426:13: sparse: sparse: restricted suspend_state_t degrades to integer drivers/acpi/x86/s2idle.c:426:33: sparse: sparse: restricted suspend_state_t degrades to integer >> drivers/acpi/x86/s2idle.c:489:6: sparse: sparse: symbol 'acpi_s2idle_enter' was not declared. Should it be static? -- 0-DAY CI Kernel Test Service https://01.org/lkp ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2022-08-29 6:04 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-08-28 22:21 [PATCH 0/4] Add some extra debugging mechanisms for s0i3 Mario Limonciello 2022-08-28 22:21 ` [PATCH 1/4] ACPI: s2idle: Add a new ->enter() callback for platform_s2idle_ops Mario Limonciello 2022-08-29 0:38 ` kernel test robot 2022-08-29 2:10 ` kernel test robot 2022-08-29 6:03 ` kernel test robot
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).