diff options
author | Len Brown <len.brown@intel.com> | 2009-04-05 02:14:15 -0400 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2009-04-05 02:14:15 -0400 |
commit | 478c6a43fcbc6c11609f8cee7c7b57223907754f (patch) | |
tree | a7f7952099da60d33032aed6de9c0c56c9f8779e /drivers/acpi | |
parent | 8a3f257c704e02aee9869decd069a806b45be3f1 (diff) | |
parent | 6bb597507f9839b13498781e481f5458aea33620 (diff) |
Merge branch 'linus' into release
Conflicts:
arch/x86/kernel/cpu/cpufreq/longhaul.c
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi')
-rw-r--r-- | drivers/acpi/ac.c | 1 | ||||
-rw-r--r-- | drivers/acpi/acpica/tbxface.c | 17 | ||||
-rw-r--r-- | drivers/acpi/battery.c | 1 | ||||
-rw-r--r-- | drivers/acpi/button.c | 3 | ||||
-rw-r--r-- | drivers/acpi/dock.c | 2 | ||||
-rw-r--r-- | drivers/acpi/event.c | 6 | ||||
-rw-r--r-- | drivers/acpi/fan.c | 2 | ||||
-rw-r--r-- | drivers/acpi/osl.c | 13 | ||||
-rw-r--r-- | drivers/acpi/pci_root.c | 180 | ||||
-rw-r--r-- | drivers/acpi/processor_core.c | 2 | ||||
-rw-r--r-- | drivers/acpi/processor_perflib.c | 4 | ||||
-rw-r--r-- | drivers/acpi/sbs.c | 1 | ||||
-rw-r--r-- | drivers/acpi/tables.c | 20 | ||||
-rw-r--r-- | drivers/acpi/thermal.c | 4 | ||||
-rw-r--r-- | drivers/acpi/video.c | 5 |
15 files changed, 221 insertions, 40 deletions
diff --git a/drivers/acpi/ac.c b/drivers/acpi/ac.c index 9b917dac7732..88e42abf5d88 100644 --- a/drivers/acpi/ac.c +++ b/drivers/acpi/ac.c | |||
@@ -191,7 +191,6 @@ static int acpi_ac_add_fs(struct acpi_device *device) | |||
191 | acpi_ac_dir); | 191 | acpi_ac_dir); |
192 | if (!acpi_device_dir(device)) | 192 | if (!acpi_device_dir(device)) |
193 | return -ENODEV; | 193 | return -ENODEV; |
194 | acpi_device_dir(device)->owner = THIS_MODULE; | ||
195 | } | 194 | } |
196 | 195 | ||
197 | /* 'state' [R] */ | 196 | /* 'state' [R] */ |
diff --git a/drivers/acpi/acpica/tbxface.c b/drivers/acpi/acpica/tbxface.c index dbca22651504..a88f02bd6c94 100644 --- a/drivers/acpi/acpica/tbxface.c +++ b/drivers/acpi/acpica/tbxface.c | |||
@@ -363,7 +363,7 @@ ACPI_EXPORT_SYMBOL(acpi_unload_table_id) | |||
363 | 363 | ||
364 | /******************************************************************************* | 364 | /******************************************************************************* |
365 | * | 365 | * |
366 | * FUNCTION: acpi_get_table | 366 | * FUNCTION: acpi_get_table_with_size |
367 | * | 367 | * |
368 | * PARAMETERS: Signature - ACPI signature of needed table | 368 | * PARAMETERS: Signature - ACPI signature of needed table |
369 | * Instance - Which instance (for SSDTs) | 369 | * Instance - Which instance (for SSDTs) |
@@ -375,8 +375,9 @@ ACPI_EXPORT_SYMBOL(acpi_unload_table_id) | |||
375 | * | 375 | * |
376 | ******************************************************************************/ | 376 | ******************************************************************************/ |
377 | acpi_status | 377 | acpi_status |
378 | acpi_get_table(char *signature, | 378 | acpi_get_table_with_size(char *signature, |
379 | u32 instance, struct acpi_table_header **out_table) | 379 | u32 instance, struct acpi_table_header **out_table, |
380 | acpi_size *tbl_size) | ||
380 | { | 381 | { |
381 | u32 i; | 382 | u32 i; |
382 | u32 j; | 383 | u32 j; |
@@ -405,6 +406,7 @@ acpi_get_table(char *signature, | |||
405 | acpi_tb_verify_table(&acpi_gbl_root_table_list.tables[i]); | 406 | acpi_tb_verify_table(&acpi_gbl_root_table_list.tables[i]); |
406 | if (ACPI_SUCCESS(status)) { | 407 | if (ACPI_SUCCESS(status)) { |
407 | *out_table = acpi_gbl_root_table_list.tables[i].pointer; | 408 | *out_table = acpi_gbl_root_table_list.tables[i].pointer; |
409 | *tbl_size = acpi_gbl_root_table_list.tables[i].length; | ||
408 | } | 410 | } |
409 | 411 | ||
410 | if (!acpi_gbl_permanent_mmap) { | 412 | if (!acpi_gbl_permanent_mmap) { |
@@ -417,6 +419,15 @@ acpi_get_table(char *signature, | |||
417 | return (AE_NOT_FOUND); | 419 | return (AE_NOT_FOUND); |
418 | } | 420 | } |
419 | 421 | ||
422 | acpi_status | ||
423 | acpi_get_table(char *signature, | ||
424 | u32 instance, struct acpi_table_header **out_table) | ||
425 | { | ||
426 | acpi_size tbl_size; | ||
427 | |||
428 | return acpi_get_table_with_size(signature, | ||
429 | instance, out_table, &tbl_size); | ||
430 | } | ||
420 | ACPI_EXPORT_SYMBOL(acpi_get_table) | 431 | ACPI_EXPORT_SYMBOL(acpi_get_table) |
421 | 432 | ||
422 | /******************************************************************************* | 433 | /******************************************************************************* |
diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c index 2abc03668627..b0de6312919a 100644 --- a/drivers/acpi/battery.c +++ b/drivers/acpi/battery.c | |||
@@ -763,7 +763,6 @@ static int acpi_battery_add_fs(struct acpi_device *device) | |||
763 | acpi_battery_dir); | 763 | acpi_battery_dir); |
764 | if (!acpi_device_dir(device)) | 764 | if (!acpi_device_dir(device)) |
765 | return -ENODEV; | 765 | return -ENODEV; |
766 | acpi_device_dir(device)->owner = THIS_MODULE; | ||
767 | } | 766 | } |
768 | 767 | ||
769 | for (i = 0; i < ACPI_BATTERY_NUMFILES; ++i) { | 768 | for (i = 0; i < ACPI_BATTERY_NUMFILES; ++i) { |
diff --git a/drivers/acpi/button.c b/drivers/acpi/button.c index 171fd914f435..c2f06069dcd4 100644 --- a/drivers/acpi/button.c +++ b/drivers/acpi/button.c | |||
@@ -200,12 +200,10 @@ static int acpi_button_add_fs(struct acpi_device *device) | |||
200 | 200 | ||
201 | if (!entry) | 201 | if (!entry) |
202 | return -ENODEV; | 202 | return -ENODEV; |
203 | entry->owner = THIS_MODULE; | ||
204 | 203 | ||
205 | acpi_device_dir(device) = proc_mkdir(acpi_device_bid(device), entry); | 204 | acpi_device_dir(device) = proc_mkdir(acpi_device_bid(device), entry); |
206 | if (!acpi_device_dir(device)) | 205 | if (!acpi_device_dir(device)) |
207 | return -ENODEV; | 206 | return -ENODEV; |
208 | acpi_device_dir(device)->owner = THIS_MODULE; | ||
209 | 207 | ||
210 | /* 'info' [R] */ | 208 | /* 'info' [R] */ |
211 | entry = proc_create_data(ACPI_BUTTON_FILE_INFO, | 209 | entry = proc_create_data(ACPI_BUTTON_FILE_INFO, |
@@ -522,7 +520,6 @@ static int __init acpi_button_init(void) | |||
522 | acpi_button_dir = proc_mkdir(ACPI_BUTTON_CLASS, acpi_root_dir); | 520 | acpi_button_dir = proc_mkdir(ACPI_BUTTON_CLASS, acpi_root_dir); |
523 | if (!acpi_button_dir) | 521 | if (!acpi_button_dir) |
524 | return -ENODEV; | 522 | return -ENODEV; |
525 | acpi_button_dir->owner = THIS_MODULE; | ||
526 | result = acpi_bus_register_driver(&acpi_button_driver); | 523 | result = acpi_bus_register_driver(&acpi_button_driver); |
527 | if (result < 0) { | 524 | if (result < 0) { |
528 | remove_proc_entry(ACPI_BUTTON_CLASS, acpi_root_dir); | 525 | remove_proc_entry(ACPI_BUTTON_CLASS, acpi_root_dir); |
diff --git a/drivers/acpi/dock.c b/drivers/acpi/dock.c index 8f62fa01a9c7..efb959d6c8a9 100644 --- a/drivers/acpi/dock.c +++ b/drivers/acpi/dock.c | |||
@@ -977,7 +977,7 @@ static int dock_add(acpi_handle handle) | |||
977 | sizeof(struct dock_station *)); | 977 | sizeof(struct dock_station *)); |
978 | 978 | ||
979 | /* we want the dock device to send uevents */ | 979 | /* we want the dock device to send uevents */ |
980 | dock_device->dev.uevent_suppress = 0; | 980 | dev_set_uevent_suppress(&dock_device->dev, 0); |
981 | 981 | ||
982 | if (is_dock(handle)) | 982 | if (is_dock(handle)) |
983 | dock_station->flags |= DOCK_IS_DOCK; | 983 | dock_station->flags |= DOCK_IS_DOCK; |
diff --git a/drivers/acpi/event.c b/drivers/acpi/event.c index 0c24bd4d6562..aeb7e5fb4a04 100644 --- a/drivers/acpi/event.c +++ b/drivers/acpi/event.c | |||
@@ -235,11 +235,7 @@ int acpi_bus_generate_netlink_event(const char *device_class, | |||
235 | return result; | 235 | return result; |
236 | } | 236 | } |
237 | 237 | ||
238 | result = | 238 | genlmsg_multicast(skb, 0, acpi_event_mcgrp.id, GFP_ATOMIC); |
239 | genlmsg_multicast(skb, 0, acpi_event_mcgrp.id, GFP_ATOMIC); | ||
240 | if (result) | ||
241 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, | ||
242 | "Failed to send a Genetlink message!\n")); | ||
243 | return 0; | 239 | return 0; |
244 | } | 240 | } |
245 | 241 | ||
diff --git a/drivers/acpi/fan.c b/drivers/acpi/fan.c index ae41cf3cf4e5..53698ea08371 100644 --- a/drivers/acpi/fan.c +++ b/drivers/acpi/fan.c | |||
@@ -197,7 +197,6 @@ static int acpi_fan_add_fs(struct acpi_device *device) | |||
197 | acpi_fan_dir); | 197 | acpi_fan_dir); |
198 | if (!acpi_device_dir(device)) | 198 | if (!acpi_device_dir(device)) |
199 | return -ENODEV; | 199 | return -ENODEV; |
200 | acpi_device_dir(device)->owner = THIS_MODULE; | ||
201 | } | 200 | } |
202 | 201 | ||
203 | /* 'status' [R/W] */ | 202 | /* 'status' [R/W] */ |
@@ -351,7 +350,6 @@ static int __init acpi_fan_init(void) | |||
351 | acpi_fan_dir = proc_mkdir(ACPI_FAN_CLASS, acpi_root_dir); | 350 | acpi_fan_dir = proc_mkdir(ACPI_FAN_CLASS, acpi_root_dir); |
352 | if (!acpi_fan_dir) | 351 | if (!acpi_fan_dir) |
353 | return -ENODEV; | 352 | return -ENODEV; |
354 | acpi_fan_dir->owner = THIS_MODULE; | ||
355 | #endif | 353 | #endif |
356 | 354 | ||
357 | result = acpi_bus_register_driver(&acpi_fan_driver); | 355 | result = acpi_bus_register_driver(&acpi_fan_driver); |
diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c index f50ca1ea80c3..d59f08ecaf16 100644 --- a/drivers/acpi/osl.c +++ b/drivers/acpi/osl.c | |||
@@ -272,14 +272,21 @@ acpi_os_map_memory(acpi_physical_address phys, acpi_size size) | |||
272 | } | 272 | } |
273 | EXPORT_SYMBOL_GPL(acpi_os_map_memory); | 273 | EXPORT_SYMBOL_GPL(acpi_os_map_memory); |
274 | 274 | ||
275 | void acpi_os_unmap_memory(void __iomem * virt, acpi_size size) | 275 | void __ref acpi_os_unmap_memory(void __iomem *virt, acpi_size size) |
276 | { | 276 | { |
277 | if (acpi_gbl_permanent_mmap) { | 277 | if (acpi_gbl_permanent_mmap) |
278 | iounmap(virt); | 278 | iounmap(virt); |
279 | } | 279 | else |
280 | __acpi_unmap_table(virt, size); | ||
280 | } | 281 | } |
281 | EXPORT_SYMBOL_GPL(acpi_os_unmap_memory); | 282 | EXPORT_SYMBOL_GPL(acpi_os_unmap_memory); |
282 | 283 | ||
284 | void __init early_acpi_os_unmap_memory(void __iomem *virt, acpi_size size) | ||
285 | { | ||
286 | if (!acpi_gbl_permanent_mmap) | ||
287 | __acpi_unmap_table(virt, size); | ||
288 | } | ||
289 | |||
283 | #ifdef ACPI_FUTURE_USAGE | 290 | #ifdef ACPI_FUTURE_USAGE |
284 | acpi_status | 291 | acpi_status |
285 | acpi_os_get_physical_address(void *virt, acpi_physical_address * phys) | 292 | acpi_os_get_physical_address(void *virt, acpi_physical_address * phys) |
diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c index 5b38a026d122..196f97d00956 100644 --- a/drivers/acpi/pci_root.c +++ b/drivers/acpi/pci_root.c | |||
@@ -66,11 +66,18 @@ struct acpi_pci_root { | |||
66 | struct acpi_device * device; | 66 | struct acpi_device * device; |
67 | struct acpi_pci_id id; | 67 | struct acpi_pci_id id; |
68 | struct pci_bus *bus; | 68 | struct pci_bus *bus; |
69 | |||
70 | u32 osc_support_set; /* _OSC state of support bits */ | ||
71 | u32 osc_control_set; /* _OSC state of control bits */ | ||
72 | u32 osc_control_qry; /* the latest _OSC query result */ | ||
73 | |||
74 | u32 osc_queried:1; /* has _OSC control been queried? */ | ||
69 | }; | 75 | }; |
70 | 76 | ||
71 | static LIST_HEAD(acpi_pci_roots); | 77 | static LIST_HEAD(acpi_pci_roots); |
72 | 78 | ||
73 | static struct acpi_pci_driver *sub_driver; | 79 | static struct acpi_pci_driver *sub_driver; |
80 | static DEFINE_MUTEX(osc_lock); | ||
74 | 81 | ||
75 | int acpi_pci_register_driver(struct acpi_pci_driver *driver) | 82 | int acpi_pci_register_driver(struct acpi_pci_driver *driver) |
76 | { | 83 | { |
@@ -185,6 +192,175 @@ static void acpi_pci_bridge_scan(struct acpi_device *device) | |||
185 | } | 192 | } |
186 | } | 193 | } |
187 | 194 | ||
195 | static u8 OSC_UUID[16] = {0x5B, 0x4D, 0xDB, 0x33, 0xF7, 0x1F, 0x1C, 0x40, | ||
196 | 0x96, 0x57, 0x74, 0x41, 0xC0, 0x3D, 0xD7, 0x66}; | ||
197 | |||
198 | static acpi_status acpi_pci_run_osc(acpi_handle handle, | ||
199 | const u32 *capbuf, u32 *retval) | ||
200 | { | ||
201 | acpi_status status; | ||
202 | struct acpi_object_list input; | ||
203 | union acpi_object in_params[4]; | ||
204 | struct acpi_buffer output = {ACPI_ALLOCATE_BUFFER, NULL}; | ||
205 | union acpi_object *out_obj; | ||
206 | u32 errors; | ||
207 | |||
208 | /* Setting up input parameters */ | ||
209 | input.count = 4; | ||
210 | input.pointer = in_params; | ||
211 | in_params[0].type = ACPI_TYPE_BUFFER; | ||
212 | in_params[0].buffer.length = 16; | ||
213 | in_params[0].buffer.pointer = OSC_UUID; | ||
214 | in_params[1].type = ACPI_TYPE_INTEGER; | ||
215 | in_params[1].integer.value = 1; | ||
216 | in_params[2].type = ACPI_TYPE_INTEGER; | ||
217 | in_params[2].integer.value = 3; | ||
218 | in_params[3].type = ACPI_TYPE_BUFFER; | ||
219 | in_params[3].buffer.length = 12; | ||
220 | in_params[3].buffer.pointer = (u8 *)capbuf; | ||
221 | |||
222 | status = acpi_evaluate_object(handle, "_OSC", &input, &output); | ||
223 | if (ACPI_FAILURE(status)) | ||
224 | return status; | ||
225 | |||
226 | if (!output.length) | ||
227 | return AE_NULL_OBJECT; | ||
228 | |||
229 | out_obj = output.pointer; | ||
230 | if (out_obj->type != ACPI_TYPE_BUFFER) { | ||
231 | printk(KERN_DEBUG "_OSC evaluation returned wrong type\n"); | ||
232 | status = AE_TYPE; | ||
233 | goto out_kfree; | ||
234 | } | ||
235 | /* Need to ignore the bit0 in result code */ | ||
236 | errors = *((u32 *)out_obj->buffer.pointer) & ~(1 << 0); | ||
237 | if (errors) { | ||
238 | if (errors & OSC_REQUEST_ERROR) | ||
239 | printk(KERN_DEBUG "_OSC request failed\n"); | ||
240 | if (errors & OSC_INVALID_UUID_ERROR) | ||
241 | printk(KERN_DEBUG "_OSC invalid UUID\n"); | ||
242 | if (errors & OSC_INVALID_REVISION_ERROR) | ||
243 | printk(KERN_DEBUG "_OSC invalid revision\n"); | ||
244 | if (errors & OSC_CAPABILITIES_MASK_ERROR) { | ||
245 | if (capbuf[OSC_QUERY_TYPE] & OSC_QUERY_ENABLE) | ||
246 | goto out_success; | ||
247 | printk(KERN_DEBUG | ||
248 | "Firmware did not grant requested _OSC control\n"); | ||
249 | status = AE_SUPPORT; | ||
250 | goto out_kfree; | ||
251 | } | ||
252 | status = AE_ERROR; | ||
253 | goto out_kfree; | ||
254 | } | ||
255 | out_success: | ||
256 | *retval = *((u32 *)(out_obj->buffer.pointer + 8)); | ||
257 | status = AE_OK; | ||
258 | |||
259 | out_kfree: | ||
260 | kfree(output.pointer); | ||
261 | return status; | ||
262 | } | ||
263 | |||
264 | static acpi_status acpi_pci_query_osc(struct acpi_pci_root *root, u32 flags) | ||
265 | { | ||
266 | acpi_status status; | ||
267 | u32 support_set, result, capbuf[3]; | ||
268 | |||
269 | /* do _OSC query for all possible controls */ | ||
270 | support_set = root->osc_support_set | (flags & OSC_SUPPORT_MASKS); | ||
271 | capbuf[OSC_QUERY_TYPE] = OSC_QUERY_ENABLE; | ||
272 | capbuf[OSC_SUPPORT_TYPE] = support_set; | ||
273 | capbuf[OSC_CONTROL_TYPE] = OSC_CONTROL_MASKS; | ||
274 | |||
275 | status = acpi_pci_run_osc(root->device->handle, capbuf, &result); | ||
276 | if (ACPI_SUCCESS(status)) { | ||
277 | root->osc_support_set = support_set; | ||
278 | root->osc_control_qry = result; | ||
279 | root->osc_queried = 1; | ||
280 | } | ||
281 | return status; | ||
282 | } | ||
283 | |||
284 | static acpi_status acpi_pci_osc_support(struct acpi_pci_root *root, u32 flags) | ||
285 | { | ||
286 | acpi_status status; | ||
287 | acpi_handle tmp; | ||
288 | |||
289 | status = acpi_get_handle(root->device->handle, "_OSC", &tmp); | ||
290 | if (ACPI_FAILURE(status)) | ||
291 | return status; | ||
292 | mutex_lock(&osc_lock); | ||
293 | status = acpi_pci_query_osc(root, flags); | ||
294 | mutex_unlock(&osc_lock); | ||
295 | return status; | ||
296 | } | ||
297 | |||
298 | static struct acpi_pci_root *acpi_pci_find_root(acpi_handle handle) | ||
299 | { | ||
300 | struct acpi_pci_root *root; | ||
301 | list_for_each_entry(root, &acpi_pci_roots, node) { | ||
302 | if (root->device->handle == handle) | ||
303 | return root; | ||
304 | } | ||
305 | return NULL; | ||
306 | } | ||
307 | |||
308 | /** | ||
309 | * acpi_pci_osc_control_set - commit requested control to Firmware | ||
310 | * @handle: acpi_handle for the target ACPI object | ||
311 | * @flags: driver's requested control bits | ||
312 | * | ||
313 | * Attempt to take control from Firmware on requested control bits. | ||
314 | **/ | ||
315 | acpi_status acpi_pci_osc_control_set(acpi_handle handle, u32 flags) | ||
316 | { | ||
317 | acpi_status status; | ||
318 | u32 control_req, result, capbuf[3]; | ||
319 | acpi_handle tmp; | ||
320 | struct acpi_pci_root *root; | ||
321 | |||
322 | status = acpi_get_handle(handle, "_OSC", &tmp); | ||
323 | if (ACPI_FAILURE(status)) | ||
324 | return status; | ||
325 | |||
326 | control_req = (flags & OSC_CONTROL_MASKS); | ||
327 | if (!control_req) | ||
328 | return AE_TYPE; | ||
329 | |||
330 | root = acpi_pci_find_root(handle); | ||
331 | if (!root) | ||
332 | return AE_NOT_EXIST; | ||
333 | |||
334 | mutex_lock(&osc_lock); | ||
335 | /* No need to evaluate _OSC if the control was already granted. */ | ||
336 | if ((root->osc_control_set & control_req) == control_req) | ||
337 | goto out; | ||
338 | |||
339 | /* Need to query controls first before requesting them */ | ||
340 | if (!root->osc_queried) { | ||
341 | status = acpi_pci_query_osc(root, root->osc_support_set); | ||
342 | if (ACPI_FAILURE(status)) | ||
343 | goto out; | ||
344 | } | ||
345 | if ((root->osc_control_qry & control_req) != control_req) { | ||
346 | printk(KERN_DEBUG | ||
347 | "Firmware did not grant requested _OSC control\n"); | ||
348 | status = AE_SUPPORT; | ||
349 | goto out; | ||
350 | } | ||
351 | |||
352 | capbuf[OSC_QUERY_TYPE] = 0; | ||
353 | capbuf[OSC_SUPPORT_TYPE] = root->osc_support_set; | ||
354 | capbuf[OSC_CONTROL_TYPE] = root->osc_control_set | control_req; | ||
355 | status = acpi_pci_run_osc(handle, capbuf, &result); | ||
356 | if (ACPI_SUCCESS(status)) | ||
357 | root->osc_control_set = result; | ||
358 | out: | ||
359 | mutex_unlock(&osc_lock); | ||
360 | return status; | ||
361 | } | ||
362 | EXPORT_SYMBOL(acpi_pci_osc_control_set); | ||
363 | |||
188 | static int __devinit acpi_pci_root_add(struct acpi_device *device) | 364 | static int __devinit acpi_pci_root_add(struct acpi_device *device) |
189 | { | 365 | { |
190 | int result = 0; | 366 | int result = 0; |
@@ -217,7 +393,7 @@ static int __devinit acpi_pci_root_add(struct acpi_device *device) | |||
217 | * PCI domains, so we indicate this in _OSC support capabilities. | 393 | * PCI domains, so we indicate this in _OSC support capabilities. |
218 | */ | 394 | */ |
219 | flags = base_flags = OSC_PCI_SEGMENT_GROUPS_SUPPORT; | 395 | flags = base_flags = OSC_PCI_SEGMENT_GROUPS_SUPPORT; |
220 | pci_acpi_osc_support(device->handle, flags); | 396 | acpi_pci_osc_support(root, flags); |
221 | 397 | ||
222 | /* | 398 | /* |
223 | * Segment | 399 | * Segment |
@@ -353,7 +529,7 @@ static int __devinit acpi_pci_root_add(struct acpi_device *device) | |||
353 | if (pci_msi_enabled()) | 529 | if (pci_msi_enabled()) |
354 | flags |= OSC_MSI_SUPPORT; | 530 | flags |= OSC_MSI_SUPPORT; |
355 | if (flags != base_flags) | 531 | if (flags != base_flags) |
356 | pci_acpi_osc_support(device->handle, flags); | 532 | acpi_pci_osc_support(root, flags); |
357 | 533 | ||
358 | end: | 534 | end: |
359 | if (result) { | 535 | if (result) { |
diff --git a/drivers/acpi/processor_core.c b/drivers/acpi/processor_core.c index 775324e34ffa..8e683f8cc573 100644 --- a/drivers/acpi/processor_core.c +++ b/drivers/acpi/processor_core.c | |||
@@ -359,7 +359,6 @@ static int acpi_processor_add_fs(struct acpi_device *device) | |||
359 | if (!acpi_device_dir(device)) | 359 | if (!acpi_device_dir(device)) |
360 | return -ENODEV; | 360 | return -ENODEV; |
361 | } | 361 | } |
362 | acpi_device_dir(device)->owner = THIS_MODULE; | ||
363 | 362 | ||
364 | /* 'info' [R] */ | 363 | /* 'info' [R] */ |
365 | entry = proc_create_data(ACPI_PROCESSOR_FILE_INFO, | 364 | entry = proc_create_data(ACPI_PROCESSOR_FILE_INFO, |
@@ -1163,7 +1162,6 @@ static int __init acpi_processor_init(void) | |||
1163 | acpi_processor_dir = proc_mkdir(ACPI_PROCESSOR_CLASS, acpi_root_dir); | 1162 | acpi_processor_dir = proc_mkdir(ACPI_PROCESSOR_CLASS, acpi_root_dir); |
1164 | if (!acpi_processor_dir) | 1163 | if (!acpi_processor_dir) |
1165 | return -ENOMEM; | 1164 | return -ENOMEM; |
1166 | acpi_processor_dir->owner = THIS_MODULE; | ||
1167 | 1165 | ||
1168 | /* | 1166 | /* |
1169 | * Check whether the system is DMI table. If yes, OSPM | 1167 | * Check whether the system is DMI table. If yes, OSPM |
diff --git a/drivers/acpi/processor_perflib.c b/drivers/acpi/processor_perflib.c index 215f1bf7d4c1..cafb41000f6b 100644 --- a/drivers/acpi/processor_perflib.c +++ b/drivers/acpi/processor_perflib.c | |||
@@ -524,7 +524,7 @@ int acpi_processor_preregister_performance( | |||
524 | goto err_out; | 524 | goto err_out; |
525 | } | 525 | } |
526 | 526 | ||
527 | if (!performance || !percpu_ptr(performance, i)) { | 527 | if (!performance || !per_cpu_ptr(performance, i)) { |
528 | retval = -EINVAL; | 528 | retval = -EINVAL; |
529 | goto err_out; | 529 | goto err_out; |
530 | } | 530 | } |
@@ -536,7 +536,7 @@ int acpi_processor_preregister_performance( | |||
536 | if (!pr) | 536 | if (!pr) |
537 | continue; | 537 | continue; |
538 | 538 | ||
539 | pr->performance = percpu_ptr(performance, i); | 539 | pr->performance = per_cpu_ptr(performance, i); |
540 | cpumask_set_cpu(i, pr->performance->shared_cpu_map); | 540 | cpumask_set_cpu(i, pr->performance->shared_cpu_map); |
541 | if (acpi_processor_get_psd(pr)) { | 541 | if (acpi_processor_get_psd(pr)) { |
542 | retval = -EINVAL; | 542 | retval = -EINVAL; |
diff --git a/drivers/acpi/sbs.c b/drivers/acpi/sbs.c index bb8fd1b6054b..4b214b74ebaa 100644 --- a/drivers/acpi/sbs.c +++ b/drivers/acpi/sbs.c | |||
@@ -493,7 +493,6 @@ acpi_sbs_add_fs(struct proc_dir_entry **dir, | |||
493 | if (!*dir) { | 493 | if (!*dir) { |
494 | return -ENODEV; | 494 | return -ENODEV; |
495 | } | 495 | } |
496 | (*dir)->owner = THIS_MODULE; | ||
497 | } | 496 | } |
498 | 497 | ||
499 | /* 'info' [R] */ | 498 | /* 'info' [R] */ |
diff --git a/drivers/acpi/tables.c b/drivers/acpi/tables.c index 991c006a301b..646d39c031ca 100644 --- a/drivers/acpi/tables.c +++ b/drivers/acpi/tables.c | |||
@@ -211,14 +211,15 @@ acpi_table_parse_entries(char *id, | |||
211 | struct acpi_subtable_header *entry; | 211 | struct acpi_subtable_header *entry; |
212 | unsigned int count = 0; | 212 | unsigned int count = 0; |
213 | unsigned long table_end; | 213 | unsigned long table_end; |
214 | acpi_size tbl_size; | ||
214 | 215 | ||
215 | if (!handler) | 216 | if (!handler) |
216 | return -EINVAL; | 217 | return -EINVAL; |
217 | 218 | ||
218 | if (strncmp(id, ACPI_SIG_MADT, 4) == 0) | 219 | if (strncmp(id, ACPI_SIG_MADT, 4) == 0) |
219 | acpi_get_table(id, acpi_apic_instance, &table_header); | 220 | acpi_get_table_with_size(id, acpi_apic_instance, &table_header, &tbl_size); |
220 | else | 221 | else |
221 | acpi_get_table(id, 0, &table_header); | 222 | acpi_get_table_with_size(id, 0, &table_header, &tbl_size); |
222 | 223 | ||
223 | if (!table_header) { | 224 | if (!table_header) { |
224 | printk(KERN_WARNING PREFIX "%4.4s not present\n", id); | 225 | printk(KERN_WARNING PREFIX "%4.4s not present\n", id); |
@@ -236,8 +237,10 @@ acpi_table_parse_entries(char *id, | |||
236 | table_end) { | 237 | table_end) { |
237 | if (entry->type == entry_id | 238 | if (entry->type == entry_id |
238 | && (!max_entries || count++ < max_entries)) | 239 | && (!max_entries || count++ < max_entries)) |
239 | if (handler(entry, table_end)) | 240 | if (handler(entry, table_end)) { |
241 | early_acpi_os_unmap_memory((char *)table_header, tbl_size); | ||
240 | return -EINVAL; | 242 | return -EINVAL; |
243 | } | ||
241 | 244 | ||
242 | entry = (struct acpi_subtable_header *) | 245 | entry = (struct acpi_subtable_header *) |
243 | ((unsigned long)entry + entry->length); | 246 | ((unsigned long)entry + entry->length); |
@@ -247,6 +250,7 @@ acpi_table_parse_entries(char *id, | |||
247 | "%i found\n", id, entry_id, count - max_entries, count); | 250 | "%i found\n", id, entry_id, count - max_entries, count); |
248 | } | 251 | } |
249 | 252 | ||
253 | early_acpi_os_unmap_memory((char *)table_header, tbl_size); | ||
250 | return count; | 254 | return count; |
251 | } | 255 | } |
252 | 256 | ||
@@ -271,17 +275,19 @@ acpi_table_parse_madt(enum acpi_madt_type id, | |||
271 | int __init acpi_table_parse(char *id, acpi_table_handler handler) | 275 | int __init acpi_table_parse(char *id, acpi_table_handler handler) |
272 | { | 276 | { |
273 | struct acpi_table_header *table = NULL; | 277 | struct acpi_table_header *table = NULL; |
278 | acpi_size tbl_size; | ||
274 | 279 | ||
275 | if (!handler) | 280 | if (!handler) |
276 | return -EINVAL; | 281 | return -EINVAL; |
277 | 282 | ||
278 | if (strncmp(id, ACPI_SIG_MADT, 4) == 0) | 283 | if (strncmp(id, ACPI_SIG_MADT, 4) == 0) |
279 | acpi_get_table(id, acpi_apic_instance, &table); | 284 | acpi_get_table_with_size(id, acpi_apic_instance, &table, &tbl_size); |
280 | else | 285 | else |
281 | acpi_get_table(id, 0, &table); | 286 | acpi_get_table_with_size(id, 0, &table, &tbl_size); |
282 | 287 | ||
283 | if (table) { | 288 | if (table) { |
284 | handler(table); | 289 | handler(table); |
290 | early_acpi_os_unmap_memory(table, tbl_size); | ||
285 | return 0; | 291 | return 0; |
286 | } else | 292 | } else |
287 | return 1; | 293 | return 1; |
@@ -295,8 +301,9 @@ int __init acpi_table_parse(char *id, acpi_table_handler handler) | |||
295 | static void __init check_multiple_madt(void) | 301 | static void __init check_multiple_madt(void) |
296 | { | 302 | { |
297 | struct acpi_table_header *table = NULL; | 303 | struct acpi_table_header *table = NULL; |
304 | acpi_size tbl_size; | ||
298 | 305 | ||
299 | acpi_get_table(ACPI_SIG_MADT, 2, &table); | 306 | acpi_get_table_with_size(ACPI_SIG_MADT, 2, &table, &tbl_size); |
300 | if (table) { | 307 | if (table) { |
301 | printk(KERN_WARNING PREFIX | 308 | printk(KERN_WARNING PREFIX |
302 | "BIOS bug: multiple APIC/MADT found," | 309 | "BIOS bug: multiple APIC/MADT found," |
@@ -305,6 +312,7 @@ static void __init check_multiple_madt(void) | |||
305 | "If \"acpi_apic_instance=%d\" works better, " | 312 | "If \"acpi_apic_instance=%d\" works better, " |
306 | "notify linux-acpi@vger.kernel.org\n", | 313 | "notify linux-acpi@vger.kernel.org\n", |
307 | acpi_apic_instance ? 0 : 2); | 314 | acpi_apic_instance ? 0 : 2); |
315 | early_acpi_os_unmap_memory(table, tbl_size); | ||
308 | 316 | ||
309 | } else | 317 | } else |
310 | acpi_apic_instance = 0; | 318 | acpi_apic_instance = 0; |
diff --git a/drivers/acpi/thermal.c b/drivers/acpi/thermal.c index 6b959976b7a4..e8c143caf0fd 100644 --- a/drivers/acpi/thermal.c +++ b/drivers/acpi/thermal.c | |||
@@ -371,7 +371,7 @@ static int acpi_thermal_trips_update(struct acpi_thermal *tz, int flag) | |||
371 | /* | 371 | /* |
372 | * Treat freezing temperatures as invalid as well; some | 372 | * Treat freezing temperatures as invalid as well; some |
373 | * BIOSes return really low values and cause reboots at startup. | 373 | * BIOSes return really low values and cause reboots at startup. |
374 | * Below zero (Celcius) values clearly aren't right for sure.. | 374 | * Below zero (Celsius) values clearly aren't right for sure.. |
375 | * ... so lets discard those as invalid. | 375 | * ... so lets discard those as invalid. |
376 | */ | 376 | */ |
377 | if (ACPI_FAILURE(status) || | 377 | if (ACPI_FAILURE(status) || |
@@ -1192,7 +1192,6 @@ static int acpi_thermal_add_fs(struct acpi_device *device) | |||
1192 | acpi_thermal_dir); | 1192 | acpi_thermal_dir); |
1193 | if (!acpi_device_dir(device)) | 1193 | if (!acpi_device_dir(device)) |
1194 | return -ENODEV; | 1194 | return -ENODEV; |
1195 | acpi_device_dir(device)->owner = THIS_MODULE; | ||
1196 | } | 1195 | } |
1197 | 1196 | ||
1198 | /* 'state' [R] */ | 1197 | /* 'state' [R] */ |
@@ -1534,7 +1533,6 @@ static int __init acpi_thermal_init(void) | |||
1534 | acpi_thermal_dir = proc_mkdir(ACPI_THERMAL_CLASS, acpi_root_dir); | 1533 | acpi_thermal_dir = proc_mkdir(ACPI_THERMAL_CLASS, acpi_root_dir); |
1535 | if (!acpi_thermal_dir) | 1534 | if (!acpi_thermal_dir) |
1536 | return -ENODEV; | 1535 | return -ENODEV; |
1537 | acpi_thermal_dir->owner = THIS_MODULE; | ||
1538 | 1536 | ||
1539 | result = acpi_bus_register_driver(&acpi_thermal_driver); | 1537 | result = acpi_bus_register_driver(&acpi_thermal_driver); |
1540 | if (result < 0) { | 1538 | if (result < 0) { |
diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c index d51d6f06c09b..ab06143672bc 100644 --- a/drivers/acpi/video.c +++ b/drivers/acpi/video.c | |||
@@ -1256,8 +1256,6 @@ static int acpi_video_device_add_fs(struct acpi_device *device) | |||
1256 | if (!device_dir) | 1256 | if (!device_dir) |
1257 | return -ENOMEM; | 1257 | return -ENOMEM; |
1258 | 1258 | ||
1259 | device_dir->owner = THIS_MODULE; | ||
1260 | |||
1261 | /* 'info' [R] */ | 1259 | /* 'info' [R] */ |
1262 | entry = proc_create_data("info", S_IRUGO, device_dir, | 1260 | entry = proc_create_data("info", S_IRUGO, device_dir, |
1263 | &acpi_video_device_info_fops, acpi_driver_data(device)); | 1261 | &acpi_video_device_info_fops, acpi_driver_data(device)); |
@@ -1531,8 +1529,6 @@ static int acpi_video_bus_add_fs(struct acpi_device *device) | |||
1531 | if (!device_dir) | 1529 | if (!device_dir) |
1532 | return -ENOMEM; | 1530 | return -ENOMEM; |
1533 | 1531 | ||
1534 | device_dir->owner = THIS_MODULE; | ||
1535 | |||
1536 | /* 'info' [R] */ | 1532 | /* 'info' [R] */ |
1537 | entry = proc_create_data("info", S_IRUGO, device_dir, | 1533 | entry = proc_create_data("info", S_IRUGO, device_dir, |
1538 | &acpi_video_bus_info_fops, | 1534 | &acpi_video_bus_info_fops, |
@@ -2291,7 +2287,6 @@ int acpi_video_register(void) | |||
2291 | acpi_video_dir = proc_mkdir(ACPI_VIDEO_CLASS, acpi_root_dir); | 2287 | acpi_video_dir = proc_mkdir(ACPI_VIDEO_CLASS, acpi_root_dir); |
2292 | if (!acpi_video_dir) | 2288 | if (!acpi_video_dir) |
2293 | return -ENODEV; | 2289 | return -ENODEV; |
2294 | acpi_video_dir->owner = THIS_MODULE; | ||
2295 | 2290 | ||
2296 | result = acpi_bus_register_driver(&acpi_video_bus); | 2291 | result = acpi_bus_register_driver(&acpi_video_bus); |
2297 | if (result < 0) { | 2292 | if (result < 0) { |