.. | .. |
---|
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 | } |
---|