• Kevin Brodsky's avatar
    drivers: psci: PSCI checker module · ea8b1c4a
    Kevin Brodsky authored
    On arm and arm64, PSCI is one of the possible firmware interfaces
    used for power management. This includes both turning CPUs on and off,
    and suspending them (entering idle states).
    
    This patch adds a PSCI checker module that enables basic testing of
    PSCI operations during startup. There are two main tests: CPU
    hotplugging and suspending.
    
    In the hotplug tests, the hotplug API is used to turn off and on again
    all CPUs in the system, and then all CPUs in each cluster, checking
    the consistency of the return codes.
    
    In the suspend tests, a high-priority thread is created on each core
    and uses low-level cpuidle functionalities to enter suspend, in all
    the possible states and multiple times. This should allow a maximum
    number of CPUs to enter the same sleep state at the same or slightly
    different time.
    
    In essence, the suspend tests use a principle similar to that of the
    intel_powerclamp driver (drivers/thermal/intel_powerclamp.c), but the
    threads are only kept for the duration of the test (they are already
    gone when userspace is started) and it does not require to stop/start
    the tick.
    
    While in theory power management PSCI functions (CPU_{ON,OFF,SUSPEND})
    could be directly called, this proved too difficult as it would imply
    the duplication of all the logic used by the kernel to allow for a
    clean shutdown/bringup/suspend of the CPU (the deepest sleep states
    implying potentially the shutdown of the CPU).
    
    Note that this file cannot be compiled as a loadable module, since it
    uses a number of non-exported identifiers (essentially for
    PSCI-specific checks and direct use of cpuidle) and relies on the
    absence of userspace to avoid races when calling hotplug and cpuidle
    functions.
    
    For now at least, CONFIG_PSCI_CHECKER is mutually exclusive with
    CONFIG_TORTURE_TEST, because torture tests may also use hotplug and
    cause false positives in the hotplug tests.
    
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Kevin Hilman <khilman@kernel.org>
    Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
    Cc: James Morse <james.morse@arm.com>
    Cc: Sudeep Holla <sudeep.holla@arm.com>
    Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Acked-by: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> [torture test config]
    Signed-off-by: default avatarKevin Brodsky <kevin.brodsky@arm.com>
    [lpieralisi: added cpuidle locking, reworded commit log/kconfig entry]
    Signed-off-by: default avatarLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
    Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    ea8b1c4a
psci_checker.c 12.6 KB