diff mbox series

[14/20] ACPICA: executer/exsystem: Inform users about ACPI spec violation

Message ID 22622452.6Emhk5qWAg@kreacher (mailing list archive)
State Mainlined, archived
Headers show
Series ACPICA: ACPICA 20220331 | expand

Commit Message

Rafael J. Wysocki April 11, 2022, 6:59 p.m. UTC
From: Paul Menzel <pmenzel@molgen.mpg.de>

ACPICA commit 05ba545ce7859392250b18c10081db25c90ed8d7

Values greater than 100 microseconds violate the ACPI specification, so
warn users about it.

From ACPI Specification version 6.2 Errata A, 19.6.128 *Stall (Stall for
a Short Time)*:

> The implementation of Stall is OS-specific, but must not relinquish
> control of the processor. Because of this, delays longer than 100
> microseconds must use Sleep instead of Stall.

Link: https://github.com/acpica/acpica/commit/05ba545c
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---
 exsystem.c |    5 +++++
 1 file changed, 5 insertions(+)

Comments

kernel test robot April 12, 2022, 2:53 a.m. UTC | #1
Hi "Rafael,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on rafael-pm/linux-next]
[also build test ERROR on linus/master linux/master v5.18-rc2 next-20220411]
[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]

url:    https://github.com/intel-lab-lkp/linux/commits/Rafael-J-Wysocki/ACPICA-ACPICA-20220331/20220412-030922
base:   https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git linux-next
config: i386-randconfig-a006-20220411 (https://download.01.org/0day-ci/archive/20220412/202204121052.HOrN6tpw-lkp@intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project fe2478d44e4f7f191c43fef629ac7a23d0251e72)
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/5cdc6166cc35043a80f5f328d6e6b58190c4e46c
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Rafael-J-Wysocki/ACPICA-ACPICA-20220331/20220412-030922
        git checkout 5cdc6166cc35043a80f5f328d6e6b58190c4e46c
        # save the config file to linux build tree
        mkdir build_dir
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 SHELL=/bin/bash

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

Note: the linux-review/Rafael-J-Wysocki/ACPICA-ACPICA-20220331/20220412-030922 HEAD 32181ae3d3173aeee41f709612dfa4d52951b39d builds fine.
      It only hurts bisectability.

All errors (new ones prefixed by >>):

>> drivers/acpi/acpica/exsystem.c:140:7: error: use of undeclared identifier 'how_long_US'; did you mean 'how_long_us'?
                   if (how_long_US > 100) {
                       ^~~~~~~~~~~
                       how_long_us
   drivers/acpi/acpica/exsystem.c:123:41: note: 'how_long_us' declared here
   acpi_status acpi_ex_system_do_stall(u32 how_long_us)
                                           ^
   1 error generated.


vim +140 drivers/acpi/acpica/exsystem.c

   105	
   106	/*******************************************************************************
   107	 *
   108	 * FUNCTION:    acpi_ex_system_do_stall
   109	 *
   110	 * PARAMETERS:  how_long_us     - The amount of time to stall,
   111	 *                                in microseconds
   112	 *
   113	 * RETURN:      Status
   114	 *
   115	 * DESCRIPTION: Suspend running thread for specified amount of time.
   116	 *              Note: ACPI specification requires that Stall() does not
   117	 *              relinquish the processor, and delays longer than 100 usec
   118	 *              should use Sleep() instead. We allow stalls up to 255 usec
   119	 *              for compatibility with other interpreters and existing BIOSs.
   120	 *
   121	 ******************************************************************************/
   122	
   123	acpi_status acpi_ex_system_do_stall(u32 how_long_us)
   124	{
   125		acpi_status status = AE_OK;
   126	
   127		ACPI_FUNCTION_ENTRY();
   128	
   129		if (how_long_us > 255) {
   130			/*
   131			 * Longer than 255 microseconds, this is an error
   132			 *
   133			 * (ACPI specifies 100 usec as max, but this gives some slack in
   134			 * order to support existing BIOSs)
   135			 */
   136			ACPI_ERROR((AE_INFO,
   137				    "Time parameter is too large (%u)", how_long_us));
   138			status = AE_AML_OPERAND_VALUE;
   139		} else {
 > 140			if (how_long_US > 100) {
   141				ACPI_WARNING((AE_INFO,
   142					      "Time parameter %u us > 100 us violating ACPI spec, please fix the firmware.",
   143					      how_long_us));
   144			}
   145			acpi_os_stall(how_long_us);
   146		}
   147	
   148		return (status);
   149	}
   150
Rafael J. Wysocki April 12, 2022, 12:47 p.m. UTC | #2
On Tue, Apr 12, 2022 at 4:54 AM kernel test robot <lkp@intel.com> wrote:
>
> Hi "Rafael,
>
> Thank you for the patch! Yet something to improve:

This is addressed by one of the subsequent patches in the series.

> [auto build test ERROR on rafael-pm/linux-next]
> [also build test ERROR on linus/master linux/master v5.18-rc2 next-20220411]
> [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]
>
> url:    https://github.com/intel-lab-lkp/linux/commits/Rafael-J-Wysocki/ACPICA-ACPICA-20220331/20220412-030922
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git linux-next
> config: i386-randconfig-a006-20220411 (https://download.01.org/0day-ci/archive/20220412/202204121052.HOrN6tpw-lkp@intel.com/config)
> compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project fe2478d44e4f7f191c43fef629ac7a23d0251e72)
> 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/5cdc6166cc35043a80f5f328d6e6b58190c4e46c
>         git remote add linux-review https://github.com/intel-lab-lkp/linux
>         git fetch --no-tags linux-review Rafael-J-Wysocki/ACPICA-ACPICA-20220331/20220412-030922
>         git checkout 5cdc6166cc35043a80f5f328d6e6b58190c4e46c
>         # save the config file to linux build tree
>         mkdir build_dir
>         COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 SHELL=/bin/bash
>
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@intel.com>
>
> Note: the linux-review/Rafael-J-Wysocki/ACPICA-ACPICA-20220331/20220412-030922 HEAD 32181ae3d3173aeee41f709612dfa4d52951b39d builds fine.
>       It only hurts bisectability.
>
> All errors (new ones prefixed by >>):
>
> >> drivers/acpi/acpica/exsystem.c:140:7: error: use of undeclared identifier 'how_long_US'; did you mean 'how_long_us'?
>                    if (how_long_US > 100) {
>                        ^~~~~~~~~~~
>                        how_long_us
>    drivers/acpi/acpica/exsystem.c:123:41: note: 'how_long_us' declared here
>    acpi_status acpi_ex_system_do_stall(u32 how_long_us)
>                                            ^
>    1 error generated.
>
>
> vim +140 drivers/acpi/acpica/exsystem.c
>
>    105
>    106  /*******************************************************************************
>    107   *
>    108   * FUNCTION:    acpi_ex_system_do_stall
>    109   *
>    110   * PARAMETERS:  how_long_us     - The amount of time to stall,
>    111   *                                in microseconds
>    112   *
>    113   * RETURN:      Status
>    114   *
>    115   * DESCRIPTION: Suspend running thread for specified amount of time.
>    116   *              Note: ACPI specification requires that Stall() does not
>    117   *              relinquish the processor, and delays longer than 100 usec
>    118   *              should use Sleep() instead. We allow stalls up to 255 usec
>    119   *              for compatibility with other interpreters and existing BIOSs.
>    120   *
>    121   ******************************************************************************/
>    122
>    123  acpi_status acpi_ex_system_do_stall(u32 how_long_us)
>    124  {
>    125          acpi_status status = AE_OK;
>    126
>    127          ACPI_FUNCTION_ENTRY();
>    128
>    129          if (how_long_us > 255) {
>    130                  /*
>    131                   * Longer than 255 microseconds, this is an error
>    132                   *
>    133                   * (ACPI specifies 100 usec as max, but this gives some slack in
>    134                   * order to support existing BIOSs)
>    135                   */
>    136                  ACPI_ERROR((AE_INFO,
>    137                              "Time parameter is too large (%u)", how_long_us));
>    138                  status = AE_AML_OPERAND_VALUE;
>    139          } else {
>  > 140                  if (how_long_US > 100) {
>    141                          ACPI_WARNING((AE_INFO,
>    142                                        "Time parameter %u us > 100 us violating ACPI spec, please fix the firmware.",
>    143                                        how_long_us));
>    144                  }
>    145                  acpi_os_stall(how_long_us);
>    146          }
>    147
>    148          return (status);
>    149  }
>    150
>
> --
> 0-DAY CI Kernel Test Service
> https://01.org/lkp
diff mbox series

Patch

diff -Nurp linux.before_name/drivers/acpi/acpica/exsystem.c linux.after_name/drivers/acpi/acpica/exsystem.c
--- linux.before_name/drivers/acpi/acpica/exsystem.c	2022-04-01 18:26:39.407241333 +0200
+++ linux.after_name/drivers/acpi/acpica/exsystem.c	2022-04-01 18:26:35.905285106 +0200
@@ -137,6 +137,11 @@  acpi_status acpi_ex_system_do_stall(u32
 			    "Time parameter is too large (%u)", how_long_us));
 		status = AE_AML_OPERAND_VALUE;
 	} else {
+		if (how_long_US > 100) {
+			ACPI_WARNING((AE_INFO,
+				      "Time parameter %u us > 100 us violating ACPI spec, please fix the firmware.",
+				      how_long_us));
+		}
 		acpi_os_stall(how_long_us);
 	}