Message ID | 20230512152545.125302-3-michal.wilczynski@intel.com |
---|---|
State | Superseded |
Headers | show |
Series | Prefer using _OSC method over deprecated _PDC | expand |
Hi Michal,
kernel test robot noticed the following build errors:
[auto build test ERROR on rafael-pm/linux-next]
[also build test ERROR on linus/master v6.4-rc1 next-20230512]
[cannot apply to tip/x86/core]
[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/Michal-Wilczynski/acpi-Use-_OSC-method-to-convey-processor-OSPM-capabilites/20230512-232819
base: https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git linux-next
patch link: https://lore.kernel.org/r/20230512152545.125302-3-michal.wilczynski%40intel.com
patch subject: [PATCH v1 2/2] acpi: Move logic responsible for conveying processor OSPM capabilities
config: ia64-randconfig-r006-20230511 (https://download.01.org/0day-ci/archive/20230513/202305130150.apyXfDBg-lkp@intel.com/config)
compiler: ia64-linux-gcc (GCC) 12.1.0
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/46f0576d442f1e76c7bd4edaec78ee2357111aff
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Michal-Wilczynski/acpi-Use-_OSC-method-to-convey-processor-OSPM-capabilites/20230512-232819
git checkout 46f0576d442f1e76c7bd4edaec78ee2357111aff
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=ia64 olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=ia64 SHELL=/bin/bash drivers/acpi/
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Link: https://lore.kernel.org/oe-kbuild-all/202305130150.apyXfDBg-lkp@intel.com/
All errors (new ones prefixed by >>):
>> drivers/acpi/acpi_processor.c:627:20: error: redefinition of 'acpi_early_processor_osc'
627 | acpi_status __init acpi_early_processor_osc(void)
| ^~~~~~~~~~~~~~~~~~~~~~~~
In file included from drivers/acpi/acpi_processor.c:27:
drivers/acpi/internal.h:164:27: note: previous definition of 'acpi_early_processor_osc' with type 'acpi_status(void)' {aka 'unsigned int(void)'}
164 | static inline acpi_status acpi_early_processor_osc(void) { return AE_ERROR; }
| ^~~~~~~~~~~~~~~~~~~~~~~~
vim +/acpi_early_processor_osc +627 drivers/acpi/acpi_processor.c
a21211672c9a1d7 Srinivas Pandruvada 2016-03-23 626
175b1fab626b31b Michal Wilczynski 2023-05-12 @627 acpi_status __init acpi_early_processor_osc(void)
a21211672c9a1d7 Srinivas Pandruvada 2016-03-23 628 {
175b1fab626b31b Michal Wilczynski 2023-05-12 629 acpi_status status;
175b1fab626b31b Michal Wilczynski 2023-05-12 630
46f0576d442f1e7 Michal Wilczynski 2023-05-12 631 processor_dmi_check();
46f0576d442f1e7 Michal Wilczynski 2023-05-12 632
175b1fab626b31b Michal Wilczynski 2023-05-12 633 status = acpi_walk_namespace(ACPI_TYPE_PROCESSOR, ACPI_ROOT_OBJECT,
175b1fab626b31b Michal Wilczynski 2023-05-12 634 ACPI_UINT32_MAX, acpi_processor_osc, NULL,
a21211672c9a1d7 Srinivas Pandruvada 2016-03-23 635 NULL, NULL);
175b1fab626b31b Michal Wilczynski 2023-05-12 636 if (ACPI_FAILURE(status))
175b1fab626b31b Michal Wilczynski 2023-05-12 637 return status;
175b1fab626b31b Michal Wilczynski 2023-05-12 638
175b1fab626b31b Michal Wilczynski 2023-05-12 639 status = acpi_get_devices(ACPI_PROCESSOR_DEVICE_HID, acpi_processor_osc,
175b1fab626b31b Michal Wilczynski 2023-05-12 640 NULL, NULL);
175b1fab626b31b Michal Wilczynski 2023-05-12 641
175b1fab626b31b Michal Wilczynski 2023-05-12 642 return status;
a21211672c9a1d7 Srinivas Pandruvada 2016-03-23 643 }
a21211672c9a1d7 Srinivas Pandruvada 2016-03-23 644
Hi Michal, kernel test robot noticed the following build errors: [auto build test ERROR on rafael-pm/linux-next] [also build test ERROR on linus/master v6.4-rc1 next-20230512] [cannot apply to tip/x86/core] [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/Michal-Wilczynski/acpi-Use-_OSC-method-to-convey-processor-OSPM-capabilites/20230512-232819 base: https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git linux-next patch link: https://lore.kernel.org/r/20230512152545.125302-3-michal.wilczynski%40intel.com patch subject: [PATCH v1 2/2] acpi: Move logic responsible for conveying processor OSPM capabilities config: arm64-allyesconfig (https://download.01.org/0day-ci/archive/20230513/202305130519.3kCngRee-lkp@intel.com/config) compiler: aarch64-linux-gcc (GCC) 12.1.0 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/46f0576d442f1e76c7bd4edaec78ee2357111aff git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Michal-Wilczynski/acpi-Use-_OSC-method-to-convey-processor-OSPM-capabilites/20230512-232819 git checkout 46f0576d442f1e76c7bd4edaec78ee2357111aff # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=arm64 olddefconfig COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=arm64 SHELL=/bin/bash drivers/ If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot <lkp@intel.com> | Link: https://lore.kernel.org/oe-kbuild-all/202305130519.3kCngRee-lkp@intel.com/ All errors (new ones prefixed by >>): drivers/acpi/acpi_processor.c: In function 'set_no_mwait': >> drivers/acpi/acpi_processor.c:564:9: error: 'boot_option_idle_override' undeclared (first use in this function) 564 | boot_option_idle_override = IDLE_NOMWAIT; | ^~~~~~~~~~~~~~~~~~~~~~~~~ drivers/acpi/acpi_processor.c:564:9: note: each undeclared identifier is reported only once for each function it appears in >> drivers/acpi/acpi_processor.c:564:37: error: 'IDLE_NOMWAIT' undeclared (first use in this function); did you mean 'FOLL_NOWAIT'? 564 | boot_option_idle_override = IDLE_NOMWAIT; | ^~~~~~~~~~~~ | FOLL_NOWAIT drivers/acpi/acpi_processor.c: In function 'acpi_processor_osc': drivers/acpi/acpi_processor.c:604:9: error: implicit declaration of function 'arch_acpi_set_proc_cap_bits' [-Werror=implicit-function-declaration] 604 | arch_acpi_set_proc_cap_bits(&capbuf[OSC_SUPPORT_DWORD]); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/acpi/acpi_processor.c:606:13: error: 'boot_option_idle_override' undeclared (first use in this function) 606 | if (boot_option_idle_override == IDLE_NOMWAIT) | ^~~~~~~~~~~~~~~~~~~~~~~~~ drivers/acpi/acpi_processor.c:606:42: error: 'IDLE_NOMWAIT' undeclared (first use in this function); did you mean 'FOLL_NOWAIT'? 606 | if (boot_option_idle_override == IDLE_NOMWAIT) | ^~~~~~~~~~~~ | FOLL_NOWAIT drivers/acpi/acpi_processor.c:607:48: error: 'ACPI_PDC_C_C2C3_FFH' undeclared (first use in this function) 607 | capbuf[OSC_SUPPORT_DWORD] &= ~(ACPI_PDC_C_C2C3_FFH | ACPI_PDC_C_C1_FFH); | ^~~~~~~~~~~~~~~~~~~ drivers/acpi/acpi_processor.c:607:70: error: 'ACPI_PDC_C_C1_FFH' undeclared (first use in this function) 607 | capbuf[OSC_SUPPORT_DWORD] &= ~(ACPI_PDC_C_C2C3_FFH | ACPI_PDC_C_C1_FFH); | ^~~~~~~~~~~~~~~~~ drivers/acpi/acpi_processor.c: At top level: drivers/acpi/acpi_processor.c:627:20: error: redefinition of 'acpi_early_processor_osc' 627 | acpi_status __init acpi_early_processor_osc(void) | ^~~~~~~~~~~~~~~~~~~~~~~~ In file included from drivers/acpi/acpi_processor.c:27: drivers/acpi/internal.h:164:27: note: previous definition of 'acpi_early_processor_osc' with type 'acpi_status(void)' {aka 'unsigned int(void)'} 164 | static inline acpi_status acpi_early_processor_osc(void) { return AE_ERROR; } | ^~~~~~~~~~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors vim +/boot_option_idle_override +564 drivers/acpi/acpi_processor.c 559 560 static int __init set_no_mwait(const struct dmi_system_id *id) 561 { 562 pr_notice("%s detected - disabling mwait for CPU C-states\n", 563 id->ident); > 564 boot_option_idle_override = IDLE_NOMWAIT; 565 return 0; 566 } 567
diff --git a/drivers/acpi/acpi_processor.c b/drivers/acpi/acpi_processor.c index 26f6c002016b..2437c916d8b0 100644 --- a/drivers/acpi/acpi_processor.c +++ b/drivers/acpi/acpi_processor.c @@ -10,6 +10,7 @@ * Rafael J. Wysocki <rafael.j.wysocki@intel.com> */ +#include <linux/dmi.h> #include <linux/acpi.h> #include <linux/device.h> #include <linux/kernel.h> @@ -21,6 +22,8 @@ #include <asm/cpu.h> +#include <xen/xen.h> + #include "internal.h" DEFINE_PER_CPU(struct acpi_processor *, processors); @@ -508,7 +511,79 @@ static void acpi_processor_remove(struct acpi_device *device) } #endif /* CONFIG_ACPI_HOTPLUG_CPU */ -#ifdef CONFIG_X86 +bool __init processor_physically_present(acpi_handle handle) +{ + int cpuid, type; + u32 acpi_id; + acpi_status status; + acpi_object_type acpi_type; + unsigned long long tmp; + union acpi_object object = { 0 }; + struct acpi_buffer buffer = { sizeof(union acpi_object), &object }; + + status = acpi_get_type(handle, &acpi_type); + if (ACPI_FAILURE(status)) + return false; + + switch (acpi_type) { + case ACPI_TYPE_PROCESSOR: + status = acpi_evaluate_object(handle, NULL, NULL, &buffer); + if (ACPI_FAILURE(status)) + return false; + acpi_id = object.processor.proc_id; + break; + case ACPI_TYPE_DEVICE: + status = acpi_evaluate_integer(handle, "_UID", NULL, &tmp); + if (ACPI_FAILURE(status)) + return false; + acpi_id = tmp; + break; + default: + return false; + } + + if (xen_initial_domain()) + /* + * When running as a Xen dom0 the number of processors Linux + * sees can be different from the real number of processors on + * the system, and we still need to execute _PDC for all of + * them. + */ + return xen_processor_present(acpi_id); + + type = (acpi_type == ACPI_TYPE_DEVICE) ? 1 : 0; + cpuid = acpi_get_cpuid(handle, type, acpi_id); + + return !invalid_logical_cpuid(cpuid); +} + +static int __init set_no_mwait(const struct dmi_system_id *id) +{ + pr_notice("%s detected - disabling mwait for CPU C-states\n", + id->ident); + boot_option_idle_override = IDLE_NOMWAIT; + return 0; +} + +static const struct dmi_system_id processor_idle_dmi_table[] __initconst = { + { + set_no_mwait, "Extensa 5220", { + DMI_MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies LTD"), + DMI_MATCH(DMI_SYS_VENDOR, "Acer"), + DMI_MATCH(DMI_PRODUCT_VERSION, "0100"), + DMI_MATCH(DMI_BOARD_NAME, "Columbia") }, NULL}, + {}, +}; + +void __init processor_dmi_check(void) +{ + /* + * Check whether the system is DMI table. If yes, OSPM + * should not use mwait for CPU-states. + */ + dmi_check_system(processor_idle_dmi_table); +} + static bool acpi_hwp_native_thermal_lvt_set; static acpi_status __init acpi_processor_osc(acpi_handle handle, u32 lvl, void *context, void **rv) @@ -523,6 +598,9 @@ static acpi_status __init acpi_processor_osc(acpi_handle handle, u32 lvl, .cap.pointer = capbuf, }; + if (processor_physically_present(handle) == false) + return AE_OK; + arch_acpi_set_proc_cap_bits(&capbuf[OSC_SUPPORT_DWORD]); if (boot_option_idle_override == IDLE_NOMWAIT) @@ -550,6 +628,8 @@ acpi_status __init acpi_early_processor_osc(void) { acpi_status status; + processor_dmi_check(); + status = acpi_walk_namespace(ACPI_TYPE_PROCESSOR, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, acpi_processor_osc, NULL, NULL, NULL); @@ -561,7 +641,6 @@ acpi_status __init acpi_early_processor_osc(void) return status; } -#endif /* * The following ACPI IDs are known to be suitable for representing as diff --git a/drivers/acpi/internal.h b/drivers/acpi/internal.h index 58e892376391..24e93413ae41 100644 --- a/drivers/acpi/internal.h +++ b/drivers/acpi/internal.h @@ -155,6 +155,9 @@ void acpi_early_processor_set_pdc(void); static inline void acpi_early_processor_set_pdc(void) {} #endif +void processor_dmi_check(void); +bool processor_physically_present(acpi_handle handle); + #ifdef CONFIG_X86 acpi_status acpi_early_processor_osc(void); #else diff --git a/drivers/acpi/processor_pdc.c b/drivers/acpi/processor_pdc.c index 8d10d000ebc2..ce3acd86dd12 100644 --- a/drivers/acpi/processor_pdc.c +++ b/drivers/acpi/processor_pdc.c @@ -9,61 +9,12 @@ #define pr_fmt(fmt) "ACPI: " fmt -#include <linux/dmi.h> #include <linux/slab.h> #include <linux/acpi.h> #include <acpi/processor.h> -#include <xen/xen.h> - #include "internal.h" -static bool __init processor_physically_present(acpi_handle handle) -{ - int cpuid, type; - u32 acpi_id; - acpi_status status; - acpi_object_type acpi_type; - unsigned long long tmp; - union acpi_object object = { 0 }; - struct acpi_buffer buffer = { sizeof(union acpi_object), &object }; - - status = acpi_get_type(handle, &acpi_type); - if (ACPI_FAILURE(status)) - return false; - - switch (acpi_type) { - case ACPI_TYPE_PROCESSOR: - status = acpi_evaluate_object(handle, NULL, NULL, &buffer); - if (ACPI_FAILURE(status)) - return false; - acpi_id = object.processor.proc_id; - break; - case ACPI_TYPE_DEVICE: - status = acpi_evaluate_integer(handle, "_UID", NULL, &tmp); - if (ACPI_FAILURE(status)) - return false; - acpi_id = tmp; - break; - default: - return false; - } - - if (xen_initial_domain()) - /* - * When running as a Xen dom0 the number of processors Linux - * sees can be different from the real number of processors on - * the system, and we still need to execute _PDC for all of - * them. - */ - return xen_processor_present(acpi_id); - - type = (acpi_type == ACPI_TYPE_DEVICE) ? 1 : 0; - cpuid = acpi_get_cpuid(handle, type, acpi_id); - - return !invalid_logical_cpuid(cpuid); -} - static void acpi_set_pdc_bits(u32 *buf) { buf[0] = ACPI_PDC_REVISION_ID; @@ -146,7 +97,7 @@ acpi_processor_eval_pdc(acpi_handle handle, struct acpi_object_list *pdc_in) return status; } -void acpi_processor_set_pdc(acpi_handle handle) +void __deprecated acpi_processor_set_pdc(acpi_handle handle) { struct acpi_object_list *obj_list; @@ -174,34 +125,7 @@ early_init_pdc(acpi_handle handle, u32 lvl, void *context, void **rv) return AE_OK; } -static int __init set_no_mwait(const struct dmi_system_id *id) -{ - pr_notice("%s detected - disabling mwait for CPU C-states\n", - id->ident); - boot_option_idle_override = IDLE_NOMWAIT; - return 0; -} - -static const struct dmi_system_id processor_idle_dmi_table[] __initconst = { - { - set_no_mwait, "Extensa 5220", { - DMI_MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies LTD"), - DMI_MATCH(DMI_SYS_VENDOR, "Acer"), - DMI_MATCH(DMI_PRODUCT_VERSION, "0100"), - DMI_MATCH(DMI_BOARD_NAME, "Columbia") }, NULL}, - {}, -}; - -static void __init processor_dmi_check(void) -{ - /* - * Check whether the system is DMI table. If yes, OSPM - * should not use mwait for CPU-states. - */ - dmi_check_system(processor_idle_dmi_table); -} - -void __init acpi_early_processor_set_pdc(void) +void __init __deprecated acpi_early_processor_set_pdc(void) { processor_dmi_check(); diff --git a/include/acpi/processor.h b/include/acpi/processor.h index 94181fe9780a..83ed42254567 100644 --- a/include/acpi/processor.h +++ b/include/acpi/processor.h @@ -372,7 +372,7 @@ static inline void acpi_cppc_processor_exit(struct acpi_processor *pr) #endif /* CONFIG_ACPI_CPPC_LIB */ /* in processor_pdc.c */ -void acpi_processor_set_pdc(acpi_handle handle); +void __deprecated acpi_processor_set_pdc(acpi_handle handle); /* in processor_throttling.c */ #ifdef CONFIG_ACPI_CPU_FREQ_PSS
Since _PDC method is deprecated and a preferred method of communicating OSPM processor power management capabilities is _OSC there is a need to move functions checking whether processor is present and workarounds for specific hardware to acpi_processor.c as this logic is not _PDC specific. It also applies to the _OSC objects. Move processor_dmi_check(), processor_idle_dmi_table, set_no_mwait() and processor_physically_present() to acpi_processor.c. Introduce IDLE_NOMWAIT workaround and processor_dmi_table workarounds to work with _OSC objects. Mark acpi_early_processor_set_pdc() and acpi_processor_set_pdc() as deprecated. Signed-off-by: Michal Wilczynski <michal.wilczynski@intel.com> --- drivers/acpi/acpi_processor.c | 83 ++++++++++++++++++++++++++++++++++- drivers/acpi/internal.h | 3 ++ drivers/acpi/processor_pdc.c | 80 +-------------------------------- include/acpi/processor.h | 2 +- 4 files changed, 87 insertions(+), 81 deletions(-)