04 Jul, 2013

1 commit

  • Pull PCI changes from Bjorn Helgaas:
    "PCI device hotplug
    - Add pci_alloc_dev() interface (Gu Zheng)
    - Add pci_bus_get()/put() for reference counting (Jiang Liu)
    - Fix SR-IOV reference count issues (Jiang Liu)
    - Remove unused acpi_pci_roots list (Jiang Liu)

    MSI
    - Conserve interrupt resources on x86 (Alexander Gordeev)

    AER
    - Force fatal severity when component has been reset (Betty Dall)
    - Reset link below Root Port as well as Downstream Port (Betty Dall)
    - Fix "Firmware first" flag setting (Bjorn Helgaas)
    - Don't parse HEST for non-PCIe devices (Bjorn Helgaas)

    ASPM
    - Warn when we can't disable ASPM as driver requests (Bjorn Helgaas)

    Miscellaneous
    - Add CircuitCo PCI IDs (Darren Hart)
    - Add AMD CZ SATA and SMBus PCI IDs (Shane Huang)
    - Work around Ivytown NTB BAR size issue (Jon Mason)
    - Detect invalid initial BAR values (Kevin Hao)
    - Add pcibios_release_device() (Sebastian Ott)
    - Fix powerpc & sparc PCI_UNKNOWN power state usage (Bjorn Helgaas)"

    * tag 'pci-v3.11-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: (51 commits)
    MAINTAINERS: Add ACPI folks for ACPI-related things under drivers/pci
    PCI: Add CircuitCo vendor ID and subsystem ID
    PCI: Use pdev->pm_cap instead of pci_find_capability(..,PCI_CAP_ID_PM)
    PCI: Return early on allocation failures to unindent mainline code
    PCI: Simplify IOV implementation and fix reference count races
    PCI: Drop redundant setting of bus->is_added in virtfn_add_bus()
    unicore32/PCI: Remove redundant call of pci_bus_add_devices()
    m68k/PCI: Remove redundant call of pci_bus_add_devices()
    PCI / ACPI / PM: Use correct power state strings in messages
    PCI: Fix comment typo for pcie_pme_remove()
    PCI: Rename pci_release_bus_bridge_dev() to pci_release_host_bridge_dev()
    PCI: Fix refcount issue in pci_create_root_bus() error recovery path
    ia64/PCI: Clean up pci_scan_root_bus() usage
    PCI/AER: Reset link for devices below Root Port or Downstream Port
    ACPI / APEI: Force fatal AER severity when component has been reset
    PCI/AER: Remove "extern" from function declarations
    PCI/AER: Move AER severity defines to aer.h
    PCI/AER: Set dev->__aer_firmware_first only for matching devices
    PCI/AER: Factor out HEST device type matching
    PCI/AER: Don't parse HEST table for non-PCIe devices
    ...

    Linus Torvalds
     

28 Jun, 2013

4 commits

  • * acpi-assorted:
    ACPI / EC: Add HP Folio 13 to ec_dmi_table in order to skip DSDT scan
    ACPI: Add CMOS RTC Operation Region handler support
    ACPI: Remove unused flags in acpi_device_flags
    ACPI: Remove useless initializers
    ACPI / battery: Make sure all spaces are in correct places
    ACPI: add _STA evaluation at do_acpi_find_child()
    ACPI / EC: access user space with get_user()/put_user()

    Rafael J. Wysocki
     
  • * acpi-pm:
    ACPI / PM: Rework and clean up acpi_dev_pm_get_state()
    ACPI / PM: Replace ACPI_STATE_D3 with ACPI_STATE_D3_COLD in device_pm.c
    ACPI / PM: Rename function acpi_device_power_state() and make it static
    ACPI / PM: acpi_processor_suspend() can be static
    xen / ACPI / sleep: Register an acpi_suspend_lowlevel callback.
    x86 / ACPI / sleep: Provide registration for acpi_suspend_lowlevel.

    Rafael J. Wysocki
     
  • * acpica: (21 commits)
    ACPICA: Update version to 20130517
    ACPICA: _CST repair: Handle null package entries
    ACPICA: Add several repairs for _CST predefined name
    ACPICA: Move _PRT repair into the standard complex repair module
    ACPICA: Clear events initialized flag upon event component termination
    ACPICA: Fix possible memory leak in GPE init error path
    ACPICA: ACPICA Termination: Delete global lock pending lock
    ACPICA: Update interface to acpi_ut_valid_acpi_name()
    ACPICA: Do not use extended sleep registers unless HW-reduced bit is set
    ACPICA: Split table print utilities to a new a separate file
    ACPICA: Add option to disable loading of SSDTs from the RSDT/XSDT
    ACPICA: Standardize all switch() blocks
    ACPICA: Split internal error msg routines to a separate file
    ACPICA: Split buffer dump routines into separate file
    ACPICA: Update version to 20130418
    ACPICA: Update for "orphan" embedded controller _REG method support
    ACPICA: Remove unused macros, no functional change
    ACPICA: Predefined name support: Remove unused local variable
    ACPICA: Add argument typechecking for all predefined ACPI names
    ACPICA: Add BIOS error interface for predefined name validation support
    ...

    Rafael J. Wysocki
     
  • * acpi-hotplug:
    ACPI: Do not use CONFIG_ACPI_HOTPLUG_MEMORY_MODULE
    ACPI / cpufreq: Add ACPI processor device IDs to acpi-cpufreq
    Memory hotplug: Move alternative function definitions to header
    ACPI / processor: Fix potential NULL pointer dereference in acpi_processor_add()
    Memory hotplug / ACPI: Simplify memory removal
    ACPI / scan: Add second pass of companion offlining to hot-remove code
    Driver core / MM: Drop offline_memory_block()
    ACPI / processor: Pass processor object handle to acpi_bind_one()
    ACPI: Drop removal_type field from struct acpi_device
    Driver core / memory: Simplify __memory_block_change_state()
    ACPI / processor: Initialize per_cpu(processors, pr->id) properly
    CPU: Fix sysfs cpu/online of offlined CPUs
    Driver core: Introduce offline/online callbacks for memory blocks
    ACPI / memhotplug: Bind removable memory blocks to ACPI device nodes
    ACPI / processor: Use common hotplug infrastructure
    ACPI / hotplug: Use device offline/online for graceful hot-removal
    Driver core: Use generic offline/online for CPU offline/online
    Driver core: Add offline/online device operations

    Rafael J. Wysocki
     

24 Jun, 2013

1 commit

  • The interactions between the ACPI dock driver and the ACPI-based PCI
    hotplug (acpiphp) are currently problematic because of ordering
    issues during hot-remove operations.

    First of all, the current ACPI glue code expects that physical
    devices will always be deleted before deleting the companion ACPI
    device objects. Otherwise, acpi_unbind_one() will fail with a
    warning message printed to the kernel log, for example:

    [ 185.026073] usb usb5: Oops, 'acpi_handle' corrupt
    [ 185.035150] pci 0000:1b:00.0: Oops, 'acpi_handle' corrupt
    [ 185.035515] pci 0000:18:02.0: Oops, 'acpi_handle' corrupt
    [ 180.013656] port1: Oops, 'acpi_handle' corrupt

    This means, in particular, that struct pci_dev objects have to
    be deleted before the struct acpi_device objects they are "glued"
    with.

    Now, the following happens the during the undocking of an ACPI-based
    dock station:
    1) hotplug_dock_devices() invokes registered hotplug callbacks to
    destroy physical devices associated with the ACPI device objects
    depending on the dock station. It calls dd->ops->handler() for
    each of those device objects.
    2) For PCI devices dd->ops->handler() points to
    handle_hotplug_event_func() that queues up a separate work item
    to execute _handle_hotplug_event_func() for the given device and
    returns immediately. That work item will be executed later.
    3) hotplug_dock_devices() calls dock_remove_acpi_device() for each
    device depending on the dock station. This runs acpi_bus_trim()
    for each of them, which causes the underlying ACPI device object
    to be destroyed, but the work items queued up by
    handle_hotplug_event_func() haven't been started yet.
    4) _handle_hotplug_event_func() queued up in step 2) are executed
    and cause the above failure to happen, because the PCI devices
    they handle do not have the companion ACPI device objects any
    more (those objects have been deleted in step 3).

    The possible breakage doesn't end here, though, because
    hotplug_dock_devices() may return before at least some of the
    _handle_hotplug_event_func() work items spawned by it have a
    chance to complete and then undock() will cause _DCK to be
    evaluated and that will cause the devices handled by the
    _handle_hotplug_event_func() to go away possibly while they are
    being accessed.

    This means that dd->ops->handler() for PCI devices should not point
    to handle_hotplug_event_func(). Instead, it should point to a
    function that will do the work of _handle_hotplug_event_func()
    synchronously. For this reason, introduce such a function,
    hotplug_event_func(), and modity acpiphp_dock_ops to point to
    it as the handler.

    Unfortunately, however, this is not sufficient, because if the dock
    code were not changed further, hotplug_event_func() would now
    deadlock with hotplug_dock_devices() that called it, since it would
    run unregister_hotplug_dock_device() which in turn would attempt to
    acquire the dock station's hp_lock mutex already acquired by
    hotplug_dock_devices().

    To resolve that deadlock use the observation that
    unregister_hotplug_dock_device() won't need to acquire hp_lock
    if PCI bridges the devices on the dock station depend on are
    prevented from being removed prematurely while the first loop in
    hotplug_dock_devices() is in progress.

    To make that possible, introduce a mechanism by which the callers of
    register_hotplug_dock_device() can provide "init" and "release"
    routines that will be executed, respectively, during the addition
    and removal of the physical device object associated with the
    given ACPI device handle. Make acpiphp use two new functions,
    acpiphp_dock_init() and acpiphp_dock_release(), that call
    get_bridge() and put_bridge(), respectively, on the acpiphp bridge
    holding the given device, for this purpose.

    In addition to that, remove the dock station's list of
    "hotplug devices" and make the dock code always walk the whole list
    of "dependent devices" instead in such a way that the loops in
    hotplug_dock_devices() and dock_event() (replacing the loops over
    "hotplug devices") will take references to the list entries that
    register_hotplug_dock_device() has been called for. That prevents
    the "release" routines associated with those entries from being
    called while the given entry is being processed and for PCI
    devices this means that their bridges won't be removed (by a
    concurrent thread) while hotplug_event_func() handling them is
    being executed.

    This change is based on two earlier patches from Jiang Liu.

    References: https://bugzilla.kernel.org/show_bug.cgi?id=59501
    Reported-and-tested-by: Alexander E. Patrakov
    Tracked-down-by: Jiang Liu
    Tested-by: Illya Klymov
    Signed-off-by: Rafael J. Wysocki
    Acked-by: Yinghai Lu
    Cc: 3.9+

    Rafael J. Wysocki
     

20 Jun, 2013

4 commits

  • Version 20130517.

    Signed-off-by: Bob Moore
    Signed-off-by: Lv Zheng
    Acked-by: Len Brown
    Signed-off-by: Rafael J. Wysocki

    Bob Moore
     
  • Commit 7cd8407 (ACPI / PM: Do not execute _PS0 for devices without
    _PSC during initialization) introduced a regression on some systems
    with Intel Lynxpoint Low-Power Subsystem (LPSS) where some devices
    need to be powered up during initialization, but their device objects
    in the ACPI namespace have _PS0 and _PS3 only (without _PSC or power
    resources).

    To work around this problem, make the ACPI LPSS driver power up
    devices it knows about by using a new helper function
    acpi_device_fix_up_power() that does all of the necessary
    sanity checks and calls acpi_dev_pm_explicit_set() to put the
    device into D0.

    Reported-and-tested-by: Mika Westerberg
    Signed-off-by: Rafael J. Wysocki

    Rafael J. Wysocki
     
  • There is a name clash between function acpi_device_power_state()
    defined in drivers/acpi/device_pm.c and structure type
    acpi_device_power_state defined in include/acpi/acpi_bus.h, which
    may be resolved by renaming the function. Additionally, that
    funtion may be made static, because it is not used anywhere outside
    of the file it is defined in.

    Rename acpi_device_power_state() to acpi_dev_pm_get_state(), which
    better reflects its purpose, and make it static.

    Signed-off-by: Rafael J. Wysocki

    Rafael J. Wysocki
     
  • suprise_removal_ok and performance_manageable in struct
    acpi_device_flags are not used by any code. So, remove
    them.

    Signed-off-by: Toshi Kani
    Signed-off-by: Rafael J. Wysocki

    Toshi Kani
     

16 Jun, 2013

1 commit

  • Optionally do not load any SSDTs from the RSDT/XSDT during
    initialization. This can be useful for overriding SSDTs
    using DSDT overriding, thus useful for debugging ACPI
    problems on some machines. Lv Zheng. ACPICA BZ 1005.

    References: https://bugs.acpica.org/show_bug.cgi?id=1005
    Signed-off-by: Lv Zheng
    Signed-off-by: Bob Moore
    Signed-off-by: Rafael J. Wysocki

    Lv Zheng
     

02 Jun, 2013

4 commits


30 May, 2013

1 commit


22 May, 2013

1 commit

  • Currently, drivers/acpi/device_pm.c depends on CONFIG_PM and all of
    the functions defined in there are replaced with static inline stubs
    if that option is unset. However, CONFIG_PM means, roughly, "runtime
    PM or suspend/hibernation support" and some of those functions are
    useful regardless of that. For example, they are used by the ACPI
    fan driver for controlling fans and acpi_device_set_power() is called
    during device removal. Moreover, device initialization may depend on
    setting device power states properly.

    For these reasons, make the routines manipulating ACPI device power
    states defined in drivers/acpi/device_pm.c available for CONFIG_PM
    unset too.

    Reported-by: Zhang Rui
    Reported-and-tested-by: Michel Lespinasse
    Signed-off-by: Rafael J. Wysocki
    Cc: 3.9+

    Rafael J. Wysocki
     

12 May, 2013

4 commits

  • Split the ACPI processor driver into two parts, one that is
    non-modular, resides in the ACPI core and handles the enumeration
    and hotplug of processors and one that implements the rest of the
    existing processor driver functionality.

    The non-modular part uses an ACPI scan handler object to enumerate
    processors on the basis of information provided by the ACPI namespace
    and to hook up with the common ACPI hotplug infrastructure. It also
    populates the ACPI handle of each processor device having a
    corresponding object in the ACPI namespace, which allows the driver
    proper to bind to those devices, and makes the driver bind to them
    if it is readily available (i.e. loaded) when the scan handler's
    .attach() routine is running.

    There are a few reasons to make this change.

    First, switching the ACPI processor driver to using the common ACPI
    hotplug infrastructure reduces code duplication and size considerably,
    even though a new file is created along with a header comment etc.

    Second, since the common hotplug code attempts to offline devices
    before starting the (non-reversible) removal procedure, it will abort
    (and possibly roll back) hot-remove operations involving processors
    if cpu_down() returns an error code for one of them instead of
    continuing them blindly (if /sys/firmware/acpi/hotplug/force_remove
    is unset). That is a more desirable behavior than what the current
    code does.

    Finally, the separation of the scan/hotplug part from the driver
    proper makes it possible to simplify the driver's .remove() routine,
    because it doesn't need to worry about the possible cleanup related
    to processor removal any more (the scan/hotplug part is responsible
    for that now) and can handle device removal and driver removal
    symmetricaly (i.e. as appropriate).

    Some user-visible changes in sysfs are made (for example, the
    'sysdev' link from the ACPI device node to the processor device's
    directory is gone and a 'physical_node' link is present instead
    and a corresponding 'firmware_node' is present in the processor
    device's directory, the processor driver is now visible under
    /sys/bus/cpu/drivers/ and bound to the processor device), but
    that shouldn't affect the functionality that users care about
    (frequency scaling, C-states and thermal management).

    Tested on my venerable Toshiba Portege R500.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Greg Kroah-Hartman
    Reviewed-by: Toshi Kani

    Rafael J. Wysocki
     
  • Modify the generic ACPI hotplug code to be able to check if devices
    scheduled for hot-removal may be gracefully removed from the system
    using the device offline/online mechanism introduced previously.

    Namely, make acpi_scan_hot_remove() handling device hot-removal call
    device_offline() for all physical companions of the ACPI device nodes
    involved in the operation and check the results. If any of the
    device_offline() calls fails, the function will not progress to the
    removal phase (which cannot be aborted), unless its (new) force
    argument is set (in case of a failing offline it will put the devices
    offlined by it back online).

    In support of 'forced' device hot-removal, add a new sysfs attribute
    'force_remove' that will reside under /sys/firmware/acpi/hotplug/.

    Signed-off-by: Rafael J. Wysocki
    Reviewed-by: Toshi Kani

    Rafael J. Wysocki
     
  • Fixes warning during compilation with clang.

    [rjw: Subject and changelog]
    Signed-off-by: Jan-Simon Möller
    Signed-off-by: Rafael J. Wysocki

    Jan-Simon Möller
     
  • The system suspend routine of the ACPI processor driver saves
    the BUS_MASTER_RLD register and its resume routine restores it.
    However, there can be only one such register in the system and it
    really should be saved after non-boot CPUs have been offlined and
    restored before they are put back online during resume.

    For this reason, move the saving and restoration of BUS_MASTER_RLD
    to syscore suspend and syscore resume, respectively, and drop the no
    longer necessary suspend/resume callbacks from the ACPI processor
    driver.

    Signed-off-by: Rafael J. Wysocki

    Rafael J. Wysocki
     

28 Apr, 2013

3 commits

  • * acpi-assorted: (21 commits)
    ACPI / thermal: do not always return THERMAL_TREND_RAISING for active trip points
    ACPI: video: correct acpi_video_bus_add error processing
    ACPI: Fix wrong parameter passed to memblock_reserve
    acpi: video: enhance the quirk detect logic of _BQC
    ACPI: update comments for acpi_event_status
    ACPI: remove "config ACPI_DEBUG_FUNC_TRACE"
    PCI / ACPI: Don't query OSC support with all possible controls
    ACPI / processor_thermal: avoid null pointer deference error
    ACPI / fan: avoid null pointer deference error
    ACPI / video: Fix applying indexed initial brightness value.
    ACPI / video: Make logic a little easier to understand.
    ACPI / video: Fix brightness control initialization for some laptops.
    ACPI: Use resource_size() in osl.c
    ACPI / acpi_pad: Used PTR_RET
    ACPI: suppress compiler warning in container.c
    ACPI: suppress compiler warning in battery.c
    ACPI: suppress compiler warnings in processor_throttling.c
    ACPI: suppress compiler warnings in button.c
    ACPI: replace kmalloc+memcpy with kmemdup
    ACPI: Remove acpi_pci_bind_root() definition
    ...

    Rafael J. Wysocki
     
  • * acpica: (33 commits)
    ACPICA: Update version to 20130328
    ACPICA: Add a lock to the internal object reference count mechanism
    ACPICA: Fix a format string for 64-bit generation
    ACPICA: Remove FORCE_DELETE option for global reference count mechanism
    ACPICA: Improve error message for Index() operator
    ACPICA: FADT: Remove extraneous warning for very large GPE registers
    ACPICA: Fix a typo in a function header, no functional change
    ACPICA: Fix a typo in an error message
    ACPICA: Fix for some comments/headers
    ACPICA: _OSI Support: handle any errors from acpi_os_acquire_mutex()
    ACPICA: Predefine names: Add allowed argument types to master info table
    ACPI: Set length even for TYPE_END_TAG acpi resource
    ACPICA: Update version to 20130214
    ACPICA: Object repair: Allow 0-length packages for variable-length packages
    ACPICA: Disassembler: Add warnings for unresolved control methods
    ACPICA: Return object repair: Add resource template repairs
    ACPICA: Return object repair: Add string-to-unicode conversion
    ACPICA: Split object conversion functions to a new file
    ACPICA: Add mechanism for early object repairs on a per-name basis
    ACPICA: Remove trailing comma in enum declarations
    ...

    Rafael J. Wysocki
     
  • * acpi-hotplug:
    ACPI / memhotplug: Remove info->failed bit
    ACPI / memhotplug: set info->enabled for memory present at boot time
    ACPI: Verify device status after eject
    acpi: remove reference to ACPI_HOTPLUG_IO
    ACPI: Update _OST handling for notify
    ACPI: Update PNPID match handling for notify
    ACPI: Update PNPID set/free interfaces
    ACPI: Remove acpi_device dependency in acpi_device_set_id()
    ACPI / hotplug: Make acpi_hotplug_profile_ktype static
    ACPI / scan: Make memory hotplug driver use struct acpi_scan_handler
    ACPI / container: Use hotplug profile user space interface
    ACPI / hotplug: Introduce user space interface for hotplug profiles
    ACPI / scan: Introduce acpi_scan_handler_matching()
    ACPI / container: Use common hotplug code
    ACPI / scan: Introduce common code for ACPI-based device hotplug
    ACPI / scan: Introduce acpi_scan_match_handler()

    Rafael J. Wysocki
     

22 Apr, 2013

1 commit

  • ACPI_EVENT_FLAG_HANDLE is a flag for acpi_event_status.
    When it is set, it indicates that the ACPI event,
    either GPE or fixed event, is associated with a handler.

    Update the comments to reflect this flag.

    Signed-off-by: Zhang Rui
    Signed-off-by: Rafael J. Wysocki

    Zhang Rui
     

12 Apr, 2013

1 commit


25 Mar, 2013

2 commits

  • This patch updates the internal operations of acpi_device_set_id()
    to setup acpi_device_pnp without using acpi_device. There is no
    functional change to acpi_device_set_id() in this patch.

    acpi_pnp_type is added to acpi_device_pnp, so that PNPID type is
    self-contained within acpi_device_pnp. acpi_add_id(), acpi_bay_match(),
    acpi_dock_match(), acpi_ibm_smbus_match() and acpi_is_video_device()
    are changed to take acpi_handle as an argument, instead of acpi_device.

    Signed-off-by: Toshi Kani
    Signed-off-by: Rafael J. Wysocki

    Toshi Kani
     
  • Noticed that acpi_pci_bind_root(), which has been deleted,
    is left defined in acpi_driver.h. So delete this definition
    from the header as well.

    Signed-off-by: Toshi Kani
    Signed-off-by: Rafael J. Wysocki

    Toshi Kani
     

13 Mar, 2013

1 commit

  • Pull Xen fixes from Konrad Rzeszutek Wilk:
    - Compile warnings and errors (one on x86, two on ARM)
    - WARNING in xen-pciback
    - Use the acpi_processor_get_performance_info instead of the 'register'
    version

    * tag 'stable/for-linus-3.9-rc2-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen:
    xen/acpi: remove redundant acpi/acpi_drivers.h include
    xen: arm: mandate EABI and use generic atomic operations.
    acpi: Export the acpi_processor_get_performance_info
    xen/pciback: Don't disable a PCI device that is already disabled.

    Linus Torvalds
     

12 Mar, 2013

9 commits


06 Mar, 2013

1 commit

  • The git commit d5aaffa9dd531c978c6f3fea06a2972653bd7fc8
    (cpufreq: handle cpufreq being disabled for all exported function)
    tightens the cpufreq API by returning errors when disable_cpufreq()
    had been called.

    The problem we are hitting is that the module xen-acpi-processor which
    uses the ACPI's functions: acpi_processor_register_performance,
    acpi_processor_preregister_performance, and acpi_processor_notify_smm
    fails at acpi_processor_register_performance with -22.

    Note that earlier during bootup in arch/x86/xen/setup.c there is also
    an call to cpufreq's API: disable_cpufreq().

    This is b/c we want the Linux kernel to parse the ACPI data, but leave
    the cpufreq decisions to the hypervisor.

    In v3.9 all the checks that d5aaffa9dd531c978c6f3fea06a2972653bd7fc8
    added are now hit and the calls to cpufreq_register_notifier will now
    fail. This means that acpi_processor_ppc_init ends up printing:

    "Warning: Processor Platform Limit not supported"

    and the acpi_processor_ppc_status is not set.

    The repercussions of that is that the call to
    acpi_processor_register_performance fails right away at:

    if (!(acpi_processor_ppc_status & PPC_REGISTERED))

    and we don't progress any further on parsing and extracting the _P*
    objects.

    The only reason the Xen code called that function was b/c it was
    exported and the only way to gather the P-states. But we can also
    just make acpi_processor_get_performance_info be exported and not
    use acpi_processor_register_performance. This patch does so.

    Acked-by: Rafael J. Wysocki
    Signed-off-by: Konrad Rzeszutek Wilk

    Konrad Rzeszutek Wilk
     

04 Mar, 2013

1 commit

  • Introduce user space interface for manipulating hotplug profiles
    associated with ACPI scan handlers.

    The interface consists of sysfs directories under
    /sys/firmware/acpi/hotplug/, one for each hotplug profile, containing
    an attribute allowing user space to manipulate the enabled field of
    the corresponding profile. Namely, switching the enabled attribute
    from '0' to '1' will cause the common hotplug notify handler to be
    installed for all ACPI namespace objects representing devices matching
    the scan handler associated with the given hotplug profile (and
    analogously for the converse switch).

    Drivers willing to use the new user space interface should add their
    ACPI scan handlers with the help of new funtion
    acpi_scan_add_handler_with_hotplug().

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Toshi Kani
    Tested-by: Toshi Kani

    Rafael J. Wysocki