Commit dd42d9c3 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'linux-kselftest-next-6.1-rc1' of...

Merge tag 'linux-kselftest-next-6.1-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest

Pull Kselftest updates from Shuah Khan:
 "Fixes and new tests:

   - Add an amd-pstate-ut test module, used by kselftest to unit test
     amd-pstate functionality

   - Fixes and cleanups to to cpu-hotplug to delete the fault injection
     test code

   - Improvements to vm test to use top_srcdir for builds"

* tag 'linux-kselftest-next-6.1-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest:
  docs:kselftest: fix kselftest_module.h path of example module
  cpufreq: amd-pstate: Add explanation for X86_AMD_PSTATE_UT
  selftests/cpu-hotplug: Add log info when test success
  selftests/cpu-hotplug: Reserve one cpu online at least
  selftests/cpu-hotplug: Delete fault injection related code
  selftests/cpu-hotplug: Use return instead of exit
  selftests/cpu-hotplug: Correct log info
  cpufreq: amd-pstate: modify type in argument 2 for filp_open
  Documentation: amd-pstate: Add unit test introduction
  selftests: amd-pstate: Add test trigger for amd-pstate driver
  cpufreq: amd-pstate: Add test module for amd-pstate driver
  cpufreq: amd-pstate: Expose struct amd_cpudata
  selftests/vm: use top_srcdir instead of recomputing relative paths
parents 93ed07a2 83e14a57
Loading
Loading
Loading
Loading
+76 −0
Original line number Diff line number Diff line
@@ -182,6 +182,7 @@ to the ``struct sugov_cpu`` that the utilization update belongs to.
Then, ``amd-pstate`` updates the desired performance according to the CPU
scheduler assigned.

.. _processor_support:

Processor Support
=======================
@@ -282,6 +283,8 @@ efficiency frequency management method on AMD processors.
Kernel Module Options for ``amd-pstate``
=========================================

.. _shared_mem:

``shared_mem``
Use a module param (shared_mem) to enable related processors manually with
**amd_pstate.shared_mem=1**.
@@ -393,6 +396,76 @@ about part of the output. ::
 CPU_005     712          116384        39        49        166       0.7565  9645075 2214891 38431470  25.1   11.646       469         2.496         kworker/5:0-40
 CPU_006     712          116408        39        49        166       0.6769  8950227 1839034 37192089  24.06  11.272       470         2.496         kworker/6:0-1264

Unit Tests for amd-pstate
-------------------------

``amd-pstate-ut`` is a test module for testing the ``amd-pstate`` driver.

 * It can help all users to verify their processor support (SBIOS/Firmware or Hardware).

 * Kernel can have a basic function test to avoid the kernel regression during the update.

 * We can introduce more functional or performance tests to align the result together, it will benefit power and performance scale optimization.

1. Test case decriptions

        +---------+--------------------------------+------------------------------------------------------------------------------------+
        | Index   | Functions                      | Description                                                                        |
        +=========+================================+====================================================================================+
        | 0       | amd_pstate_ut_acpi_cpc_valid   || Check whether the _CPC object is present in SBIOS.                                |
        |         |                                ||                                                                                   |
        |         |                                || The detail refer to `Processor Support <processor_support_>`_.                    |
        +---------+--------------------------------+------------------------------------------------------------------------------------+
        | 1       | amd_pstate_ut_check_enabled    || Check whether AMD P-State is enabled.                                             |
        |         |                                ||                                                                                   |
        |         |                                || AMD P-States and ACPI hardware P-States always can be supported in one processor. |
        |         |                                | But AMD P-States has the higher priority and if it is enabled with                 |
        |         |                                | :c:macro:`MSR_AMD_CPPC_ENABLE` or ``cppc_set_enable``, it will respond to the      |
        |         |                                | request from AMD P-States.                                                         |
        +---------+--------------------------------+------------------------------------------------------------------------------------+
        | 2       | amd_pstate_ut_check_perf       || Check if the each performance values are reasonable.                              |
        |         |                                || highest_perf >= nominal_perf > lowest_nonlinear_perf > lowest_perf > 0.           |
        +---------+--------------------------------+------------------------------------------------------------------------------------+
        | 3       | amd_pstate_ut_check_freq       || Check if the each frequency values and max freq when set support boost mode       |
        |         |                                | are reasonable.                                                                    |
        |         |                                || max_freq >= nominal_freq > lowest_nonlinear_freq > min_freq > 0                   |
        |         |                                || If boost is not active but supported, this maximum frequency will be larger than  |
        |         |                                | the one in ``cpuinfo``.                                                            |
        +---------+--------------------------------+------------------------------------------------------------------------------------+

#. How to execute the tests

   We use test module in the kselftest frameworks to implement it.
   We create amd-pstate-ut module and tie it into kselftest.(for
   details refer to Linux Kernel Selftests [4]_).

    1. Build

        + open the :c:macro:`CONFIG_X86_AMD_PSTATE` configuration option.
        + set the :c:macro:`CONFIG_X86_AMD_PSTATE_UT` configuration option to M.
        + make project
        + make selftest ::

            $ cd linux
            $ make -C tools/testing/selftests

    #. Installation & Steps ::

        $ make -C tools/testing/selftests install INSTALL_PATH=~/kselftest
        $ sudo ./kselftest/run_kselftest.sh -c amd-pstate
        TAP version 13
        1..1
        # selftests: amd-pstate: amd-pstate-ut.sh
        # amd-pstate-ut: ok
        ok 1 selftests: amd-pstate: amd-pstate-ut.sh

    #. Results ::

         $ dmesg | grep "amd_pstate_ut" | tee log.txt
         [12977.570663] amd_pstate_ut: 1    amd_pstate_ut_acpi_cpc_valid  success!
         [12977.570673] amd_pstate_ut: 2    amd_pstate_ut_check_enabled   success!
         [12977.571207] amd_pstate_ut: 3    amd_pstate_ut_check_perf      success!
         [12977.571212] amd_pstate_ut: 4    amd_pstate_ut_check_freq      success!

Reference
===========
@@ -405,3 +478,6 @@ Reference

.. [3] Processor Programming Reference (PPR) for AMD Family 19h Model 51h, Revision A1 Processors
       https://www.amd.com/system/files/TechDocs/56569-A1-PUB.zip

.. [4] Linux Kernel Selftests,
       https://www.kernel.org/doc/html/latest/dev-tools/kselftest.html
+1 −1
Original line number Diff line number Diff line
@@ -320,7 +320,7 @@ A bare bones test module might look like this:

   #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

   #include "../tools/testing/selftests/kselftest/module.h"
   #include "../tools/testing/selftests/kselftest_module.h"

   KSTM_MODULE_GLOBALS();

+1 −0
Original line number Diff line number Diff line
@@ -1070,6 +1070,7 @@ L: linux-pm@vger.kernel.org
S:	Supported
F:	Documentation/admin-guide/pm/amd-pstate.rst
F:	drivers/cpufreq/amd-pstate*
F:	include/linux/amd-pstate.h
F:	tools/power/x86/amd_pstate_tracer/amd_pstate_trace.py
AMD PTDMA DRIVER
+15 −0
Original line number Diff line number Diff line
@@ -51,6 +51,21 @@ config X86_AMD_PSTATE

	  If in doubt, say N.

config X86_AMD_PSTATE_UT
	tristate "selftest for AMD Processor P-State driver"
	depends on X86 && ACPI_PROCESSOR
	default n
	help
	  This kernel module is used for testing. It's safe to say M here.

	  It can also be built-in without X86_AMD_PSTATE enabled.
	  Currently, only tests for amd-pstate are supported. If X86_AMD_PSTATE
	  is set disabled, it can tell the users test can only run on amd-pstate
	  driver, please set X86_AMD_PSTATE enabled.
	  In the future, comparison tests will be added. It can set amd-pstate
	  disabled and set acpi-cpufreq enabled to run test cases, then compare
	  the test results.

config X86_ACPI_CPUFREQ
	tristate "ACPI Processor P-States driver"
	depends on ACPI_PROCESSOR
+1 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ amd_pstate-y := amd-pstate.o amd-pstate-trace.o

obj-$(CONFIG_X86_ACPI_CPUFREQ)		+= acpi-cpufreq.o
obj-$(CONFIG_X86_AMD_PSTATE)		+= amd_pstate.o
obj-$(CONFIG_X86_AMD_PSTATE_UT)		+= amd-pstate-ut.o
obj-$(CONFIG_X86_POWERNOW_K8)		+= powernow-k8.o
obj-$(CONFIG_X86_PCC_CPUFREQ)		+= pcc-cpufreq.o
obj-$(CONFIG_X86_POWERNOW_K6)		+= powernow-k6.o
Loading