lkml.org 
[lkml]   [2012]   [Mar]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: [PATCH v2 24/37] PCI, ACPI: Add pci_root_hp hot removal notification support.
    From
    On Mon, Mar 12, 2012 at 8:25 PM, Bjorn Helgaas <bhelgaas@google.com> wrote:
    > On Sat, Mar 10, 2012 at 12:00 AM, Yinghai Lu <yinghai@kernel.org> wrote:
    >> Add missing hot_remove support for root device.
    >>
    >> How to use it?
    >> Find out root bus number to acpi root name mapping from dmesg or /sys
    >>
    >>  echo "\_SB.PCIB 3" > /proc/acpi/sci/notify
    >> to remove root bus
    >
    > Same comments as before: this is definitely NOT the way users should
    > use this.  If you want to do that for debugging the ACPI notification
    > path, fine, but the normal way is for the platform to generate this
    > notification.  I think the normal way for users to manually remove an
    > ACPI device should be something like:
    >
    >    echo 1 > /sys/devices/LNXSYSTM:00/device:00/PNP0A08:00/remove
    >
    > just like we do for PCI devices.

    notify way looks more like really physical hotadd/remove.

    pci bus/remove and other is not really, because when you are using
    /sys, you may still need to hold
    one reference to bus or device.

    >
    >> Signed-off-by: Yinghai Lu <yinghai@kernel.org>
    >> Cc: Len Brown <lenb@kernel.org>
    >> Cc: linux-acpi@vger.kernel.org
    >> ---
    >>  drivers/acpi/pci_root_hp.c |   61 ++++++++++++++++++++++++++++++++++++++++++++
    >>  1 files changed, 61 insertions(+), 0 deletions(-)
    >>
    >> diff --git a/drivers/acpi/pci_root_hp.c b/drivers/acpi/pci_root_hp.c
    >> index dc11e81..f5585f5 100644
    >> --- a/drivers/acpi/pci_root_hp.c
    >> +++ b/drivers/acpi/pci_root_hp.c
    >> @@ -73,6 +73,12 @@ static void add_acpi_root_bridge(acpi_handle handle)
    >>        list_add(&bridge->list, &acpi_root_bridge_list);
    >>  }
    >>
    >> +static void remove_acpi_root_bridge(struct acpi_root_bridge *bridge)
    >> +{
    >> +       list_del(&bridge->list);
    >> +       kfree(bridge);
    >> +}
    >> +
    >>  struct acpi_root_hp_work {
    >>        struct work_struct work;
    >>        acpi_handle handle;
    >> @@ -142,6 +148,55 @@ static void handle_root_bridge_insertion(acpi_handle handle)
    >>                printk(KERN_ERR "cannot start bridge\n");
    >>  }
    >>
    >> +static int acpi_root_evaluate_object(acpi_handle handle, char *cmd, int val)
    >> +{
    >> +       acpi_status status;
    >> +       struct acpi_object_list arg_list;
    >> +       union acpi_object arg;
    >> +
    >> +       arg_list.count = 1;
    >> +       arg_list.pointer = &arg;
    >> +       arg.type = ACPI_TYPE_INTEGER;
    >> +       arg.integer.value = val;
    >> +
    >> +       status = acpi_evaluate_object(handle, cmd, &arg_list, NULL);
    >> +       if (ACPI_FAILURE(status)) {
    >> +               printk(KERN_WARNING "%s: %s to %d failed\n",
    >> +                                __func__, cmd, val);
    >> +               return -1;
    >> +       }
    >> +
    >> +       return 0;
    >
    > This function really has nothing to do with host bridges.  Are you
    > sure there's no generic function you can use instead?

    seems not.
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2012-03-13 07:09    [W:0.031 / U:118.836 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site