| .. | .. |
|---|
| 31 | 31 | #include <linux/init.h> |
|---|
| 32 | 32 | #include <linux/smp.h> |
|---|
| 33 | 33 | #include <linux/irq.h> |
|---|
| 34 | +#include <asm/io_apic.h> |
|---|
| 34 | 35 | #include <asm/cpu.h> |
|---|
| 35 | 36 | |
|---|
| 36 | 37 | static DEFINE_PER_CPU(struct x86_cpu, cpu_devices); |
|---|
| .. | .. |
|---|
| 59 | 60 | */ |
|---|
| 60 | 61 | int _debug_hotplug_cpu(int cpu, int action) |
|---|
| 61 | 62 | { |
|---|
| 62 | | - struct device *dev = get_cpu_device(cpu); |
|---|
| 63 | 63 | int ret; |
|---|
| 64 | 64 | |
|---|
| 65 | 65 | if (!cpu_is_hotpluggable(cpu)) |
|---|
| 66 | 66 | return -EINVAL; |
|---|
| 67 | 67 | |
|---|
| 68 | | - lock_device_hotplug(); |
|---|
| 69 | | - |
|---|
| 70 | 68 | switch (action) { |
|---|
| 71 | 69 | case 0: |
|---|
| 72 | | - ret = cpu_down(cpu); |
|---|
| 73 | | - if (!ret) { |
|---|
| 74 | | - pr_info("CPU %u is now offline\n", cpu); |
|---|
| 75 | | - dev->offline = true; |
|---|
| 76 | | - kobject_uevent(&dev->kobj, KOBJ_OFFLINE); |
|---|
| 77 | | - } else |
|---|
| 70 | + ret = remove_cpu(cpu); |
|---|
| 71 | + if (!ret) |
|---|
| 72 | + pr_info("DEBUG_HOTPLUG_CPU0: CPU %u is now offline\n", cpu); |
|---|
| 73 | + else |
|---|
| 78 | 74 | pr_debug("Can't offline CPU%d.\n", cpu); |
|---|
| 79 | 75 | break; |
|---|
| 80 | 76 | case 1: |
|---|
| 81 | | - ret = cpu_up(cpu); |
|---|
| 82 | | - if (!ret) { |
|---|
| 83 | | - dev->offline = false; |
|---|
| 84 | | - kobject_uevent(&dev->kobj, KOBJ_ONLINE); |
|---|
| 85 | | - } else { |
|---|
| 77 | + ret = add_cpu(cpu); |
|---|
| 78 | + if (ret) |
|---|
| 86 | 79 | pr_debug("Can't online CPU%d.\n", cpu); |
|---|
| 87 | | - } |
|---|
| 80 | + |
|---|
| 88 | 81 | break; |
|---|
| 89 | 82 | default: |
|---|
| 90 | 83 | ret = -EINVAL; |
|---|
| 91 | 84 | } |
|---|
| 92 | | - |
|---|
| 93 | | - unlock_device_hotplug(); |
|---|
| 94 | 85 | |
|---|
| 95 | 86 | return ret; |
|---|
| 96 | 87 | } |
|---|