Message ID | 3206422.AfXMUDqMXZ@vostro.rjw.lan (mailing list archive) |
---|---|
State | New, archived |
Delegated to: | Bjorn Helgaas |
Headers | show |
On Thu, 2013-11-14 at 00:16 +0100, Rafael J. Wysocki wrote: > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > > Since the PCI host bridge scan handler does not set hotplug.enabled, > the check of it in acpi_bus_device_eject() effectively prevents the > root bridge hot removal from working after commit a3b1b1ef78cd > (ACPI / hotplug: Merge device hot-removal routines). However, that > check is not necessary, because the other acpi_bus_device_eject() > users, acpi_hotplug_notify_cb and acpi_eject_store(), do the same > check by themselves before executing that function. > > For this reason, remove the scan handler check from > acpi_bus_device_eject() to make PCI hot bridge hot removal work > again. I am curious why the PCI host bridge scan handler does not set hotplug.enabled. Is this how it disables hotplug via sysfs eject but enables via ACPI notification? Thanks, -Toshi -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Monday, November 18, 2013 11:10:05 AM Toshi Kani wrote: > On Thu, 2013-11-14 at 00:16 +0100, Rafael J. Wysocki wrote: > > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > > > > Since the PCI host bridge scan handler does not set hotplug.enabled, > > the check of it in acpi_bus_device_eject() effectively prevents the > > root bridge hot removal from working after commit a3b1b1ef78cd > > (ACPI / hotplug: Merge device hot-removal routines). However, that > > check is not necessary, because the other acpi_bus_device_eject() > > users, acpi_hotplug_notify_cb and acpi_eject_store(), do the same > > check by themselves before executing that function. > > > > For this reason, remove the scan handler check from > > acpi_bus_device_eject() to make PCI hot bridge hot removal work > > again. > > I am curious why the PCI host bridge scan handler does not set > hotplug.enabled. Is this how it disables hotplug via sysfs eject but > enables via ACPI notification? It just doesn't register for hotplug at all. I guess it could set that bit alone, but then it would be quite confusing and the check is not necessary anyway. Thanks, Rafael -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mon, 2013-11-18 at 22:39 +0100, Rafael J. Wysocki wrote: > On Monday, November 18, 2013 11:10:05 AM Toshi Kani wrote: > > On Thu, 2013-11-14 at 00:16 +0100, Rafael J. Wysocki wrote: > > > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > > > > > > Since the PCI host bridge scan handler does not set hotplug.enabled, > > > the check of it in acpi_bus_device_eject() effectively prevents the > > > root bridge hot removal from working after commit a3b1b1ef78cd > > > (ACPI / hotplug: Merge device hot-removal routines). However, that > > > check is not necessary, because the other acpi_bus_device_eject() > > > users, acpi_hotplug_notify_cb and acpi_eject_store(), do the same > > > check by themselves before executing that function. > > > > > > For this reason, remove the scan handler check from > > > acpi_bus_device_eject() to make PCI hot bridge hot removal work > > > again. > > > > I am curious why the PCI host bridge scan handler does not set > > hotplug.enabled. Is this how it disables hotplug via sysfs eject but > > enables via ACPI notification? > > It just doesn't register for hotplug at all. I guess it could set that > bit alone, but then it would be quite confusing and the check is not > necessary anyway. I see. Given how the PCI host bridge scan handler is integrated today, the change looks reasonable to me. Acked-by: Toshi Kani <toshi.kani@hp.com> Thanks, -Toshi -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Index: linux-pm/drivers/acpi/scan.c =================================================================== --- linux-pm.orig/drivers/acpi/scan.c +++ linux-pm/drivers/acpi/scan.c @@ -289,24 +289,17 @@ void acpi_bus_device_eject(void *data, u { struct acpi_device *device = data; acpi_handle handle = device->handle; - struct acpi_scan_handler *handler; u32 ost_code = ACPI_OST_SC_NON_SPECIFIC_FAILURE; int error; lock_device_hotplug(); mutex_lock(&acpi_scan_lock); - handler = device->handler; - if (!handler || !handler->hotplug.enabled) { - put_device(&device->dev); - goto err_support; - } - if (ost_src == ACPI_NOTIFY_EJECT_REQUEST) acpi_evaluate_hotplug_ost(handle, ACPI_NOTIFY_EJECT_REQUEST, ACPI_OST_SC_EJECT_IN_PROGRESS, NULL); - if (handler->hotplug.mode == AHM_CONTAINER) + if (device->handler && device->handler->hotplug.mode == AHM_CONTAINER) kobject_uevent(&device->dev.kobj, KOBJ_OFFLINE); error = acpi_scan_hot_remove(device);