Re: [PATCH v2 24/37] PCI, ACPI: Add pci_root_hp hot removalnotification support.

From: Yinghai Lu
Date: Tue Mar 13 2012 - 02:06:41 EST


On Mon, Mar 12, 2012 at 8:25 PM, Bjorn Helgaas <bhelgaas@xxxxxxxxxx> wrote:
> On Sat, Mar 10, 2012 at 12:00 AM, Yinghai Lu <yinghai@xxxxxxxxxx> 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@xxxxxxxxxx>
>> Cc: Len Brown <lenb@xxxxxxxxxx>
>> Cc: linux-acpi@xxxxxxxxxxxxxxx
>> ---
>>  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@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/