Message ID | 20240626130941.1527127-3-prabhakar.pujeri@gmail.com |
---|---|
State | Superseded |
Headers | show |
Series | ACPI: Replace Ternary Operations with min()/max() Macros | expand |
Hi Prabhakar, kernel test robot noticed the following build errors: [auto build test ERROR on rafael-pm/linux-next] [also build test ERROR on rafael-pm/bleeding-edge linus/master v6.10-rc5 next-20240626] [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/Prabhakar-Pujeri/ACPI-CPPC-Replace-ternary-operator-with-max-in-cppc_find_dmi_mhz/20240627-032938 base: https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git linux-next patch link: https://lore.kernel.org/r/20240626130941.1527127-3-prabhakar.pujeri%40gmail.com patch subject: [PATCH v2 2/2] ACPI: PM: Use max() for clearer D3 state selection in acpi_dev_pm_get_state config: x86_64-rhel-8.3-rust (https://download.01.org/0day-ci/archive/20240627/202406271915.8djHC3jQ-lkp@intel.com/config) compiler: clang version 18.1.5 (https://github.com/llvm/llvm-project 617a15a9eac96088ae5e9134248d8236e34b91b1) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240627/202406271915.8djHC3jQ-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202406271915.8djHC3jQ-lkp@intel.com/ All errors (new ones prefixed by >>): >> drivers/acpi/device_pm.c:763:12: error: static assertion failed due to requirement '__builtin_choose_expr((sizeof(int) == sizeof (*(8 ? ((void *)((long)((((unsigned long long)(-1)) < (unsigned long long)1)) * 0L)) : (int *)8))), (((unsigned long long)(-1)) < (unsigned long long)1), 0) == __builtin_choose_expr((sizeof(int) == sizeof (*(8 ? ((void *)((long)((((int)(-1)) < (int)1)) * 0L)) : (int *)8))), (((int)(-1)) < (int)1), 0) || __builtin_choose_expr((sizeof(int) == sizeof (*(8 ? ((void *)((long)((((unsigned long long)(-1)) < (unsigned long long)1)) * 0L)) : (int *)8))), (((unsigned long long)(-1)) < (unsigned long long)1), 0) == __builtin_choose_expr((sizeof(int) == sizeof (*(8 ? ((void *)((long)((((int)(-1)) < (int)1)) * 0L)) : (int *)8))), (((int)(-1)) < (int)1), 0) || (__builtin_choose_expr((sizeof(int) == sizeof (*(8 ? ((void *)((long)(ret) * 0L)) : (int *)8))) && __builtin_choose_expr((sizeof(int) == sizeof (*(8 ? ((void *)((long)((((unsigned long long)(-1)) < (unsigned long long)1)) * 0L)) : (int *)8))), (((unsigned long long)(-1)) < (unsigned long long)1), 0), ret, -1) >= 0) || (__builtin_choose_expr((sizeof(int) == sizeof (*(8 ? ((void *)((long)(d_min) * 0L)) : (int *)8))) && __builtin_choose_expr((sizeof(int) == sizeof (*(8 ? ((void *)((long)((((int)(-1)) < (int)1)) * 0L)) : (int *)8))), (((int)(-1)) < (int)1), 0), d_min, -1) >= 0)': max(ret, d_min) signedness error, fix types or consider umax() before max_t() 763 | d_max = max(ret, d_min); | ^~~~~~~~~~~~~~~ include/linux/minmax.h:92:19: note: expanded from macro 'max' 92 | #define max(x, y) __careful_cmp(max, x, y) | ^~~~~~~~~~~~~~~~~~~~~~~~ include/linux/minmax.h:58:3: note: expanded from macro '__careful_cmp' 58 | __cmp_once(op, x, y, __UNIQUE_ID(__x), __UNIQUE_ID(__y))) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/minmax.h:51:16: note: expanded from macro '__cmp_once' 51 | static_assert(__types_ok(x, y), \ | ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 52 | #op "(" #x ", " #y ") signedness error, fix types or consider u" #op "() before " #op "_t()"); \ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ note: (skipping 1 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) include/linux/minmax.h:31:2: note: expanded from macro '__is_signed' 31 | __builtin_choose_expr(__is_constexpr(is_signed_type(typeof(x))), \ | ^ include/linux/build_bug.h:77:50: note: expanded from macro 'static_assert' 77 | #define static_assert(expr, ...) __static_assert(expr, ##__VA_ARGS__, #expr) | ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/build_bug.h:78:56: note: expanded from macro '__static_assert' 78 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg) | ^~~~ 1 error generated. vim +763 drivers/acpi/device_pm.c 646 647 /** 648 * acpi_dev_pm_get_state - Get preferred power state of ACPI device. 649 * @dev: Device whose preferred target power state to return. 650 * @adev: ACPI device node corresponding to @dev. 651 * @target_state: System state to match the resultant device state. 652 * @d_min_p: Location to store the highest power state available to the device. 653 * @d_max_p: Location to store the lowest power state available to the device. 654 * 655 * Find the lowest power (highest number) and highest power (lowest number) ACPI 656 * device power states that the device can be in while the system is in the 657 * state represented by @target_state. Store the integer numbers representing 658 * those stats in the memory locations pointed to by @d_max_p and @d_min_p, 659 * respectively. 660 * 661 * Callers must ensure that @dev and @adev are valid pointers and that @adev 662 * actually corresponds to @dev before using this function. 663 * 664 * Returns 0 on success or -ENODATA when one of the ACPI methods fails or 665 * returns a value that doesn't make sense. The memory locations pointed to by 666 * @d_max_p and @d_min_p are only modified on success. 667 */ 668 static int acpi_dev_pm_get_state(struct device *dev, struct acpi_device *adev, 669 u32 target_state, int *d_min_p, int *d_max_p) 670 { 671 char method[] = { '_', 'S', '0' + target_state, 'D', '\0' }; 672 acpi_handle handle = adev->handle; 673 unsigned long long ret; 674 int d_min, d_max; 675 bool wakeup = false; 676 bool has_sxd = false; 677 acpi_status status; 678 679 /* 680 * If the system state is S0, the lowest power state the device can be 681 * in is D3cold, unless the device has _S0W and is supposed to signal 682 * wakeup, in which case the return value of _S0W has to be used as the 683 * lowest power state available to the device. 684 */ 685 d_min = ACPI_STATE_D0; 686 d_max = ACPI_STATE_D3_COLD; 687 688 /* 689 * If present, _SxD methods return the minimum D-state (highest power 690 * state) we can use for the corresponding S-states. Otherwise, the 691 * minimum D-state is D0 (ACPI 3.x). 692 */ 693 if (target_state > ACPI_STATE_S0) { 694 /* 695 * We rely on acpi_evaluate_integer() not clobbering the integer 696 * provided if AE_NOT_FOUND is returned. 697 */ 698 ret = d_min; 699 status = acpi_evaluate_integer(handle, method, NULL, &ret); 700 if ((ACPI_FAILURE(status) && status != AE_NOT_FOUND) 701 || ret > ACPI_STATE_D3_COLD) 702 return -ENODATA; 703 704 /* 705 * We need to handle legacy systems where D3hot and D3cold are 706 * the same and 3 is returned in both cases, so fall back to 707 * D3cold if D3hot is not a valid state. 708 */ 709 if (!adev->power.states[ret].flags.valid) { 710 if (ret == ACPI_STATE_D3_HOT) 711 ret = ACPI_STATE_D3_COLD; 712 else 713 return -ENODATA; 714 } 715 716 if (status == AE_OK) 717 has_sxd = true; 718 719 d_min = ret; 720 wakeup = device_may_wakeup(dev) && adev->wakeup.flags.valid 721 && adev->wakeup.sleep_state >= target_state; 722 } else if (device_may_wakeup(dev) && dev->power.wakeirq) { 723 /* 724 * The ACPI subsystem doesn't manage the wake bit for IRQs 725 * defined with ExclusiveAndWake and SharedAndWake. Instead we 726 * expect them to be managed via the PM subsystem. Drivers 727 * should call dev_pm_set_wake_irq to register an IRQ as a wake 728 * source. 729 * 730 * If a device has a wake IRQ attached we need to check the 731 * _S0W method to get the correct wake D-state. Otherwise we 732 * end up putting the device into D3Cold which will more than 733 * likely disable wake functionality. 734 */ 735 wakeup = true; 736 } else { 737 /* ACPI GPE is specified in _PRW. */ 738 wakeup = adev->wakeup.flags.valid; 739 } 740 741 /* 742 * If _PRW says we can wake up the system from the target sleep state, 743 * the D-state returned by _SxD is sufficient for that (we assume a 744 * wakeup-aware driver if wake is set). Still, if _SxW exists 745 * (ACPI 3.x), it should return the maximum (lowest power) D-state that 746 * can wake the system. _S0W may be valid, too. 747 */ 748 if (wakeup) { 749 method[3] = 'W'; 750 status = acpi_evaluate_integer(handle, method, NULL, &ret); 751 if (status == AE_NOT_FOUND) { 752 /* No _SxW. In this case, the ACPI spec says that we 753 * must not go into any power state deeper than the 754 * value returned from _SxD. 755 */ 756 if (has_sxd && target_state > ACPI_STATE_S0) 757 d_max = d_min; 758 } else if (ACPI_SUCCESS(status) && ret <= ACPI_STATE_D3_COLD) { 759 /* Fall back to D3cold if ret is not a valid state. */ 760 if (!adev->power.states[ret].flags.valid) 761 ret = ACPI_STATE_D3_COLD; 762 > 763 d_max = max(ret, d_min); 764 } else { 765 return -ENODATA; 766 } 767 } 768 769 if (d_min_p) 770 *d_min_p = d_min; 771 772 if (d_max_p) 773 *d_max_p = d_max; 774 775 return 0; 776 } 777
On Wed, Jun 26, 2024 at 3:14 PM Prabhakar Pujeri <prabhakar.pujeri@gmail.com> wrote: > > Signed-off-by: Prabhakar Pujeri <prabhakar.pujeri@gmail.com> > --- > drivers/acpi/device_pm.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/acpi/device_pm.c b/drivers/acpi/device_pm.c > index 3b4d048c4941..a90ae059fb60 100644 > --- a/drivers/acpi/device_pm.c > +++ b/drivers/acpi/device_pm.c > @@ -760,7 +760,7 @@ static int acpi_dev_pm_get_state(struct device *dev, struct acpi_device *adev, > if (!adev->power.states[ret].flags.valid) > ret = ACPI_STATE_D3_COLD; > > - d_max = ret > d_min ? ret : d_min; > + d_max = max(ret, d_min); You need to use max_t() here. > } else { > return -ENODATA; > } > --
diff --git a/drivers/acpi/device_pm.c b/drivers/acpi/device_pm.c index 3b4d048c4941..a90ae059fb60 100644 --- a/drivers/acpi/device_pm.c +++ b/drivers/acpi/device_pm.c @@ -760,7 +760,7 @@ static int acpi_dev_pm_get_state(struct device *dev, struct acpi_device *adev, if (!adev->power.states[ret].flags.valid) ret = ACPI_STATE_D3_COLD; - d_max = ret > d_min ? ret : d_min; + d_max = max(ret, d_min); } else { return -ENODATA; }
Signed-off-by: Prabhakar Pujeri <prabhakar.pujeri@gmail.com> --- drivers/acpi/device_pm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)