[RFC PATCH 00/11] Hot-plug and Online/Offline framework
From: Toshi Kani
Date: Wed Dec 12 2012 - 18:26:40 EST
This patchset is an initial prototype of proposed hot-plug framework
for design review. The hot-plug framework is designed to provide
the common framework for hot-plugging and online/offline operations
of system devices, such as CPU, Memory and Node. While this patchset
only supports ACPI-based hot-plug operations, the framework itself is
designed to be platform-neural and can support other FW architectures
as necessary.
The patchset has not been fully tested yet, esp. for memory hot-plug.
Any help for testing will be very appreciated since my test setup
is limited.
The patchset is based on the linux-next branch of linux-pm.git tree.
Overview of the Framework
=========================
High-level overview of the framework is shown below. Hot-plug and
online/offline operations are supported by two types of modules -
FW-dependent modules and resource management modules. The FW-dependent
modules are FW architecture-specific, such as ACPI, and enumerate HW
devices for hot-plug operations. The resource management modules,
such as CPU and memory management, generally have platform-neutral
entry points and online or offline the enumerated HW resources for
both online/offline and hot-plug operations.
-----------> sysfs online
<----------- sysfs offline
-----------------------> hot-add
<----------------------- hot-delete, sysfs eject
FW-dep Resource Mgmt
(HW enum) (online/offline)
+-----------+-----------+
| ACPI | CPU |
|-----------| Memory |
| Other FW | etc. |
+-----------+-----------+
The framework calls the FW-dependent and resource management modules
in pre-defined order, which is analogous to the boot-up sequence,
during the operations. The ordering of the modules is symmetric
between online/hot-add operations and offline/hot-remove operations.
The modules may not call other modules directly to exceed their role.
Therefore, the role of the modules during the operations remains
consistent with their role at the boot-up sequence. For instance,
the ACPI module may not initiate online or offline of enumerated
devices.
Hot-plug Operation
==================
Serialized Startup
------------------
The framework provides an interface (hp_submit_req) to request a
hot-plug or online/offline operation. All requests are queued to
and run on a single work queue. The framework assures that there is
only a single hot-plug or online/offline operation running at a time.
A single request may however target to multiple devices.
Phased Execution
----------------
The framework proceeds hot-plug and online/offline operations in
the following three phases. The modules can register their handlers
to each phase. The framework also initiates a roll-back operation
if any hander failed in the validate or execute phase.
1) Validate Phase - Handlers validate if they support a given request
without making any changes to target device(s). Any known restrictions
and/or prerequisite conditions are checked in this phase, so that an
unsupported request can be failed before making any changes. For
instance, the memory module may check if a hot-remove request is
targeted to movable ranges.
2) Execute Phase - Handlers make requested changes within the scope
that roll-back is possible in case of a failure. Execute handlers
must implement their roll-back procedures.
3) Commit Phase - Handlers make the final changes that cannot be
rolled-back. For instance, the ACPI module invokes _EJ0 for a
hot-remove operation.
Resource Management Modules
===========================
CPU Handlers
------------
CPU handlers are provided by the CPU driver in drivers/base/cpu.c,
and perform CPU online/offline procedures when CPU device(s) is added
or deleted during an operation.
Memory Handlers
---------------
Memory handlers are provided by the memory module in mm/memory_hotplug.c,
and perform Memory online/offline procedure when memory device(s) is
added or deleted during an operation.
FW-dependent Modules
====================
ACPI Bus Handlers
-----------------
ACPI bus handlers are provided by the ACPI core in drivers/acpi/bus.c,
and construct/destruct acpi_device object(s) during a hot-plug operation.
ACPI Resource Handlers
----------------------
ACPI resource handlers are provided by the ACPI core in
drivers/acpi/hp_resource.c, and set device resource information to a
request during a hot-plug operation. This device resource information
is then consumed by the resource management modules for their online/
offline procedure.
ACPI Drivers
------------
ACPI drivers are called from the ACPI core during a hot-plug operation
through the following interfaces. ACPI drivers are not called from the
framework directly, and remain internal to the ACPI core. ACPI drivers
may not initiate online/offline of a device.
.add - Construct device-specific information to a given acpi_device.
Called at boot, hot-add and sysfs bind.
.remove - Destruct device-specific information to a given acpi_device.
Called at hot-remove and sysfs unbind.
.resource - Set device-specific resource information to a given hot-pug
request. Called at hot-add and hot-remove.
---
Toshi Kani (11):
Add hotplug.h for hotplug framework
drivers/base: Add hotplug framework code
cpu: Add cpu hotplug handlers
mm: Add memory hotplug handlers
ACPI: Add ACPI bus hotplug handlers
ACPI: Add ACPI resource hotplug handler
ACPI: Update processor driver for hotplug framework
ACPI: Update memory driver for hotplug framework
ACPI: Update container driver for hotplug framework
cpu: Update sysfs cpu/online for hotplug framework
ACPI: Update sysfs eject for hotplug framework
---
drivers/acpi/Makefile | 1 +
drivers/acpi/acpi_memhotplug.c | 290 +++++++++++++---------------------------
drivers/acpi/bus.c | 134 +++++++++++++++++++
drivers/acpi/container.c | 95 +++++--------
drivers/acpi/hp_resource.c | 86 ++++++++++++
drivers/acpi/internal.h | 1 +
drivers/acpi/processor_driver.c | 150 ++++++++++-----------
drivers/acpi/scan.c | 122 +++--------------
drivers/base/Makefile | 1 +
drivers/base/cpu.c | 135 +++++++++++++++++--
drivers/base/hotplug.c | 283 +++++++++++++++++++++++++++++++++++++++
include/acpi/acpi_bus.h | 8 +-
include/linux/hotplug.h | 187 ++++++++++++++++++++++++++
mm/memory_hotplug.c | 97 ++++++++++++++
14 files changed, 1137 insertions(+), 453 deletions(-)
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/