lkml.org 
[lkml]   [2012]   [Apr]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4/4] ACPI: Add _OST support for ACPI memory hotplug
    Date
    Changed acpi_memory_device_notify() to call ACPI _OST method
    when ACPI-based memory hotplug operation completed.

    Signed-off-by: Toshi Kani <toshi.kani@hp.com>
    ---
    drivers/acpi/acpi_memhotplug.c | 43 +++++++++++++++++++++++++++++----------
    1 files changed, 32 insertions(+), 11 deletions(-)

    diff --git a/drivers/acpi/acpi_memhotplug.c b/drivers/acpi/acpi_memhotplug.c
    index d985713..4682418 100644
    --- a/drivers/acpi/acpi_memhotplug.c
    +++ b/drivers/acpi/acpi_memhotplug.c
    @@ -341,7 +341,7 @@ static void acpi_memory_device_notify(acpi_handle handle, u32 event, void *data)
    {
    struct acpi_memory_device *mem_device;
    struct acpi_device *device;
    -
    + u32 ost_code = ACPI_OST_SC_NON_SPECIFIC_FAILURE; /* default */

    switch (event) {
    case ACPI_NOTIFY_BUS_CHECK:
    @@ -354,15 +354,20 @@ static void acpi_memory_device_notify(acpi_handle handle, u32 event, void *data)
    "\nReceived DEVICE CHECK notification for device\n"));
    if (acpi_memory_get_device(handle, &mem_device)) {
    printk(KERN_ERR PREFIX "Cannot find driver data\n");
    - return;
    + break;
    }

    - if (!acpi_memory_check_device(mem_device)) {
    - if (acpi_memory_enable_device(mem_device))
    - printk(KERN_ERR PREFIX
    - "Cannot enable memory device\n");
    + if (acpi_memory_check_device(mem_device))
    + break;
    +
    + if (acpi_memory_enable_device(mem_device)) {
    + printk(KERN_ERR PREFIX "Cannot enable memory device\n");
    + break;
    }
    +
    + ost_code = ACPI_OST_SC_SUCCESS;
    break;
    +
    case ACPI_NOTIFY_EJECT_REQUEST:
    ACPI_DEBUG_PRINT((ACPI_DB_INFO,
    "\nReceived EJECT REQUEST notification for device\n"));
    @@ -383,19 +388,35 @@ static void acpi_memory_device_notify(acpi_handle handle, u32 event, void *data)
    * TBD: Can also be disabled by Callback registration
    * with generic sysfs driver
    */
    - if (acpi_memory_disable_device(mem_device))
    - printk(KERN_ERR PREFIX
    - "Disable memory device\n");
    + if (acpi_memory_disable_device(mem_device)) {
    + printk(KERN_ERR PREFIX "Disable memory device\n");
    + /*
    + * If _EJ0 was called but failed, _OST is not
    + * necessary.
    + */
    + if (mem_device->state == MEMORY_INVALID_STATE)
    + return;
    +
    + break;
    + }
    +
    /*
    * TBD: Invoke acpi_bus_remove to cleanup data structures
    */
    - break;
    +
    + /* _EJ0 succeeded; _OST is not necessary */
    + return;
    +
    default:
    ACPI_DEBUG_PRINT((ACPI_DB_INFO,
    "Unsupported event [0x%x]\n", event));
    - break;
    +
    + /* non-hotplug event; possibly handled by other handler */
    + return;
    }

    + /* Inform firmware that the hotplug operation has completed */
    + (void) acpi_evaluate_ost(handle, event, ost_code, NULL);
    return;
    }

    --
    1.7.7.6


    \
     
     \ /
      Last update: 2012-04-11 00:27    [W:0.028 / U:0.032 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site