From: Jiang Liu <liuj97@gmail.com>
To: Yinghai Lu <yinghai@kernel.org>,
Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>,
Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>,
Wen Congyang <wency@cn.fujitsu.com>,
Tang Chen <tangchen@cn.fujitsu.com>,
Taku Izumi <izumi.taku@jp.fujitsu.com>
Cc: Hanjun Guo <guohanjun@huawei.com>,
Yijing Wang <wangyijing@huawei.com>,
Gong Chen <gong.chen@linux.intel.com>,
Jiang Liu <jiang.liu@huawei.com>, Tony Luck <tony.luck@intel.com>,
Huang Ying <ying.huang@intel.com>,
Bob Moore <robert.moore@intel.com>, Len Brown <lenb@kernel.org>,
"Srivatsa S . Bhat" <srivatsa.bhat@linux.vnet.ibm.com>,
Bjorn Helgaas <bhelgaas@google.com>,
linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org,
linux-pci@vger.kernel.org
Subject: [RFC PATCH v3 00/28] ACPI based system device hotplug framework
Date: Sat, 6 Oct 2012 23:27:08 +0800 [thread overview]
Message-ID: <1349537256-21670-1-git-send-email-jiang.liu@huawei.com> (raw)
The patchset is based on "5f3d2f2e1a63679cf1c4a4210f2f1cc2f335bef6"
from git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
And you pull the changeset from git://github.com/jiangliu/linux.git acpihp
Modern high-end server may support advanced hotplug features for system
devices, including physical processor, memory board, IO extension board
and/or computer node. The ACPI specifications have provided standard
interfaces between firmware and OS to support device hotplug at runtime.
This patch series provide an ACPI based hotplug framework to support system
device hotplug at runtime, which will replace current existing ACPI device
driver based CPU/memory/CONTAINER hotplug mechanism.
The new ACPI system device hotplug framework has following design goals:
1) Provide a mechanism to detect hotplug slots by checking ACPI _EJ0 method,
ACPI PRCT (platform RAS capabilities table) and other platform specific
mechanisms.
2) Unify the way to enumerate ACPI based hotplug slots. All hotplug slots
will be enumerated by the enumeration driver, instead of by ACPI device
drivers.
3) Unify the way to handle ACPI hotplug events. All ACPI hotplug events
for system devices will be handled by a generic ACPI hotplug driver,
instead of handled by ACPI device drivers.
4) Solve dependencies among hotplug slots. You need first to remove the
memory device before removing a physical processor if a hotpluggable memory
device is connected to a hotpluggable physical processor.
5) Provide better error handling and recover.
6) Provide interface to cancel ongoing hotplug operations. It may take a
very long time to remove a memory device, so provide interface to cancel
the operation. This is important especially for memory hot-removal.
7) Support new RAS features, such as socket/memory migration.
8) Provide better user interfaces to the hotplug functionalities.
9) Trigger hotplug events/operations by software. This feature is useful
for hardware fault management and power saving.
The new ACPI based hotplug framework is modelled after PCI hotplug
architecture, which uses a hotplug driver to manage hotplug operations
and different device drivers to manage individual devices.
The new framework contains three main components as follow:
1) ACPI system device hotplug slot enumerator, which enumerates all ACPI
hotplug slots according to platform specific knowledges. And it also
provides callbacks to control each slot, such as poweron, poweroff,
get_status etc. Currently there are two built-in methods to detect
hotplug slots.
1.a) Detecting hotplug slot by checking _EJ0 method.
1.b) Faking hotplug slot. Use "modprobe acpihp_slot fake_slot=0xnn",
0x1 for CONTAINER, 0x2 for memory device, 0x4 for CPU and 0x8 PCI host
bridge. The fake slot enumerator will treat each assigned ACPI device
as a hotplug slot, so it could be used for testing on hardware platforms
without hardware hotplug capabilities.
2) ACPI system device hotplug driver, which implements a platform indenpendent
state machine for hotplug slots and also provides sysfs based user
interfaces.
3) Enhanced ACPI device drivers for CONTAINER, CPU, Memroy and PCI host bridge.
All logic to handle hotplug events has been moved from these ACPI device
driver into the hotplug driver. Now these ACPI device dirvers only take
resposibilities configure/unconfigure corresponding system devices when
hotplug happens.
Now 1), 2) and part of 2) are ready, we still need to enhance mem_hotplug
and pci_root drivers to support new hotplug framework.
On my laptop with fake slot enumerator, we got:
root@cat:/sys/devices/LNXSYSTM:00/acpihp# ls
CPU00 CPU01 CPU02 CPU03 CPU04 CPU05 CPU06 CPU07 IOX00
root@cat:/sys/devices/LNXSYSTM:00/acpihp# cd CPU07/
root@cat:/sys/devices/LNXSYSTM:00/acpihp/CPU07# ls
capabilities connect device object state subsystem uevent
configure dependency enable power status type
/* Hot-remove CPU07 */
root@cat:/sys/devices/LNXSYSTM:00/acpihp/CPU07# echo 0 > enable
/* Hot-add CPU07 */
root@cat:/sys/devices/LNXSYSTM:00/acpihp/CPU07# echo 1 > configure
V2->V3 changes:
1) Fix minor bugs and refine code
2) Implement fake slot enumerator for testing
3) Enhance ACPI container driver to support new hotplug framework
4) Enhance ACPI processor driver to support new hotplug framework
5) Resolve dependencies among slots by evaluating _EDL method.
TODO:
1) Enhance ACPI mem_hotplug driver to support new hotplug framework
2) Enhance ACPI pci_root driver to support new PCI host bridge hotplug
based on Yinghai's work
V1->V2 changes:
1) implement the ACPI hotplug driver
2) enhance ACPI container driver to support new hotplug framework
TODO:
1) handle ACPI hotplug events in ACPI hotplug driver
2) handle dependencies among slots by evaluating ACPI _EDL
3) enhance ACPI processor, memory and PCI root drivers to support new
hotplug framework
4) develop an ACPI driver for IOAPIC
5) thorough tests:)
Jiang Liu (28):
ACPIHP: introduce a framework for ACPI based system device hotplug
ACPIHP: ACPI system device hotplug slot enumerator driver
ACPIHP: detect ACPI hotplug slots by checking ACPI _EJ0 method
ACPIHP: implement a fake ACPI system device hotplug slot enumerator
ACPI: introduce interfaces to manage ACPI device reference count
ACPIHP: introduce interfaces to scan and walk ACPI devices connecting
to a slot
ACPIHP: use klist to manage ACPI devices connecting to a slot
ACPIHP: add callbacks into acpi_device_ops to support new hotplug
framework
ACPIHP: provide interfaces to associate driver specific data with
slots
ACPIHP: implement utility functions to support system device hotplug
ACPIHP: implement skeleton of ACPI system device hotplug driver
ACPIHP: analyse dependencies among ACPI hotplug slots
ACPIHP: provide interface to cancel inprogress hotplug operations
ACPIHP: configure/unconfigure system devices connecting to a hotplug
slot
ACPIHP: implement the state machine for ACPI hotplug slots
ACPIHP: implement sysfs interfaces for ACPI system device hotplug
ACPIHP: block ACPI device driver unloading when executing hotplug
operations
ACPIHP/container: change ACPI container driver to support new hotplug
framework
ACPIHP/container: move container.c into drivers/acpi/hotplug
ACPI/processor: remove dead code from processor_driver.c
ACPIHP/processor: reorganize ACPI processor driver for new hotplug
framework
ACPIHP/processor: protect accesses to device->driver_data
ACPIHP/processor: enhance processor driver to support new hotplug
framework
CPU: introduce busy flag to temporarily disable CPU online sysfs
interface
ACPIHP/processor: reject online/offline requests when doing processor
hotplug
ACPI/processor: save parsed APIC ID in processor driver data
structure
x86: simplify _acpi_map_lsapic()
ACPI/processor: serialize call to acpi_map/unmap_lsapic
arch/ia64/include/asm/cpu.h | 2 +-
arch/ia64/kernel/acpi.c | 38 +-
arch/ia64/kernel/topology.c | 15 +-
arch/x86/include/asm/cpu.h | 2 +-
arch/x86/include/asm/mpspec.h | 2 +-
arch/x86/kernel/acpi/boot.c | 82 +---
arch/x86/kernel/apic/apic.c | 8 +-
arch/x86/kernel/topology.c | 10 +-
drivers/acpi/Kconfig | 69 ++-
drivers/acpi/Makefile | 3 +-
drivers/acpi/bus.c | 22 +-
drivers/acpi/container.c | 296 -----------
drivers/acpi/hotplug/Makefile | 21 +
drivers/acpi/hotplug/acpihp.h | 37 ++
drivers/acpi/hotplug/acpihp_drv.h | 107 ++++
drivers/acpi/hotplug/cancel.c | 174 +++++++
drivers/acpi/hotplug/configure.c | 354 ++++++++++++++
drivers/acpi/hotplug/container.c | 135 +++++
drivers/acpi/hotplug/core.c | 842 ++++++++++++++++++++++++++++++++
drivers/acpi/hotplug/dependency.c | 249 ++++++++++
drivers/acpi/hotplug/device.c | 208 ++++++++
drivers/acpi/hotplug/drv_main.c | 351 +++++++++++++
drivers/acpi/hotplug/slot.c | 421 ++++++++++++++++
drivers/acpi/hotplug/slot_ej0.c | 153 ++++++
drivers/acpi/hotplug/slot_fake.c | 177 +++++++
drivers/acpi/hotplug/state_machine.c | 631 ++++++++++++++++++++++++
drivers/acpi/hotplug/sysfs.c | 245 ++++++++++
drivers/acpi/internal.h | 7 +
drivers/acpi/processor_core.c | 26 +-
drivers/acpi/processor_driver.c | 557 ++++++++++-----------
drivers/acpi/scan.c | 17 +-
drivers/base/cpu.c | 22 +
drivers/gpu/drm/i915/intel_opregion.c | 2 +
drivers/gpu/drm/nouveau/nouveau_acpi.c | 1 +
drivers/pci/hotplug/acpiphp_glue.c | 9 +-
drivers/pci/hotplug/acpiphp_ibm.c | 5 +-
drivers/pci/hotplug/sgi_hotplug.c | 6 +-
drivers/platform/x86/thinkpad_acpi.c | 2 +
drivers/pnp/pnpacpi/core.c | 23 +-
drivers/xen/cpu_hotplug.c | 2 +-
include/acpi/acpi_bus.h | 21 +-
include/acpi/acpi_hotplug.h | 323 ++++++++++++
include/acpi/container.h | 12 -
include/acpi/processor.h | 3 +
include/linux/acpi.h | 2 +-
include/linux/cpu.h | 2 +
46 files changed, 4923 insertions(+), 773 deletions(-)
delete mode 100644 drivers/acpi/container.c
create mode 100644 drivers/acpi/hotplug/Makefile
create mode 100644 drivers/acpi/hotplug/acpihp.h
create mode 100644 drivers/acpi/hotplug/acpihp_drv.h
create mode 100644 drivers/acpi/hotplug/cancel.c
create mode 100644 drivers/acpi/hotplug/configure.c
create mode 100644 drivers/acpi/hotplug/container.c
create mode 100644 drivers/acpi/hotplug/core.c
create mode 100644 drivers/acpi/hotplug/dependency.c
create mode 100644 drivers/acpi/hotplug/device.c
create mode 100644 drivers/acpi/hotplug/drv_main.c
create mode 100644 drivers/acpi/hotplug/slot.c
create mode 100644 drivers/acpi/hotplug/slot_ej0.c
create mode 100644 drivers/acpi/hotplug/slot_fake.c
create mode 100644 drivers/acpi/hotplug/state_machine.c
create mode 100644 drivers/acpi/hotplug/sysfs.c
create mode 100644 include/acpi/acpi_hotplug.h
delete mode 100644 include/acpi/container.h
--
1.7.9.5
next reply other threads:[~2012-10-06 15:29 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-06 15:27 Jiang Liu [this message]
2012-10-06 15:27 ` [RFC PATCH v3 01/28] ACPIHP: introduce a framework for ACPI based system device hotplug Jiang Liu
2012-10-06 15:27 ` [RFC PATCH v3 02/28] ACPIHP: ACPI system device hotplug slot enumerator driver Jiang Liu
2012-10-06 15:27 ` [RFC PATCH v3 03/28] ACPIHP: detect ACPI hotplug slots by checking ACPI _EJ0 method Jiang Liu
2012-10-06 15:27 ` [RFC PATCH v3 04/28] ACPIHP: implement a fake ACPI system device hotplug slot enumerator Jiang Liu
2012-10-06 15:27 ` [RFC PATCH v3 05/28] ACPI: introduce interfaces to manage ACPI device reference count Jiang Liu
2012-10-06 15:27 ` [RFC PATCH v3 06/28] ACPIHP: introduce interfaces to scan and walk ACPI devices connecting to a slot Jiang Liu
2012-10-06 15:27 ` [RFC PATCH v3 07/28] ACPIHP: use klist to manage " Jiang Liu
2012-10-06 15:27 ` [RFC PATCH v3 08/28] ACPIHP: add callbacks into acpi_device_ops to support new hotplug framework Jiang Liu
2012-10-06 15:27 ` [RFC PATCH v3 09/28] ACPIHP: provide interfaces to associate driver specific data with slots Jiang Liu
2012-10-06 15:27 ` [RFC PATCH v3 10/28] ACPIHP: implement utility functions to support system device hotplug Jiang Liu
2012-10-06 15:27 ` [RFC PATCH v3 11/28] ACPIHP: implement skeleton of ACPI system device hotplug driver Jiang Liu
2012-10-06 15:27 ` [RFC PATCH v3 12/28] ACPIHP: analyse dependencies among ACPI hotplug slots Jiang Liu
2012-10-06 15:27 ` [RFC PATCH v3 13/28] ACPIHP: provide interface to cancel inprogress hotplug operations Jiang Liu
2012-10-06 15:27 ` [RFC PATCH v3 14/28] ACPIHP: configure/unconfigure system devices connecting to a hotplug slot Jiang Liu
2012-10-06 15:27 ` [RFC PATCH v3 15/28] ACPIHP: implement the state machine for ACPI hotplug slots Jiang Liu
2012-10-06 15:27 ` [RFC PATCH v3 16/28] ACPIHP: implement sysfs interfaces for ACPI system device hotplug Jiang Liu
2012-10-06 15:27 ` [RFC PATCH v3 17/28] ACPIHP: block ACPI device driver unloading when executing hotplug operations Jiang Liu
2012-10-06 15:27 ` [RFC PATCH v3 18/28] ACPIHP/container: change ACPI container driver to support new hotplug framework Jiang Liu
2012-10-06 15:27 ` [RFC PATCH v3 19/28] ACPIHP/container: move container.c into drivers/acpi/hotplug Jiang Liu
2012-10-06 15:27 ` [RFC PATCH v3 20/28] ACPI/processor: remove dead code from processor_driver.c Jiang Liu
2012-10-06 15:27 ` [RFC PATCH v3 21/28] ACPIHP/processor: reorganize ACPI processor driver for new hotplug framework Jiang Liu
2012-10-06 15:27 ` [RFC PATCH v3 22/28] ACPIHP/processor: protect accesses to device->driver_data Jiang Liu
2012-10-06 15:27 ` [RFC PATCH v3 23/28] ACPIHP/processor: enhance processor driver to support new hotplug framework Jiang Liu
2012-10-06 15:27 ` [RFC PATCH v3 24/28] CPU: introduce busy flag to temporarily disable CPU online sysfs interface Jiang Liu
2012-10-06 15:27 ` [RFC PATCH v3 25/28] ACPIHP/processor: reject online/offline requests when doing processor hotplug Jiang Liu
2012-10-06 15:27 ` [RFC PATCH v3 26/28] ACPI/processor: save parsed APIC ID in processor driver data structure Jiang Liu
2012-10-06 15:27 ` [RFC PATCH v3 27/28] x86: simplify _acpi_map_lsapic() Jiang Liu
2012-10-06 15:27 ` [RFC PATCH v3 28/28] ACPI/processor: serialize call to acpi_map/unmap_lsapic Jiang Liu
2012-10-07 21:47 ` [RFC PATCH v3 00/28] ACPI based system device hotplug framework Rafael J. Wysocki
2012-10-08 15:45 ` Jiang Liu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1349537256-21670-1-git-send-email-jiang.liu@huawei.com \
--to=liuj97@gmail.com \
--cc=bhelgaas@google.com \
--cc=gong.chen@linux.intel.com \
--cc=guohanjun@huawei.com \
--cc=isimatu.yasuaki@jp.fujitsu.com \
--cc=izumi.taku@jp.fujitsu.com \
--cc=jiang.liu@huawei.com \
--cc=kaneshige.kenji@jp.fujitsu.com \
--cc=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=robert.moore@intel.com \
--cc=srivatsa.bhat@linux.vnet.ibm.com \
--cc=tangchen@cn.fujitsu.com \
--cc=tony.luck@intel.com \
--cc=wangyijing@huawei.com \
--cc=wency@cn.fujitsu.com \
--cc=ying.huang@intel.com \
--cc=yinghai@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).