aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2013-05-02 18:26:22 -0400
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2013-05-12 08:14:32 -0400
commitac212b6980d8d5eda705864fc5a8ecddc6d6eacc (patch)
tree9331543b7e4766df3bd13481c0f87aa884aa4cf6 /drivers/acpi
parent683058e315f00a216fd6c79df4f63bc9945ca434 (diff)
ACPI / processor: Use common hotplug infrastructure
Split the ACPI processor driver into two parts, one that is non-modular, resides in the ACPI core and handles the enumeration and hotplug of processors and one that implements the rest of the existing processor driver functionality. The non-modular part uses an ACPI scan handler object to enumerate processors on the basis of information provided by the ACPI namespace and to hook up with the common ACPI hotplug infrastructure. It also populates the ACPI handle of each processor device having a corresponding object in the ACPI namespace, which allows the driver proper to bind to those devices, and makes the driver bind to them if it is readily available (i.e. loaded) when the scan handler's .attach() routine is running. There are a few reasons to make this change. First, switching the ACPI processor driver to using the common ACPI hotplug infrastructure reduces code duplication and size considerably, even though a new file is created along with a header comment etc. Second, since the common hotplug code attempts to offline devices before starting the (non-reversible) removal procedure, it will abort (and possibly roll back) hot-remove operations involving processors if cpu_down() returns an error code for one of them instead of continuing them blindly (if /sys/firmware/acpi/hotplug/force_remove is unset). That is a more desirable behavior than what the current code does. Finally, the separation of the scan/hotplug part from the driver proper makes it possible to simplify the driver's .remove() routine, because it doesn't need to worry about the possible cleanup related to processor removal any more (the scan/hotplug part is responsible for that now) and can handle device removal and driver removal symmetricaly (i.e. as appropriate). Some user-visible changes in sysfs are made (for example, the 'sysdev' link from the ACPI device node to the processor device's directory is gone and a 'physical_node' link is present instead and a corresponding 'firmware_node' is present in the processor device's directory, the processor driver is now visible under /sys/bus/cpu/drivers/ and bound to the processor device), but that shouldn't affect the functionality that users care about (frequency scaling, C-states and thermal management). Tested on my venerable Toshiba Portege R500. Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Reviewed-by: Toshi Kani <toshi.kani@hp.com>
Diffstat (limited to 'drivers/acpi')
-rw-r--r--drivers/acpi/Makefile1
-rw-r--r--drivers/acpi/acpi_processor.c484
-rw-r--r--drivers/acpi/glue.c6
-rw-r--r--drivers/acpi/internal.h3
-rw-r--r--drivers/acpi/processor_driver.c807
-rw-r--r--drivers/acpi/scan.c1
6 files changed, 571 insertions, 731 deletions
diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile
index ecb743bf05a5..93e49bde31ba 100644
--- a/drivers/acpi/Makefile
+++ b/drivers/acpi/Makefile
@@ -34,6 +34,7 @@ acpi-$(CONFIG_ACPI_SLEEP) += proc.o
34acpi-y += bus.o glue.o 34acpi-y += bus.o glue.o
35acpi-y += scan.o 35acpi-y += scan.o
36acpi-y += resource.o 36acpi-y += resource.o
37acpi-y += acpi_processor.o
37acpi-y += processor_core.o 38acpi-y += processor_core.o
38acpi-y += ec.o 39acpi-y += ec.o
39acpi-$(CONFIG_ACPI_DOCK) += dock.o 40acpi-$(CONFIG_ACPI_DOCK) += dock.o
diff --git a/drivers/acpi/acpi_processor.c b/drivers/acpi/acpi_processor.c
new file mode 100644
index 000000000000..587d2af4b323
--- /dev/null
+++ b/drivers/acpi/acpi_processor.c
@@ -0,0 +1,484 @@
1/*
2 * acpi_processor.c - ACPI processor enumeration support
3 *
4 * Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com>
5 * Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com>
6 * Copyright (C) 2004 Dominik Brodowski <linux@brodo.de>
7 * Copyright (C) 2004 Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
8 * Copyright (C) 2013, Intel Corporation
9 * Rafael J. Wysocki <rafael.j.wysocki@intel.com>
10 *
11 * This program is free software; you can redistribute it and/or modify it
12 * under the terms of the GNU General Public License version 2 as published
13 * by the Free Software Foundation.
14 */
15
16#include <linux/acpi.h>
17#include <linux/device.h>
18#include <linux/kernel.h>
19#include <linux/module.h>
20#include <linux/pci.h>
21
22#include <acpi/processor.h>
23
24#include <asm/cpu.h>
25
26#include "internal.h"
27
28#define _COMPONENT ACPI_PROCESSOR_COMPONENT
29
30ACPI_MODULE_NAME("processor");
31
32/* --------------------------------------------------------------------------
33 Errata Handling
34 -------------------------------------------------------------------------- */
35
36struct acpi_processor_errata errata __read_mostly;
37EXPORT_SYMBOL_GPL(errata);
38
39static int acpi_processor_errata_piix4(struct pci_dev *dev)
40{
41 u8 value1 = 0;
42 u8 value2 = 0;
43
44
45 if (!dev)
46 return -EINVAL;
47
48 /*
49 * Note that 'dev' references the PIIX4 ACPI Controller.
50 */
51
52 switch (dev->revision) {
53 case 0:
54 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found PIIX4 A-step\n"));
55 break;
56 case 1:
57 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found PIIX4 B-step\n"));
58 break;
59 case 2:
60 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found PIIX4E\n"));
61 break;
62 case 3:
63 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found PIIX4M\n"));
64 break;
65 default:
66 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found unknown PIIX4\n"));
67 break;
68 }
69
70 switch (dev->revision) {
71
72 case 0: /* PIIX4 A-step */
73 case 1: /* PIIX4 B-step */
74 /*
75 * See specification changes #13 ("Manual Throttle Duty Cycle")
76 * and #14 ("Enabling and Disabling Manual Throttle"), plus
77 * erratum #5 ("STPCLK# Deassertion Time") from the January
78 * 2002 PIIX4 specification update. Applies to only older
79 * PIIX4 models.
80 */
81 errata.piix4.throttle = 1;
82
83 case 2: /* PIIX4E */
84 case 3: /* PIIX4M */
85 /*
86 * See erratum #18 ("C3 Power State/BMIDE and Type-F DMA
87 * Livelock") from the January 2002 PIIX4 specification update.
88 * Applies to all PIIX4 models.
89 */
90
91 /*
92 * BM-IDE
93 * ------
94 * Find the PIIX4 IDE Controller and get the Bus Master IDE
95 * Status register address. We'll use this later to read
96 * each IDE controller's DMA status to make sure we catch all
97 * DMA activity.
98 */
99 dev = pci_get_subsys(PCI_VENDOR_ID_INTEL,
100 PCI_DEVICE_ID_INTEL_82371AB,
101 PCI_ANY_ID, PCI_ANY_ID, NULL);
102 if (dev) {
103 errata.piix4.bmisx = pci_resource_start(dev, 4);
104 pci_dev_put(dev);
105 }
106
107 /*
108 * Type-F DMA
109 * ----------
110 * Find the PIIX4 ISA Controller and read the Motherboard
111 * DMA controller's status to see if Type-F (Fast) DMA mode
112 * is enabled (bit 7) on either channel. Note that we'll
113 * disable C3 support if this is enabled, as some legacy
114 * devices won't operate well if fast DMA is disabled.
115 */
116 dev = pci_get_subsys(PCI_VENDOR_ID_INTEL,
117 PCI_DEVICE_ID_INTEL_82371AB_0,
118 PCI_ANY_ID, PCI_ANY_ID, NULL);
119 if (dev) {
120 pci_read_config_byte(dev, 0x76, &value1);
121 pci_read_config_byte(dev, 0x77, &value2);
122 if ((value1 & 0x80) || (value2 & 0x80))
123 errata.piix4.fdma = 1;
124 pci_dev_put(dev);
125 }
126
127 break;
128 }
129
130 if (errata.piix4.bmisx)
131 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
132 "Bus master activity detection (BM-IDE) erratum enabled\n"));
133 if (errata.piix4.fdma)
134 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
135 "Type-F DMA livelock erratum (C3 disabled)\n"));
136
137 return 0;
138}
139
140static int acpi_processor_errata(struct acpi_processor *pr)
141{
142 int result = 0;
143 struct pci_dev *dev = NULL;
144
145
146 if (!pr)
147 return -EINVAL;
148
149 /*
150 * PIIX4
151 */
152 dev = pci_get_subsys(PCI_VENDOR_ID_INTEL,
153 PCI_DEVICE_ID_INTEL_82371AB_3, PCI_ANY_ID,
154 PCI_ANY_ID, NULL);
155 if (dev) {
156 result = acpi_processor_errata_piix4(dev);
157 pci_dev_put(dev);
158 }
159
160 return result;
161}
162
163/* --------------------------------------------------------------------------
164 Initialization
165 -------------------------------------------------------------------------- */
166
167#ifdef CONFIG_ACPI_HOTPLUG_CPU
168static int acpi_processor_hotadd_init(struct acpi_processor *pr)
169{
170 unsigned long long sta;
171 acpi_status status;
172 int ret;
173
174 status = acpi_evaluate_integer(pr->handle, "_STA", NULL, &sta);
175 if (ACPI_FAILURE(status) || !(sta & ACPI_STA_DEVICE_PRESENT))
176 return -ENODEV;
177
178 ret = acpi_map_lsapic(pr->handle, &pr->id);
179 if (ret)
180 return ret;
181
182 ret = arch_register_cpu(pr->id);
183 if (ret) {
184 acpi_unmap_lsapic(pr->id);
185 return ret;
186 }
187
188 /*
189 * CPU got hot-added, but cpu_data is not initialized yet. Set a flag
190 * to delay cpu_idle/throttling initialization and do it when the CPU
191 * gets online for the first time.
192 */
193 pr_info("CPU%d has been hot-added\n", pr->id);
194 pr->flags.need_hotplug_init = 1;
195 return 0;
196}
197#else
198static inline int acpi_processor_hotadd_init(struct acpi_processor *pr)
199{
200 return -ENODEV;
201}
202#endif /* CONFIG_ACPI_HOTPLUG_CPU */
203
204static int acpi_processor_get_info(struct acpi_device *device)
205{
206 union acpi_object object = { 0 };
207 struct acpi_buffer buffer = { sizeof(union acpi_object), &object };
208 struct acpi_processor *pr = acpi_driver_data(device);
209 int cpu_index, device_declaration = 0;
210 acpi_status status = AE_OK;
211 static int cpu0_initialized;
212
213 if (num_online_cpus() > 1)
214 errata.smp = TRUE;
215
216 acpi_processor_errata(pr);
217
218 /*
219 * Check to see if we have bus mastering arbitration control. This
220 * is required for proper C3 usage (to maintain cache coherency).
221 */
222 if (acpi_gbl_FADT.pm2_control_block && acpi_gbl_FADT.pm2_control_length) {
223 pr->flags.bm_control = 1;
224 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
225 "Bus mastering arbitration control present\n"));
226 } else
227 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
228 "No bus mastering arbitration control\n"));
229
230 if (!strcmp(acpi_device_hid(device), ACPI_PROCESSOR_OBJECT_HID)) {
231 /* Declared with "Processor" statement; match ProcessorID */
232 status = acpi_evaluate_object(pr->handle, NULL, NULL, &buffer);
233 if (ACPI_FAILURE(status)) {
234 dev_err(&device->dev,
235 "Failed to evaluate processor object (0x%x)\n",
236 status);
237 return -ENODEV;
238 }
239
240 /*
241 * TBD: Synch processor ID (via LAPIC/LSAPIC structures) on SMP.
242 * >>> 'acpi_get_processor_id(acpi_id, &id)' in
243 * arch/xxx/acpi.c
244 */
245 pr->acpi_id = object.processor.proc_id;
246 } else {
247 /*
248 * Declared with "Device" statement; match _UID.
249 * Note that we don't handle string _UIDs yet.
250 */
251 unsigned long long value;
252 status = acpi_evaluate_integer(pr->handle, METHOD_NAME__UID,
253 NULL, &value);
254 if (ACPI_FAILURE(status)) {
255 dev_err(&device->dev,
256 "Failed to evaluate processor _UID (0x%x)\n",
257 status);
258 return -ENODEV;
259 }
260 device_declaration = 1;
261 pr->acpi_id = value;
262 }
263 cpu_index = acpi_get_cpuid(pr->handle, device_declaration, pr->acpi_id);
264
265 /* Handle UP system running SMP kernel, with no LAPIC in MADT */
266 if (!cpu0_initialized && (cpu_index == -1) &&
267 (num_online_cpus() == 1)) {
268 cpu_index = 0;
269 }
270
271 cpu0_initialized = 1;
272
273 pr->id = cpu_index;
274
275 /*
276 * Extra Processor objects may be enumerated on MP systems with
277 * less than the max # of CPUs. They should be ignored _iff
278 * they are physically not present.
279 */
280 if (pr->id == -1) {
281 int ret = acpi_processor_hotadd_init(pr);
282 if (ret)
283 return ret;
284 }
285 /*
286 * On some boxes several processors use the same processor bus id.
287 * But they are located in different scope. For example:
288 * \_SB.SCK0.CPU0
289 * \_SB.SCK1.CPU0
290 * Rename the processor device bus id. And the new bus id will be
291 * generated as the following format:
292 * CPU+CPU ID.
293 */
294 sprintf(acpi_device_bid(device), "CPU%X", pr->id);
295 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Processor [%d:%d]\n", pr->id,
296 pr->acpi_id));
297
298 if (!object.processor.pblk_address)
299 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No PBLK (NULL address)\n"));
300 else if (object.processor.pblk_length != 6)
301 dev_err(&device->dev, "Invalid PBLK length [%d]\n",
302 object.processor.pblk_length);
303 else {
304 pr->throttling.address = object.processor.pblk_address;
305 pr->throttling.duty_offset = acpi_gbl_FADT.duty_offset;
306 pr->throttling.duty_width = acpi_gbl_FADT.duty_width;
307
308 pr->pblk = object.processor.pblk_address;
309
310 /*
311 * We don't care about error returns - we just try to mark
312 * these reserved so that nobody else is confused into thinking
313 * that this region might be unused..
314 *
315 * (In particular, allocating the IO range for Cardbus)
316 */
317 request_region(pr->throttling.address, 6, "ACPI CPU throttle");
318 }
319
320 /*
321 * If ACPI describes a slot number for this CPU, we can use it to
322 * ensure we get the right value in the "physical id" field
323 * of /proc/cpuinfo
324 */
325 status = acpi_evaluate_object(pr->handle, "_SUN", NULL, &buffer);
326 if (ACPI_SUCCESS(status))
327 arch_fix_phys_package_id(pr->id, object.integer.value);
328
329 return 0;
330}
331
332/*
333 * Do not put anything in here which needs the core to be online.
334 * For example MSR access or setting up things which check for cpuinfo_x86
335 * (cpu_data(cpu)) values, like CPU feature flags, family, model, etc.
336 * Such things have to be put in and set up by the processor driver's .probe().
337 */
338static DEFINE_PER_CPU(void *, processor_device_array);
339
340static int __cpuinit acpi_processor_add(struct acpi_device *device,
341 const struct acpi_device_id *id)
342{
343 struct acpi_processor *pr;
344 struct device *dev;
345 int result = 0;
346
347 pr = kzalloc(sizeof(struct acpi_processor), GFP_KERNEL);
348 if (!pr)
349 return -ENOMEM;
350
351 if (!zalloc_cpumask_var(&pr->throttling.shared_cpu_map, GFP_KERNEL)) {
352 result = -ENOMEM;
353 goto err_free_pr;
354 }
355
356 pr->handle = device->handle;
357 strcpy(acpi_device_name(device), ACPI_PROCESSOR_DEVICE_NAME);
358 strcpy(acpi_device_class(device), ACPI_PROCESSOR_CLASS);
359 device->driver_data = pr;
360
361 result = acpi_processor_get_info(device);
362 if (result) /* Processor is not physically present or unavailable */
363 return 0;
364
365#ifdef CONFIG_SMP
366 if (pr->id >= setup_max_cpus && pr->id != 0)
367 return 0;
368#endif
369
370 BUG_ON(pr->id >= nr_cpu_ids);
371
372 /*
373 * Buggy BIOS check.
374 * ACPI id of processors can be reported wrongly by the BIOS.
375 * Don't trust it blindly
376 */
377 if (per_cpu(processor_device_array, pr->id) != NULL &&
378 per_cpu(processor_device_array, pr->id) != device) {
379 dev_warn(&device->dev,
380 "BIOS reported wrong ACPI id %d for the processor\n",
381 pr->id);
382 /* Give up, but do not abort the namespace scan. */
383 goto err;
384 }
385 /*
386 * processor_device_array is not cleared on errors to allow buggy BIOS
387 * checks.
388 */
389 per_cpu(processor_device_array, pr->id) = device;
390
391 dev = get_cpu_device(pr->id);
392 ACPI_HANDLE_SET(dev, pr->handle);
393 result = acpi_bind_one(dev, NULL);
394 if (result)
395 goto err;
396
397 pr->dev = dev;
398 dev->offline = pr->flags.need_hotplug_init;
399
400 /* Trigger the processor driver's .probe() if present. */
401 if (device_attach(dev) >= 0)
402 return 1;
403
404 dev_err(dev, "Processor driver could not be attached\n");
405 acpi_unbind_one(dev);
406
407 err:
408 free_cpumask_var(pr->throttling.shared_cpu_map);
409 device->driver_data = NULL;
410 err_free_pr:
411 kfree(pr);
412 return result;
413}
414
415#ifdef CONFIG_ACPI_HOTPLUG_CPU
416/* --------------------------------------------------------------------------
417 Removal
418 -------------------------------------------------------------------------- */
419
420static void acpi_processor_remove(struct acpi_device *device)
421{
422 struct acpi_processor *pr;
423
424 if (!device || !acpi_driver_data(device))
425 return;
426
427 pr = acpi_driver_data(device);
428 if (pr->id >= nr_cpu_ids)
429 goto out;
430
431 /*
432 * The only reason why we ever get here is CPU hot-removal. The CPU is
433 * already offline and the ACPI device removal locking prevents it from
434 * being put back online at this point.
435 *
436 * Unbind the driver from the processor device and detach it from the
437 * ACPI companion object.
438 */
439 device_release_driver(pr->dev);
440 acpi_unbind_one(pr->dev);
441
442 /* Clean up. */
443 per_cpu(processor_device_array, pr->id) = NULL;
444 try_offline_node(cpu_to_node(pr->id));
445
446 /* Remove the CPU. */
447 get_online_cpus();
448 arch_unregister_cpu(pr->id);
449 acpi_unmap_lsapic(pr->id);
450 put_online_cpus();
451
452 out:
453 free_cpumask_var(pr->throttling.shared_cpu_map);
454 kfree(pr);
455}
456#endif /* CONFIG_ACPI_HOTPLUG_CPU */
457
458/*
459 * The following ACPI IDs are known to be suitable for representing as
460 * processor devices.
461 */
462static const struct acpi_device_id processor_device_ids[] = {
463
464 { ACPI_PROCESSOR_OBJECT_HID, },
465 { ACPI_PROCESSOR_DEVICE_HID, },
466
467 { }
468};
469
470static struct acpi_scan_handler __refdata processor_handler = {
471 .ids = processor_device_ids,
472 .attach = acpi_processor_add,
473#ifdef CONFIG_ACPI_HOTPLUG_CPU
474 .detach = acpi_processor_remove,
475#endif
476 .hotplug = {
477 .enabled = true,
478 },
479};
480
481void __init acpi_processor_init(void)
482{
483 acpi_scan_add_handler_with_hotplug(&processor_handler, "processor");
484}
diff --git a/drivers/acpi/glue.c b/drivers/acpi/glue.c
index 40a84cc6740c..9783f400d857 100644
--- a/drivers/acpi/glue.c
+++ b/drivers/acpi/glue.c
@@ -105,7 +105,7 @@ acpi_handle acpi_get_child(acpi_handle parent, u64 address)
105} 105}
106EXPORT_SYMBOL(acpi_get_child); 106EXPORT_SYMBOL(acpi_get_child);
107 107
108static int acpi_bind_one(struct device *dev, acpi_handle handle) 108int acpi_bind_one(struct device *dev, acpi_handle handle)
109{ 109{
110 struct acpi_device *acpi_dev; 110 struct acpi_device *acpi_dev;
111 acpi_status status; 111 acpi_status status;
@@ -188,8 +188,9 @@ static int acpi_bind_one(struct device *dev, acpi_handle handle)
188 kfree(physical_node); 188 kfree(physical_node);
189 goto err; 189 goto err;
190} 190}
191EXPORT_SYMBOL_GPL(acpi_bind_one);
191 192
192static int acpi_unbind_one(struct device *dev) 193int acpi_unbind_one(struct device *dev)
193{ 194{
194 struct acpi_device_physical_node *entry; 195 struct acpi_device_physical_node *entry;
195 struct acpi_device *acpi_dev; 196 struct acpi_device *acpi_dev;
@@ -238,6 +239,7 @@ err:
238 dev_err(dev, "Oops, 'acpi_handle' corrupt\n"); 239 dev_err(dev, "Oops, 'acpi_handle' corrupt\n");
239 return -EINVAL; 240 return -EINVAL;
240} 241}
242EXPORT_SYMBOL_GPL(acpi_unbind_one);
241 243
242static int acpi_platform_notify(struct device *dev) 244static int acpi_platform_notify(struct device *dev)
243{ 245{
diff --git a/drivers/acpi/internal.h b/drivers/acpi/internal.h
index 4548f0a114ce..bf792595132c 100644
--- a/drivers/acpi/internal.h
+++ b/drivers/acpi/internal.h
@@ -33,6 +33,7 @@ static inline void acpi_pci_slot_init(void) { }
33void acpi_pci_root_init(void); 33void acpi_pci_root_init(void);
34void acpi_pci_link_init(void); 34void acpi_pci_link_init(void);
35void acpi_pci_root_hp_init(void); 35void acpi_pci_root_hp_init(void);
36void acpi_processor_init(void);
36void acpi_platform_init(void); 37void acpi_platform_init(void);
37int acpi_sysfs_init(void); 38int acpi_sysfs_init(void);
38void acpi_csrt_init(void); 39void acpi_csrt_init(void);
@@ -79,6 +80,8 @@ void acpi_init_device_object(struct acpi_device *device, acpi_handle handle,
79 int type, unsigned long long sta); 80 int type, unsigned long long sta);
80void acpi_device_add_finalize(struct acpi_device *device); 81void acpi_device_add_finalize(struct acpi_device *device);
81void acpi_free_pnp_ids(struct acpi_device_pnp *pnp); 82void acpi_free_pnp_ids(struct acpi_device_pnp *pnp);
83int acpi_bind_one(struct device *dev, acpi_handle handle);
84int acpi_unbind_one(struct device *dev);
82 85
83/* -------------------------------------------------------------------------- 86/* --------------------------------------------------------------------------
84 Power Resource 87 Power Resource
diff --git a/drivers/acpi/processor_driver.c b/drivers/acpi/processor_driver.c
index c266cdc11784..ac28f18823b3 100644
--- a/drivers/acpi/processor_driver.c
+++ b/drivers/acpi/processor_driver.c
@@ -1,11 +1,13 @@
1/* 1/*
2 * acpi_processor.c - ACPI Processor Driver ($Revision: 71 $) 2 * processor_driver.c - ACPI Processor Driver
3 * 3 *
4 * Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com> 4 * Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com>
5 * Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com> 5 * Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com>
6 * Copyright (C) 2004 Dominik Brodowski <linux@brodo.de> 6 * Copyright (C) 2004 Dominik Brodowski <linux@brodo.de>
7 * Copyright (C) 2004 Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com> 7 * Copyright (C) 2004 Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
8 * - Added processor hotplug support 8 * - Added processor hotplug support
9 * Copyright (C) 2013, Intel Corporation
10 * Rafael J. Wysocki <rafael.j.wysocki@intel.com>
9 * 11 *
10 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 12 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
11 * 13 *
@@ -24,52 +26,29 @@
24 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. 26 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
25 * 27 *
26 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 28 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
27 * TBD:
28 * 1. Make # power states dynamic.
29 * 2. Support duty_cycle values that span bit 4.
30 * 3. Optimize by having scheduler determine business instead of
31 * having us try to calculate it here.
32 * 4. Need C1 timing -- must modify kernel (IRQ handler) to get this.
33 */ 29 */
34 30
35#include <linux/kernel.h> 31#include <linux/kernel.h>
36#include <linux/module.h> 32#include <linux/module.h>
37#include <linux/init.h> 33#include <linux/init.h>
38#include <linux/types.h>
39#include <linux/pci.h>
40#include <linux/pm.h>
41#include <linux/cpufreq.h> 34#include <linux/cpufreq.h>
42#include <linux/cpu.h> 35#include <linux/cpu.h>
43#include <linux/dmi.h>
44#include <linux/moduleparam.h>
45#include <linux/cpuidle.h> 36#include <linux/cpuidle.h>
46#include <linux/slab.h> 37#include <linux/slab.h>
47#include <linux/acpi.h> 38#include <linux/acpi.h>
48#include <linux/memory_hotplug.h> 39
49
50#include <asm/io.h>
51#include <asm/cpu.h>
52#include <asm/delay.h>
53#include <asm/uaccess.h>
54#include <asm/processor.h>
55#include <asm/smp.h>
56#include <asm/acpi.h>
57
58#include <acpi/acpi_bus.h>
59#include <acpi/acpi_drivers.h>
60#include <acpi/processor.h> 40#include <acpi/processor.h>
61 41
42#include "internal.h"
43
62#define PREFIX "ACPI: " 44#define PREFIX "ACPI: "
63 45
64#define ACPI_PROCESSOR_CLASS "processor"
65#define ACPI_PROCESSOR_DEVICE_NAME "Processor"
66#define ACPI_PROCESSOR_FILE_INFO "info" 46#define ACPI_PROCESSOR_FILE_INFO "info"
67#define ACPI_PROCESSOR_FILE_THROTTLING "throttling" 47#define ACPI_PROCESSOR_FILE_THROTTLING "throttling"
68#define ACPI_PROCESSOR_FILE_LIMIT "limit" 48#define ACPI_PROCESSOR_FILE_LIMIT "limit"
69#define ACPI_PROCESSOR_NOTIFY_PERFORMANCE 0x80 49#define ACPI_PROCESSOR_NOTIFY_PERFORMANCE 0x80
70#define ACPI_PROCESSOR_NOTIFY_POWER 0x81 50#define ACPI_PROCESSOR_NOTIFY_POWER 0x81
71#define ACPI_PROCESSOR_NOTIFY_THROTTLING 0x82 51#define ACPI_PROCESSOR_NOTIFY_THROTTLING 0x82
72#define ACPI_PROCESSOR_DEVICE_HID "ACPI0007"
73 52
74#define ACPI_PROCESSOR_LIMIT_USER 0 53#define ACPI_PROCESSOR_LIMIT_USER 0
75#define ACPI_PROCESSOR_LIMIT_THERMAL 1 54#define ACPI_PROCESSOR_LIMIT_THERMAL 1
@@ -81,12 +60,8 @@ MODULE_AUTHOR("Paul Diefenbaugh");
81MODULE_DESCRIPTION("ACPI Processor Driver"); 60MODULE_DESCRIPTION("ACPI Processor Driver");
82MODULE_LICENSE("GPL"); 61MODULE_LICENSE("GPL");
83 62
84static int acpi_processor_add(struct acpi_device *device); 63static int acpi_processor_start(struct device *dev);
85static int acpi_processor_remove(struct acpi_device *device); 64static int acpi_processor_stop(struct device *dev);
86static void acpi_processor_notify(struct acpi_device *device, u32 event);
87static acpi_status acpi_processor_hotadd_init(struct acpi_processor *pr);
88static int acpi_processor_handle_eject(struct acpi_processor *pr);
89static int acpi_processor_start(struct acpi_processor *pr);
90 65
91static const struct acpi_device_id processor_device_ids[] = { 66static const struct acpi_device_id processor_device_ids[] = {
92 {ACPI_PROCESSOR_OBJECT_HID, 0}, 67 {ACPI_PROCESSOR_OBJECT_HID, 0},
@@ -95,295 +70,27 @@ static const struct acpi_device_id processor_device_ids[] = {
95}; 70};
96MODULE_DEVICE_TABLE(acpi, processor_device_ids); 71MODULE_DEVICE_TABLE(acpi, processor_device_ids);
97 72
98static struct acpi_driver acpi_processor_driver = { 73static struct device_driver acpi_processor_driver = {
99 .name = "processor", 74 .name = "processor",
100 .class = ACPI_PROCESSOR_CLASS, 75 .bus = &cpu_subsys,
101 .ids = processor_device_ids, 76 .acpi_match_table = processor_device_ids,
102 .ops = { 77 .probe = acpi_processor_start,
103 .add = acpi_processor_add, 78 .remove = acpi_processor_stop,
104 .remove = acpi_processor_remove,
105 .notify = acpi_processor_notify,
106 },
107}; 79};
108 80
109#define INSTALL_NOTIFY_HANDLER 1
110#define UNINSTALL_NOTIFY_HANDLER 2
111
112DEFINE_PER_CPU(struct acpi_processor *, processors); 81DEFINE_PER_CPU(struct acpi_processor *, processors);
113EXPORT_PER_CPU_SYMBOL(processors); 82EXPORT_PER_CPU_SYMBOL(processors);
114 83
115struct acpi_processor_errata errata __read_mostly; 84static void acpi_processor_notify(acpi_handle handle, u32 event, void *data)
116
117/* --------------------------------------------------------------------------
118 Errata Handling
119 -------------------------------------------------------------------------- */
120
121static int acpi_processor_errata_piix4(struct pci_dev *dev)
122{ 85{
123 u8 value1 = 0; 86 struct acpi_device *device = data;
124 u8 value2 = 0;
125
126
127 if (!dev)
128 return -EINVAL;
129
130 /*
131 * Note that 'dev' references the PIIX4 ACPI Controller.
132 */
133
134 switch (dev->revision) {
135 case 0:
136 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found PIIX4 A-step\n"));
137 break;
138 case 1:
139 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found PIIX4 B-step\n"));
140 break;
141 case 2:
142 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found PIIX4E\n"));
143 break;
144 case 3:
145 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found PIIX4M\n"));
146 break;
147 default:
148 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found unknown PIIX4\n"));
149 break;
150 }
151
152 switch (dev->revision) {
153
154 case 0: /* PIIX4 A-step */
155 case 1: /* PIIX4 B-step */
156 /*
157 * See specification changes #13 ("Manual Throttle Duty Cycle")
158 * and #14 ("Enabling and Disabling Manual Throttle"), plus
159 * erratum #5 ("STPCLK# Deassertion Time") from the January
160 * 2002 PIIX4 specification update. Applies to only older
161 * PIIX4 models.
162 */
163 errata.piix4.throttle = 1;
164
165 case 2: /* PIIX4E */
166 case 3: /* PIIX4M */
167 /*
168 * See erratum #18 ("C3 Power State/BMIDE and Type-F DMA
169 * Livelock") from the January 2002 PIIX4 specification update.
170 * Applies to all PIIX4 models.
171 */
172
173 /*
174 * BM-IDE
175 * ------
176 * Find the PIIX4 IDE Controller and get the Bus Master IDE
177 * Status register address. We'll use this later to read
178 * each IDE controller's DMA status to make sure we catch all
179 * DMA activity.
180 */
181 dev = pci_get_subsys(PCI_VENDOR_ID_INTEL,
182 PCI_DEVICE_ID_INTEL_82371AB,
183 PCI_ANY_ID, PCI_ANY_ID, NULL);
184 if (dev) {
185 errata.piix4.bmisx = pci_resource_start(dev, 4);
186 pci_dev_put(dev);
187 }
188
189 /*
190 * Type-F DMA
191 * ----------
192 * Find the PIIX4 ISA Controller and read the Motherboard
193 * DMA controller's status to see if Type-F (Fast) DMA mode
194 * is enabled (bit 7) on either channel. Note that we'll
195 * disable C3 support if this is enabled, as some legacy
196 * devices won't operate well if fast DMA is disabled.
197 */
198 dev = pci_get_subsys(PCI_VENDOR_ID_INTEL,
199 PCI_DEVICE_ID_INTEL_82371AB_0,
200 PCI_ANY_ID, PCI_ANY_ID, NULL);
201 if (dev) {
202 pci_read_config_byte(dev, 0x76, &value1);
203 pci_read_config_byte(dev, 0x77, &value2);
204 if ((value1 & 0x80) || (value2 & 0x80))
205 errata.piix4.fdma = 1;
206 pci_dev_put(dev);
207 }
208
209 break;
210 }
211
212 if (errata.piix4.bmisx)
213 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
214 "Bus master activity detection (BM-IDE) erratum enabled\n"));
215 if (errata.piix4.fdma)
216 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
217 "Type-F DMA livelock erratum (C3 disabled)\n"));
218
219 return 0;
220}
221
222static int acpi_processor_errata(struct acpi_processor *pr)
223{
224 int result = 0;
225 struct pci_dev *dev = NULL;
226
227
228 if (!pr)
229 return -EINVAL;
230
231 /*
232 * PIIX4
233 */
234 dev = pci_get_subsys(PCI_VENDOR_ID_INTEL,
235 PCI_DEVICE_ID_INTEL_82371AB_3, PCI_ANY_ID,
236 PCI_ANY_ID, NULL);
237 if (dev) {
238 result = acpi_processor_errata_piix4(dev);
239 pci_dev_put(dev);
240 }
241
242 return result;
243}
244
245/* --------------------------------------------------------------------------
246 Driver Interface
247 -------------------------------------------------------------------------- */
248
249static int acpi_processor_get_info(struct acpi_device *device)
250{
251 acpi_status status = 0;
252 union acpi_object object = { 0 };
253 struct acpi_buffer buffer = { sizeof(union acpi_object), &object };
254 struct acpi_processor *pr; 87 struct acpi_processor *pr;
255 int cpu_index, device_declaration = 0;
256 static int cpu0_initialized;
257
258 pr = acpi_driver_data(device);
259 if (!pr)
260 return -EINVAL;
261
262 if (num_online_cpus() > 1)
263 errata.smp = TRUE;
264
265 acpi_processor_errata(pr);
266
267 /*
268 * Check to see if we have bus mastering arbitration control. This
269 * is required for proper C3 usage (to maintain cache coherency).
270 */
271 if (acpi_gbl_FADT.pm2_control_block && acpi_gbl_FADT.pm2_control_length) {
272 pr->flags.bm_control = 1;
273 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
274 "Bus mastering arbitration control present\n"));
275 } else
276 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
277 "No bus mastering arbitration control\n"));
278
279 if (!strcmp(acpi_device_hid(device), ACPI_PROCESSOR_OBJECT_HID)) {
280 /* Declared with "Processor" statement; match ProcessorID */
281 status = acpi_evaluate_object(pr->handle, NULL, NULL, &buffer);
282 if (ACPI_FAILURE(status)) {
283 dev_err(&device->dev,
284 "Failed to evaluate processor object (0x%x)\n",
285 status);
286 return -ENODEV;
287 }
288
289 /*
290 * TBD: Synch processor ID (via LAPIC/LSAPIC structures) on SMP.
291 * >>> 'acpi_get_processor_id(acpi_id, &id)' in
292 * arch/xxx/acpi.c
293 */
294 pr->acpi_id = object.processor.proc_id;
295 } else {
296 /*
297 * Declared with "Device" statement; match _UID.
298 * Note that we don't handle string _UIDs yet.
299 */
300 unsigned long long value;
301 status = acpi_evaluate_integer(pr->handle, METHOD_NAME__UID,
302 NULL, &value);
303 if (ACPI_FAILURE(status)) {
304 dev_err(&device->dev,
305 "Failed to evaluate processor _UID (0x%x)\n",
306 status);
307 return -ENODEV;
308 }
309 device_declaration = 1;
310 pr->acpi_id = value;
311 }
312 cpu_index = acpi_get_cpuid(pr->handle, device_declaration, pr->acpi_id);
313
314 /* Handle UP system running SMP kernel, with no LAPIC in MADT */
315 if (!cpu0_initialized && (cpu_index == -1) &&
316 (num_online_cpus() == 1)) {
317 cpu_index = 0;
318 }
319
320 cpu0_initialized = 1;
321
322 pr->id = cpu_index;
323
324 /*
325 * Extra Processor objects may be enumerated on MP systems with
326 * less than the max # of CPUs. They should be ignored _iff
327 * they are physically not present.
328 */
329 if (pr->id == -1) {
330 if (ACPI_FAILURE(acpi_processor_hotadd_init(pr)))
331 return -ENODEV;
332 }
333 /*
334 * On some boxes several processors use the same processor bus id.
335 * But they are located in different scope. For example:
336 * \_SB.SCK0.CPU0
337 * \_SB.SCK1.CPU0
338 * Rename the processor device bus id. And the new bus id will be
339 * generated as the following format:
340 * CPU+CPU ID.
341 */
342 sprintf(acpi_device_bid(device), "CPU%X", pr->id);
343 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Processor [%d:%d]\n", pr->id,
344 pr->acpi_id));
345
346 if (!object.processor.pblk_address)
347 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No PBLK (NULL address)\n"));
348 else if (object.processor.pblk_length != 6)
349 dev_err(&device->dev, "Invalid PBLK length [%d]\n",
350 object.processor.pblk_length);
351 else {
352 pr->throttling.address = object.processor.pblk_address;
353 pr->throttling.duty_offset = acpi_gbl_FADT.duty_offset;
354 pr->throttling.duty_width = acpi_gbl_FADT.duty_width;
355
356 pr->pblk = object.processor.pblk_address;
357
358 /*
359 * We don't care about error returns - we just try to mark
360 * these reserved so that nobody else is confused into thinking
361 * that this region might be unused..
362 *
363 * (In particular, allocating the IO range for Cardbus)
364 */
365 request_region(pr->throttling.address, 6, "ACPI CPU throttle");
366 }
367
368 /*
369 * If ACPI describes a slot number for this CPU, we can use it
370 * ensure we get the right value in the "physical id" field
371 * of /proc/cpuinfo
372 */
373 status = acpi_evaluate_object(pr->handle, "_SUN", NULL, &buffer);
374 if (ACPI_SUCCESS(status))
375 arch_fix_phys_package_id(pr->id, object.integer.value);
376
377 return 0;
378}
379
380static DEFINE_PER_CPU(void *, processor_device_array);
381
382static void acpi_processor_notify(struct acpi_device *device, u32 event)
383{
384 struct acpi_processor *pr = acpi_driver_data(device);
385 int saved; 88 int saved;
386 89
90 if (device->handle != handle)
91 return;
92
93 pr = acpi_driver_data(device);
387 if (!pr) 94 if (!pr)
388 return; 95 return;
389 96
@@ -420,55 +127,62 @@ static void acpi_processor_notify(struct acpi_device *device, u32 event)
420 return; 127 return;
421} 128}
422 129
423static int acpi_cpu_soft_notify(struct notifier_block *nfb, 130static __cpuinit int __acpi_processor_start(struct acpi_device *device);
424 unsigned long action, void *hcpu) 131
132static int __cpuinit acpi_cpu_soft_notify(struct notifier_block *nfb,
133 unsigned long action, void *hcpu)
425{ 134{
426 unsigned int cpu = (unsigned long)hcpu; 135 unsigned int cpu = (unsigned long)hcpu;
427 struct acpi_processor *pr = per_cpu(processors, cpu); 136 struct acpi_processor *pr = per_cpu(processors, cpu);
137 struct acpi_device *device;
428 138
429 if (action == CPU_ONLINE && pr) { 139 if (!pr || acpi_bus_get_device(pr->handle, &device))
430 /* CPU got physically hotplugged and onlined the first time: 140 return NOTIFY_DONE;
431 * Initialize missing things 141
142 if (action == CPU_ONLINE) {
143 /*
144 * CPU got physically hotplugged and onlined for the first time:
145 * Initialize missing things.
432 */ 146 */
433 if (pr->flags.need_hotplug_init) { 147 if (pr->flags.need_hotplug_init) {
148 int ret;
149
434 pr_info("Will online and init hotplugged CPU: %d\n", 150 pr_info("Will online and init hotplugged CPU: %d\n",
435 pr->id); 151 pr->id);
436 WARN(acpi_processor_start(pr), "Failed to start CPU:"
437 " %d\n", pr->id);
438 pr->flags.need_hotplug_init = 0; 152 pr->flags.need_hotplug_init = 0;
439 /* Normal CPU soft online event */ 153 ret = __acpi_processor_start(device);
154 WARN(ret, "Failed to start CPU: %d\n", pr->id);
440 } else { 155 } else {
156 /* Normal CPU soft online event. */
441 acpi_processor_ppc_has_changed(pr, 0); 157 acpi_processor_ppc_has_changed(pr, 0);
442 acpi_processor_hotplug(pr); 158 acpi_processor_hotplug(pr);
443 acpi_processor_reevaluate_tstate(pr, action); 159 acpi_processor_reevaluate_tstate(pr, action);
444 acpi_processor_tstate_has_changed(pr); 160 acpi_processor_tstate_has_changed(pr);
445 } 161 }
446 } 162 } else if (action == CPU_DEAD) {
447 if (action == CPU_DEAD && pr) { 163 /* Invalidate flag.throttling after the CPU is offline. */
448 /* invalidate the flag.throttling after one CPU is offline */
449 acpi_processor_reevaluate_tstate(pr, action); 164 acpi_processor_reevaluate_tstate(pr, action);
450 } 165 }
451 return NOTIFY_OK; 166 return NOTIFY_OK;
452} 167}
453 168
454static struct notifier_block acpi_cpu_notifier = 169static struct notifier_block __refdata acpi_cpu_notifier =
455{ 170{
456 .notifier_call = acpi_cpu_soft_notify, 171 .notifier_call = acpi_cpu_soft_notify,
457}; 172};
458 173
459/* 174static __cpuinit int __acpi_processor_start(struct acpi_device *device)
460 * acpi_processor_start() is called by the cpu_hotplug_notifier func:
461 * acpi_cpu_soft_notify(). Getting it __cpuinit{data} is difficult, the
462 * root cause seem to be that acpi_processor_uninstall_hotplug_notify()
463 * is in the module_exit (__exit) func. Allowing acpi_processor_start()
464 * to not be in __cpuinit section, but being called from __cpuinit funcs
465 * via __ref looks like the right thing to do here.
466 */
467static __ref int acpi_processor_start(struct acpi_processor *pr)
468{ 175{
469 struct acpi_device *device = per_cpu(processor_device_array, pr->id); 176 struct acpi_processor *pr = acpi_driver_data(device);
177 acpi_status status;
470 int result = 0; 178 int result = 0;
471 179
180 if (!pr)
181 return -ENODEV;
182
183 if (pr->flags.need_hotplug_init)
184 return 0;
185
472#ifdef CONFIG_CPU_FREQ 186#ifdef CONFIG_CPU_FREQ
473 acpi_processor_ppc_has_changed(pr, 0); 187 acpi_processor_ppc_has_changed(pr, 0);
474 acpi_processor_load_module(pr); 188 acpi_processor_load_module(pr);
@@ -506,129 +220,48 @@ static __ref int acpi_processor_start(struct acpi_processor *pr)
506 goto err_remove_sysfs_thermal; 220 goto err_remove_sysfs_thermal;
507 } 221 }
508 222
509 return 0; 223 status = acpi_install_notify_handler(device->handle, ACPI_DEVICE_NOTIFY,
224 acpi_processor_notify, device);
225 if (ACPI_SUCCESS(status))
226 return 0;
510 227
511err_remove_sysfs_thermal: 228 sysfs_remove_link(&pr->cdev->device.kobj, "device");
229 err_remove_sysfs_thermal:
512 sysfs_remove_link(&device->dev.kobj, "thermal_cooling"); 230 sysfs_remove_link(&device->dev.kobj, "thermal_cooling");
513err_thermal_unregister: 231 err_thermal_unregister:
514 thermal_cooling_device_unregister(pr->cdev); 232 thermal_cooling_device_unregister(pr->cdev);
515err_power_exit: 233 err_power_exit:
516 acpi_processor_power_exit(pr); 234 acpi_processor_power_exit(pr);
517
518 return result; 235 return result;
519} 236}
520 237
521/* 238static int __cpuinit acpi_processor_start(struct device *dev)
522 * Do not put anything in here which needs the core to be online.
523 * For example MSR access or setting up things which check for cpuinfo_x86
524 * (cpu_data(cpu)) values, like CPU feature flags, family, model, etc.
525 * Such things have to be put in and set up above in acpi_processor_start()
526 */
527static int __cpuinit acpi_processor_add(struct acpi_device *device)
528{ 239{
529 struct acpi_processor *pr = NULL; 240 struct acpi_device *device;
530 int result = 0;
531 struct device *dev;
532
533 pr = kzalloc(sizeof(struct acpi_processor), GFP_KERNEL);
534 if (!pr)
535 return -ENOMEM;
536 241
537 if (!zalloc_cpumask_var(&pr->throttling.shared_cpu_map, GFP_KERNEL)) { 242 if (acpi_bus_get_device(ACPI_HANDLE(dev), &device))
538 result = -ENOMEM; 243 return -ENODEV;
539 goto err_free_pr;
540 }
541
542 pr->handle = device->handle;
543 strcpy(acpi_device_name(device), ACPI_PROCESSOR_DEVICE_NAME);
544 strcpy(acpi_device_class(device), ACPI_PROCESSOR_CLASS);
545 device->driver_data = pr;
546
547 result = acpi_processor_get_info(device);
548 if (result) {
549 /* Processor is physically not present */
550 return 0;
551 }
552
553#ifdef CONFIG_SMP
554 if (pr->id >= setup_max_cpus && pr->id != 0)
555 return 0;
556#endif
557
558 BUG_ON(pr->id >= nr_cpu_ids);
559
560 /*
561 * Buggy BIOS check
562 * ACPI id of processors can be reported wrongly by the BIOS.
563 * Don't trust it blindly
564 */
565 if (per_cpu(processor_device_array, pr->id) != NULL &&
566 per_cpu(processor_device_array, pr->id) != device) {
567 dev_warn(&device->dev,
568 "BIOS reported wrong ACPI id %d for the processor\n",
569 pr->id);
570 result = -ENODEV;
571 goto err_free_cpumask;
572 }
573 per_cpu(processor_device_array, pr->id) = device;
574
575 per_cpu(processors, pr->id) = pr;
576 244
577 dev = get_cpu_device(pr->id); 245 return __acpi_processor_start(device);
578 if (sysfs_create_link(&device->dev.kobj, &dev->kobj, "sysdev")) {
579 result = -EFAULT;
580 goto err_clear_processor;
581 }
582
583 /*
584 * Do not start hotplugged CPUs now, but when they
585 * are onlined the first time
586 */
587 if (pr->flags.need_hotplug_init)
588 return 0;
589
590 result = acpi_processor_start(pr);
591 if (result)
592 goto err_remove_sysfs;
593
594 return 0;
595
596err_remove_sysfs:
597 sysfs_remove_link(&device->dev.kobj, "sysdev");
598err_clear_processor:
599 /*
600 * processor_device_array is not cleared to allow checks for buggy BIOS
601 */
602 per_cpu(processors, pr->id) = NULL;
603err_free_cpumask:
604 free_cpumask_var(pr->throttling.shared_cpu_map);
605err_free_pr:
606 kfree(pr);
607 return result;
608} 246}
609 247
610static int acpi_processor_remove(struct acpi_device *device) 248static int acpi_processor_stop(struct device *dev)
611{ 249{
612 struct acpi_processor *pr = NULL; 250 struct acpi_device *device;
251 struct acpi_processor *pr;
613 252
253 if (acpi_bus_get_device(ACPI_HANDLE(dev), &device))
254 return 0;
614 255
615 if (!device || !acpi_driver_data(device)) 256 acpi_remove_notify_handler(device->handle, ACPI_DEVICE_NOTIFY,
616 return -EINVAL; 257 acpi_processor_notify);
617 258
618 pr = acpi_driver_data(device); 259 pr = acpi_driver_data(device);
619 260 if (!pr)
620 if (pr->id >= nr_cpu_ids) 261 return 0;
621 goto free;
622
623 if (device->removal_type == ACPI_BUS_REMOVAL_EJECT) {
624 if (acpi_processor_handle_eject(pr))
625 return -EINVAL;
626 }
627 262
628 acpi_processor_power_exit(pr); 263 acpi_processor_power_exit(pr);
629 264
630 sysfs_remove_link(&device->dev.kobj, "sysdev");
631
632 if (pr->cdev) { 265 if (pr->cdev) {
633 sysfs_remove_link(&device->dev.kobj, "thermal_cooling"); 266 sysfs_remove_link(&device->dev.kobj, "thermal_cooling");
634 sysfs_remove_link(&pr->cdev->device.kobj, "device"); 267 sysfs_remove_link(&pr->cdev->device.kobj, "device");
@@ -637,331 +270,47 @@ static int acpi_processor_remove(struct acpi_device *device)
637 } 270 }
638 271
639 per_cpu(processors, pr->id) = NULL; 272 per_cpu(processors, pr->id) = NULL;
640 per_cpu(processor_device_array, pr->id) = NULL;
641 try_offline_node(cpu_to_node(pr->id));
642
643free:
644 free_cpumask_var(pr->throttling.shared_cpu_map);
645 kfree(pr);
646
647 return 0; 273 return 0;
648} 274}
649 275
650#ifdef CONFIG_ACPI_HOTPLUG_CPU
651/****************************************************************************
652 * Acpi processor hotplug support *
653 ****************************************************************************/
654
655static int is_processor_present(acpi_handle handle)
656{
657 acpi_status status;
658 unsigned long long sta = 0;
659
660
661 status = acpi_evaluate_integer(handle, "_STA", NULL, &sta);
662
663 if (ACPI_SUCCESS(status) && (sta & ACPI_STA_DEVICE_PRESENT))
664 return 1;
665
666 /*
667 * _STA is mandatory for a processor that supports hot plug
668 */
669 if (status == AE_NOT_FOUND)
670 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
671 "Processor does not support hot plug\n"));
672 else
673 ACPI_EXCEPTION((AE_INFO, status,
674 "Processor Device is not present"));
675 return 0;
676}
677
678static void acpi_processor_hotplug_notify(acpi_handle handle,
679 u32 event, void *data)
680{
681 struct acpi_device *device = NULL;
682 struct acpi_eject_event *ej_event = NULL;
683 u32 ost_code = ACPI_OST_SC_NON_SPECIFIC_FAILURE; /* default */
684 acpi_status status;
685 int result;
686
687 acpi_scan_lock_acquire();
688
689 switch (event) {
690 case ACPI_NOTIFY_BUS_CHECK:
691 case ACPI_NOTIFY_DEVICE_CHECK:
692 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
693 "Processor driver received %s event\n",
694 (event == ACPI_NOTIFY_BUS_CHECK) ?
695 "ACPI_NOTIFY_BUS_CHECK" : "ACPI_NOTIFY_DEVICE_CHECK"));
696
697 if (!is_processor_present(handle))
698 break;
699
700 if (!acpi_bus_get_device(handle, &device))
701 break;
702
703 result = acpi_bus_scan(handle);
704 if (result) {
705 acpi_handle_err(handle, "Unable to add the device\n");
706 break;
707 }
708 result = acpi_bus_get_device(handle, &device);
709 if (result) {
710 acpi_handle_err(handle, "Missing device object\n");
711 break;
712 }
713 ost_code = ACPI_OST_SC_SUCCESS;
714 break;
715
716 case ACPI_NOTIFY_EJECT_REQUEST:
717 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
718 "received ACPI_NOTIFY_EJECT_REQUEST\n"));
719
720 if (acpi_bus_get_device(handle, &device)) {
721 acpi_handle_err(handle,
722 "Device don't exist, dropping EJECT\n");
723 break;
724 }
725 if (!acpi_driver_data(device)) {
726 acpi_handle_err(handle,
727 "Driver data is NULL, dropping EJECT\n");
728 break;
729 }
730
731 ej_event = kmalloc(sizeof(*ej_event), GFP_KERNEL);
732 if (!ej_event) {
733 acpi_handle_err(handle, "No memory, dropping EJECT\n");
734 break;
735 }
736
737 get_device(&device->dev);
738 ej_event->device = device;
739 ej_event->event = ACPI_NOTIFY_EJECT_REQUEST;
740 /* The eject is carried out asynchronously. */
741 status = acpi_os_hotplug_execute(acpi_bus_hot_remove_device,
742 ej_event);
743 if (ACPI_FAILURE(status)) {
744 put_device(&device->dev);
745 kfree(ej_event);
746 break;
747 }
748 goto out;
749
750 default:
751 ACPI_DEBUG_PRINT((ACPI_DB_INFO,
752 "Unsupported event [0x%x]\n", event));
753
754 /* non-hotplug event; possibly handled by other handler */
755 goto out;
756 }
757
758 /* Inform firmware that the hotplug operation has completed */
759 (void) acpi_evaluate_hotplug_ost(handle, event, ost_code, NULL);
760
761 out:
762 acpi_scan_lock_release();
763}
764
765static acpi_status is_processor_device(acpi_handle handle)
766{
767 struct acpi_device_info *info;
768 char *hid;
769 acpi_status status;
770
771 status = acpi_get_object_info(handle, &info);
772 if (ACPI_FAILURE(status))
773 return status;
774
775 if (info->type == ACPI_TYPE_PROCESSOR) {
776 kfree(info);
777 return AE_OK; /* found a processor object */
778 }
779
780 if (!(info->valid & ACPI_VALID_HID)) {
781 kfree(info);
782 return AE_ERROR;
783 }
784
785 hid = info->hardware_id.string;
786 if ((hid == NULL) || strcmp(hid, ACPI_PROCESSOR_DEVICE_HID)) {
787 kfree(info);
788 return AE_ERROR;
789 }
790
791 kfree(info);
792 return AE_OK; /* found a processor device object */
793}
794
795static acpi_status
796processor_walk_namespace_cb(acpi_handle handle,
797 u32 lvl, void *context, void **rv)
798{
799 acpi_status status;
800 int *action = context;
801
802 status = is_processor_device(handle);
803 if (ACPI_FAILURE(status))
804 return AE_OK; /* not a processor; continue to walk */
805
806 switch (*action) {
807 case INSTALL_NOTIFY_HANDLER:
808 acpi_install_notify_handler(handle,
809 ACPI_SYSTEM_NOTIFY,
810 acpi_processor_hotplug_notify,
811 NULL);
812 break;
813 case UNINSTALL_NOTIFY_HANDLER:
814 acpi_remove_notify_handler(handle,
815 ACPI_SYSTEM_NOTIFY,
816 acpi_processor_hotplug_notify);
817 break;
818 default:
819 break;
820 }
821
822 /* found a processor; skip walking underneath */
823 return AE_CTRL_DEPTH;
824}
825
826static acpi_status acpi_processor_hotadd_init(struct acpi_processor *pr)
827{
828 acpi_handle handle = pr->handle;
829
830 if (!is_processor_present(handle)) {
831 return AE_ERROR;
832 }
833
834 if (acpi_map_lsapic(handle, &pr->id))
835 return AE_ERROR;
836
837 if (arch_register_cpu(pr->id)) {
838 acpi_unmap_lsapic(pr->id);
839 return AE_ERROR;
840 }
841
842 /* CPU got hot-plugged, but cpu_data is not initialized yet
843 * Set flag to delay cpu_idle/throttling initialization
844 * in:
845 * acpi_processor_add()
846 * acpi_processor_get_info()
847 * and do it when the CPU gets online the first time
848 * TBD: Cleanup above functions and try to do this more elegant.
849 */
850 pr_info("CPU %d got hotplugged\n", pr->id);
851 pr->flags.need_hotplug_init = 1;
852
853 return AE_OK;
854}
855
856static int acpi_processor_handle_eject(struct acpi_processor *pr)
857{
858 if (cpu_online(pr->id))
859 cpu_down(pr->id);
860
861 get_online_cpus();
862 /*
863 * The cpu might become online again at this point. So we check whether
864 * the cpu has been onlined or not. If the cpu became online, it means
865 * that someone wants to use the cpu. So acpi_processor_handle_eject()
866 * returns -EAGAIN.
867 */
868 if (unlikely(cpu_online(pr->id))) {
869 put_online_cpus();
870 pr_warn("Failed to remove CPU %d, because other task "
871 "brought the CPU back online\n", pr->id);
872 return -EAGAIN;
873 }
874 arch_unregister_cpu(pr->id);
875 acpi_unmap_lsapic(pr->id);
876 put_online_cpus();
877 return (0);
878}
879#else
880static acpi_status acpi_processor_hotadd_init(struct acpi_processor *pr)
881{
882 return AE_ERROR;
883}
884static int acpi_processor_handle_eject(struct acpi_processor *pr)
885{
886 return (-EINVAL);
887}
888#endif
889
890static
891void acpi_processor_install_hotplug_notify(void)
892{
893#ifdef CONFIG_ACPI_HOTPLUG_CPU
894 int action = INSTALL_NOTIFY_HANDLER;
895 acpi_walk_namespace(ACPI_TYPE_ANY,
896 ACPI_ROOT_OBJECT,
897 ACPI_UINT32_MAX,
898 processor_walk_namespace_cb, NULL, &action, NULL);
899#endif
900 register_hotcpu_notifier(&acpi_cpu_notifier);
901}
902
903static
904void acpi_processor_uninstall_hotplug_notify(void)
905{
906#ifdef CONFIG_ACPI_HOTPLUG_CPU
907 int action = UNINSTALL_NOTIFY_HANDLER;
908 acpi_walk_namespace(ACPI_TYPE_ANY,
909 ACPI_ROOT_OBJECT,
910 ACPI_UINT32_MAX,
911 processor_walk_namespace_cb, NULL, &action, NULL);
912#endif
913 unregister_hotcpu_notifier(&acpi_cpu_notifier);
914}
915
916/* 276/*
917 * We keep the driver loaded even when ACPI is not running. 277 * We keep the driver loaded even when ACPI is not running.
918 * This is needed for the powernow-k8 driver, that works even without 278 * This is needed for the powernow-k8 driver, that works even without
919 * ACPI, but needs symbols from this driver 279 * ACPI, but needs symbols from this driver
920 */ 280 */
921 281
922static int __init acpi_processor_init(void) 282static int __init acpi_processor_driver_init(void)
923{ 283{
924 int result = 0; 284 int result = 0;
925 285
926 if (acpi_disabled) 286 if (acpi_disabled)
927 return 0; 287 return 0;
928 288
929 result = acpi_bus_register_driver(&acpi_processor_driver); 289 result = driver_register(&acpi_processor_driver);
930 if (result < 0) 290 if (result < 0)
931 return result; 291 return result;
932 292
933 acpi_processor_syscore_init(); 293 acpi_processor_syscore_init();
934 294 register_hotcpu_notifier(&acpi_cpu_notifier);
935 acpi_processor_install_hotplug_notify();
936
937 acpi_thermal_cpufreq_init(); 295 acpi_thermal_cpufreq_init();
938
939 acpi_processor_ppc_init(); 296 acpi_processor_ppc_init();
940
941 acpi_processor_throttling_init(); 297 acpi_processor_throttling_init();
942
943 return 0; 298 return 0;
944} 299}
945 300
946static void __exit acpi_processor_exit(void) 301static void __exit acpi_processor_driver_exit(void)
947{ 302{
948 if (acpi_disabled) 303 if (acpi_disabled)
949 return; 304 return;
950 305
951 acpi_processor_ppc_exit(); 306 acpi_processor_ppc_exit();
952
953 acpi_thermal_cpufreq_exit(); 307 acpi_thermal_cpufreq_exit();
954 308 unregister_hotcpu_notifier(&acpi_cpu_notifier);
955 acpi_processor_uninstall_hotplug_notify();
956
957 acpi_processor_syscore_exit(); 309 acpi_processor_syscore_exit();
958 310 driver_unregister(&acpi_processor_driver);
959 acpi_bus_unregister_driver(&acpi_processor_driver);
960
961 return;
962} 311}
963 312
964module_init(acpi_processor_init); 313module_init(acpi_processor_driver_init);
965module_exit(acpi_processor_exit); 314module_exit(acpi_processor_driver_exit);
966 315
967MODULE_ALIAS("processor"); 316MODULE_ALIAS("processor");
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
index 4fd392005ef1..ad82bb2a37e0 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -2124,6 +2124,7 @@ int __init acpi_scan_init(void)
2124 2124
2125 acpi_pci_root_init(); 2125 acpi_pci_root_init();
2126 acpi_pci_link_init(); 2126 acpi_pci_link_init();
2127 acpi_processor_init();
2127 acpi_platform_init(); 2128 acpi_platform_init();
2128 acpi_lpss_init(); 2129 acpi_lpss_init();
2129 acpi_csrt_init(); 2130 acpi_csrt_init();