Re: [RFC PATCH v3 00/28] ACPI based system device hotplug framework

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On Saturday 06 of October 2012 23:27:08 Jiang Liu wrote:
> 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.

Which of the patches does that?

> 2) Unify the way to enumerate ACPI based hotplug slots. All hotplug slots
> will be enumerated by the enumeration driver

What is 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.

What are "system devices"

> 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.

Well, this may or may not be OK.  I'm going to review the patches, but I can't
really say when it's going to happen (not really soon for sure).

> 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

And I seriously think this is too much material for a single patchset.

Please consider splitting it into smaller and well-documented series of
patches, so that the reviewers can understand things more easily.

Thanks,
Rafael


-- 
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux