On Thursday, December 26, 2013 12:10:04 PM Yasuaki Ishimatsu wrote: > (2013/12/23 23:00), Rafael J. Wysocki wrote: > > From: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> > > > > Add a new ACPI hotplug profile flag, demand_offline, such that if > > set for the given ACPI device object's scan handler, it will cause > > acpi_scan_hot_remove() to check if that device object's physical > > companions are offline upfront and fail the hot removal if that > > is not the case. > > > > That flag will be useful to overcome a problem with containers on > > some system where they can only be hot-removed after some cleanup > > operations carried out by user space, which needs to be notified > > of the container hot-removal before the kernel attempts to offline > > devices in the container. In those cases the current implementation > > of acpi_scan_hot_remove() is not sufficient, because it first tries > > to offline the devices in the container and only if that is > > suffcessful it tries to offline the container itself. As a result, > > the container hot-removal notification is not delivered to user space > > at the right time. > > > > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> > > --- > > drivers/acpi/scan.c | 41 +++++++++++++++++++++++++++++++++++++---- > > include/acpi/acpi_bus.h | 3 ++- > > 2 files changed, 39 insertions(+), 5 deletions(-) > > > > Index: linux-pm/drivers/acpi/scan.c > > =================================================================== > > --- linux-pm.orig/drivers/acpi/scan.c > > +++ linux-pm/drivers/acpi/scan.c > > @@ -126,6 +126,24 @@ acpi_device_modalias_show(struct device > > } > > static DEVICE_ATTR(modalias, 0444, acpi_device_modalias_show, NULL); > > > > +static bool acpi_scan_is_offline(struct acpi_device *adev) > > +{ > > + struct acpi_device_physical_node *pn; > > + bool offline = true; > > + > > + mutex_lock(&adev->physical_node_lock); > > + > > + list_for_each_entry(pn, &adev->physical_node_list, node) > > > + if (!pn->dev->offline) { > > Please check pn->dev->bus and pn->dev->bus->offline too as follow: > > if (pn->dev->bus && pn->dev->bus->offline && > !pn->dev->offline) { > > My container has CPU and Memory and PCI root bridge. PCI root bridge > does not has offline function (pn->dev->bus->offline). So I cannot offline > the device and pn->dev->offline of the device is always 0. Therefore, > following operation always returns -EBUSY even if I offline CPUs and > all memory sections on a container device. > > echo 0 > /sys/bus/container/devices/ACPI0004:01/online I see. We simply can do if (device_supports_offline(pn->dev) && !pn->dev->offline) { there I think. Thanks, Rafael -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html