Changed store_online() to request a cpu online or offline operation by calling shp_submit_req(). It sets a target cpu device information with shp_add_dev_info() for the request. Signed-off-by: Toshi Kani <toshi.kani@xxxxxx> --- drivers/base/cpu.c | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/drivers/base/cpu.c b/drivers/base/cpu.c index 05534ad..cd1cbdc 100644 --- a/drivers/base/cpu.c +++ b/drivers/base/cpu.c @@ -41,27 +41,43 @@ static ssize_t __ref store_online(struct device *dev, const char *buf, size_t count) { struct cpu *cpu = container_of(dev, struct cpu, dev); - ssize_t ret; + struct shp_request *shp_req; + struct shp_device *shp_dev; + enum shp_operation operation; + ssize_t ret = count; - cpu_hotplug_driver_lock(); switch (buf[0]) { case '0': - ret = cpu_down(cpu->dev.id); - if (!ret) - kobject_uevent(&dev->kobj, KOBJ_OFFLINE); + operation = SHP_ONLINE_DEL; break; case '1': - ret = cpu_up(cpu->dev.id); - if (!ret) - kobject_uevent(&dev->kobj, KOBJ_ONLINE); + operation = SHP_ONLINE_ADD; break; default: - ret = -EINVAL; + return -EINVAL; + } + + shp_req = shp_alloc_request(operation); + if (!shp_req) + return -ENOMEM; + + shp_dev = kzalloc(sizeof(*shp_dev), GFP_KERNEL); + if (!shp_dev) { + kfree(shp_req); + return -ENOMEM; + } + + shp_dev->device = dev; + shp_dev->class = SHP_CLS_CPU; + shp_dev->info.cpu.cpu_id = cpu->dev.id; + shp_add_dev_info(shp_req, shp_dev); + + if (shp_submit_req(shp_req)) { + kfree(shp_dev); + kfree(shp_req); + return -EINVAL; } - cpu_hotplug_driver_unlock(); - if (ret >= 0) - ret = count; return ret; } static DEVICE_ATTR(online, 0644, show_online, store_online); -- 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