Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'acpi-5.7-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm

Pull more ACPI updates from Rafael Wysocki:
"Additional ACPI updates.

These update the ACPICA code in the kernel to the 20200326 upstream
revision, fix an ACPI-related CPU hotplug deadlock on x86, update
Intel Tiger Lake device IDs in some places, add a new ACPI backlight
blacklist entry, update the "acpi_backlight" kernel command line
switch documentation and clean up a CPPC library routine.

Specifics:

- Update the ACPICA code in the kernel to upstream revision 20200326
including:
* Fix for a typo in a comment field (Bob Moore)
* acpiExec namespace init file fixes (Bob Moore)
* Addition of NHLT to the known tables list (Cezary Rojewski)
* Conversion of PlatformCommChannel ASL keyword to PCC (Erik
Kaneda)
* acpiexec cleanup (Erik Kaneda)
* WSMT-related typo fix (Erik Kaneda)
* sprintf() utility function fix (John Levon)
* IVRS IVHD type 11h parsing implementation (Michał Żygowski)
* IVRS IVHD type 10h reserved field name fix (Michał Żygowski)

- Fix ACPI-related CPU hotplug deadlock on x86 (Qian Cai)

- Fix Intel Tiger Lake ACPI device IDs in several places (Gayatri
Kammela)

- Add ACPI backlight blacklist entry for Acer Aspire 5783z (Hans de
Goede)

- Fix documentation of the "acpi_backlight" kernel command line
switch (Randy Dunlap)

- Clean up the acpi_get_psd_map() CPPC library routine (Liguang
Zhang)"

* tag 'acpi-5.7-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
x86: ACPI: fix CPU hotplug deadlock
thermal: int340x_thermal: fix: Update Tiger Lake ACPI device IDs
platform/x86: intel-hid: fix: Update Tiger Lake ACPI device ID
ACPI: Update Tiger Lake ACPI device IDs
ACPI: video: Use native backlight on Acer Aspire 5783z
ACPI: video: Docs update for "acpi_backlight" kernel parameter options
ACPICA: Update version 20200326
ACPICA: Fixes for acpiExec namespace init file
ACPICA: Add NHLT table signature
ACPICA: WSMT: Fix typo, no functional change
ACPICA: utilities: fix sprintf()
ACPICA: acpiexec: remove redeclaration of acpi_gbl_db_opt_no_region_support
ACPICA: Change PlatformCommChannel ASL keyword to PCC
ACPICA: Fix IVRS IVHD type 10h reserved field name
ACPICA: Implement IVRS IVHD type 11h parsing
ACPICA: Fix a typo in a comment field
ACPI: CPPC: clean up acpi_get_psd_map()

+155 -77
+5 -3
Documentation/admin-guide/kernel-parameters.txt
··· 22 22 default: 0 23 23 24 24 acpi_backlight= [HW,ACPI] 25 - acpi_backlight=vendor 26 - acpi_backlight=video 27 - If set to vendor, prefer vendor specific driver 25 + { vendor | video | native | none } 26 + If set to vendor, prefer vendor-specific driver 28 27 (e.g. thinkpad_acpi, sony_acpi, etc.) instead 29 28 of the ACPI video.ko driver. 29 + If set to video, use the ACPI video.ko driver. 30 + If set to native, use the device's native backlight mode. 31 + If set to none, disable the ACPI backlight interface. 30 32 31 33 acpi_force_32bit_fadt_addr 32 34 force FADT to use 32 bit addresses rather than the
+2 -1
arch/x86/kernel/acpi/cstate.c
··· 161 161 162 162 /* Make sure we are running on right CPU */ 163 163 164 - retval = work_on_cpu(cpu, acpi_processor_ffh_cstate_probe_cpu, cx); 164 + retval = call_on_cpu(cpu, acpi_processor_ffh_cstate_probe_cpu, cx, 165 + false); 165 166 if (retval == 0) { 166 167 /* Use the hint in CST */ 167 168 percpu_entry->states[cx->index].eax = cx->address;
+2
drivers/acpi/acpica/acnamesp.h
··· 256 256 acpi_ns_build_normalized_path(struct acpi_namespace_node *node, 257 257 char *full_path, u32 path_size, u8 no_trailing); 258 258 259 + void acpi_ns_normalize_pathname(char *original_path); 260 + 259 261 char *acpi_ns_get_normalized_pathname(struct acpi_namespace_node *node, 260 262 u8 no_trailing); 261 263
+7 -9
drivers/acpi/acpica/dbinput.c
··· 468 468 return (NULL); 469 469 } 470 470 471 - /* Remove any spaces at the beginning */ 471 + /* Remove any spaces at the beginning, ignore blank lines */ 472 472 473 - if (*string == ' ') { 474 - while (*string && (*string == ' ')) { 475 - string++; 476 - } 473 + while (*string && isspace(*string)) { 474 + string++; 475 + } 477 476 478 - if (!(*string)) { 479 - return (NULL); 480 - } 477 + if (!(*string)) { 478 + return (NULL); 481 479 } 482 480 483 481 switch (*string) { ··· 568 570 569 571 /* Find end of token */ 570 572 571 - while (*string && (*string != ' ')) { 573 + while (*string && !isspace(*string)) { 572 574 string++; 573 575 } 574 576 break;
+1
drivers/acpi/acpica/dbxface.c
··· 409 409 acpi_gbl_db_output_flags = ACPI_DB_CONSOLE_OUTPUT; 410 410 411 411 acpi_gbl_db_opt_no_ini_methods = FALSE; 412 + acpi_gbl_db_opt_no_region_support = FALSE; 412 413 413 414 acpi_gbl_db_buffer = acpi_os_allocate(ACPI_DEBUG_BUFFER_SIZE); 414 415 if (!acpi_gbl_db_buffer) {
+33
drivers/acpi/acpica/dswexec.c
··· 16 16 #include "acinterp.h" 17 17 #include "acnamesp.h" 18 18 #include "acdebug.h" 19 + #ifdef ACPI_EXEC_APP 20 + #include "aecommon.h" 21 + #endif 19 22 20 23 #define _COMPONENT ACPI_DISPATCHER 21 24 ACPI_MODULE_NAME("dswexec") ··· 332 329 u32 op_class; 333 330 union acpi_parse_object *next_op; 334 331 union acpi_parse_object *first_arg; 332 + #ifdef ACPI_EXEC_APP 333 + char *namepath; 334 + union acpi_operand_object *obj_desc; 335 + #endif 335 336 336 337 ACPI_FUNCTION_TRACE_PTR(ds_exec_end_op, walk_state); 337 338 ··· 544 537 545 538 status = 546 539 acpi_ds_eval_buffer_field_operands(walk_state, op); 540 + if (ACPI_FAILURE(status)) { 541 + break; 542 + } 543 + #ifdef ACPI_EXEC_APP 544 + /* 545 + * acpi_exec support for namespace initialization file (initialize 546 + * buffer_fields in this code.) 547 + */ 548 + namepath = 549 + acpi_ns_get_external_pathname(op->common.node); 550 + status = ae_lookup_init_file_entry(namepath, &obj_desc); 551 + if (ACPI_SUCCESS(status)) { 552 + status = 553 + acpi_ex_write_data_to_field(obj_desc, 554 + op->common. 555 + node->object, 556 + NULL); 557 + if ACPI_FAILURE 558 + (status) { 559 + ACPI_EXCEPTION((AE_INFO, status, 560 + "While writing to buffer field")); 561 + } 562 + } 563 + ACPI_FREE(namepath); 564 + status = AE_OK; 565 + #endif 547 566 break; 548 567 549 568 case AML_TYPE_CREATE_OBJECT:
-2
drivers/acpi/acpica/dswload.c
··· 14 14 #include "acdispat.h" 15 15 #include "acinterp.h" 16 16 #include "acnamesp.h" 17 - 18 17 #ifdef ACPI_ASL_COMPILER 19 18 #include "acdisasm.h" 20 19 #endif ··· 398 399 union acpi_parse_object *op; 399 400 acpi_object_type object_type; 400 401 acpi_status status = AE_OK; 401 - 402 402 #ifdef ACPI_ASL_COMPILER 403 403 u8 param_count; 404 404 #endif
+35
drivers/acpi/acpica/dswload2.c
··· 15 15 #include "acinterp.h" 16 16 #include "acnamesp.h" 17 17 #include "acevents.h" 18 + #ifdef ACPI_EXEC_APP 19 + #include "aecommon.h" 20 + #endif 18 21 19 22 #define _COMPONENT ACPI_DISPATCHER 20 23 ACPI_MODULE_NAME("dswload2") ··· 376 373 struct acpi_namespace_node *new_node; 377 374 u32 i; 378 375 u8 region_space; 376 + #ifdef ACPI_EXEC_APP 377 + union acpi_operand_object *obj_desc; 378 + char *namepath; 379 + #endif 379 380 380 381 ACPI_FUNCTION_TRACE(ds_load2_end_op); 381 382 ··· 473 466 * be evaluated later during the execution phase 474 467 */ 475 468 status = acpi_ds_create_buffer_field(op, walk_state); 469 + if (ACPI_FAILURE(status)) { 470 + ACPI_EXCEPTION((AE_INFO, status, 471 + "CreateBufferField failure")); 472 + goto cleanup; 473 + } 476 474 break; 477 475 478 476 case AML_TYPE_NAMED_FIELD: ··· 616 604 case AML_NAME_OP: 617 605 618 606 status = acpi_ds_create_node(walk_state, node, op); 607 + if (ACPI_FAILURE(status)) { 608 + goto cleanup; 609 + } 610 + #ifdef ACPI_EXEC_APP 611 + /* 612 + * acpi_exec support for namespace initialization file (initialize 613 + * Name opcodes in this code.) 614 + */ 615 + namepath = acpi_ns_get_external_pathname(node); 616 + status = ae_lookup_init_file_entry(namepath, &obj_desc); 617 + if (ACPI_SUCCESS(status)) { 618 + 619 + /* Detach any existing object, attach new object */ 620 + 621 + if (node->object) { 622 + acpi_ns_detach_object(node); 623 + } 624 + acpi_ns_attach_object(node, obj_desc, 625 + obj_desc->common.type); 626 + } 627 + ACPI_FREE(namepath); 628 + status = AE_OK; 629 + #endif 619 630 break; 620 631 621 632 case AML_METHOD_OP:
+1 -5
drivers/acpi/acpica/nsnames.c
··· 13 13 #define _COMPONENT ACPI_NAMESPACE 14 14 ACPI_MODULE_NAME("nsnames") 15 15 16 - /* Local Prototypes */ 17 - static void acpi_ns_normalize_pathname(char *original_path); 18 - 19 16 /******************************************************************************* 20 17 * 21 18 * FUNCTION: acpi_ns_get_external_pathname ··· 27 30 * for error and debug statements. 28 31 * 29 32 ******************************************************************************/ 30 - 31 33 char *acpi_ns_get_external_pathname(struct acpi_namespace_node *node) 32 34 { 33 35 char *name_buffer; ··· 407 411 * 408 412 ******************************************************************************/ 409 413 410 - static void acpi_ns_normalize_pathname(char *original_path) 414 + void acpi_ns_normalize_pathname(char *original_path) 411 415 { 412 416 char *input_path = original_path; 413 417 char *new_path_buffer;
+1 -1
drivers/acpi/acpica/utdecode.c
··· 78 78 "IPMI", /* 0x07 */ 79 79 "GeneralPurposeIo", /* 0x08 */ 80 80 "GenericSerialBus", /* 0x09 */ 81 - "PlatformCommChannel" /* 0x0A */ 81 + "PCC" /* 0x0A */ 82 82 }; 83 83 84 84 const char *acpi_ut_get_region_name(u8 space_id)
+5 -4
drivers/acpi/acpica/utdelete.c
··· 452 452 * 453 453 * FUNCTION: acpi_ut_update_object_reference 454 454 * 455 - * PARAMETERS: object - Increment ref count for this object 456 - * and all sub-objects 455 + * PARAMETERS: object - Increment or decrement the ref count for 456 + * this object and all sub-objects 457 457 * action - Either REF_INCREMENT or REF_DECREMENT 458 458 * 459 459 * RETURN: Status 460 460 * 461 - * DESCRIPTION: Increment the object reference count 461 + * DESCRIPTION: Increment or decrement the object reference count 462 462 * 463 463 * Object references are incremented when: 464 464 * 1) An object is attached to a Node (namespace object) ··· 492 492 } 493 493 494 494 /* 495 - * All sub-objects must have their reference count incremented 495 + * All sub-objects must have their reference count updated 496 496 * also. Different object types have different subobjects. 497 497 */ 498 498 switch (object->common.type) { ··· 559 559 break; 560 560 } 561 561 } 562 + 562 563 next_object = NULL; 563 564 break; 564 565
+6 -1
drivers/acpi/acpica/utprint.c
··· 332 332 int i; 333 333 334 334 pos = string; 335 - end = string + size; 335 + 336 + if (size != ACPI_UINT32_MAX) { 337 + end = string + size; 338 + } else { 339 + end = ACPI_CAST_PTR(char, ACPI_UINT32_MAX); 340 + } 336 341 337 342 for (; *format; ++format) { 338 343 if (*format != '%') {
+7 -26
drivers/acpi/cppc_acpi.c
··· 438 438 * domain info. 439 439 */ 440 440 for_each_possible_cpu(i) { 441 - pr = all_cpu_data[i]; 442 - if (!pr) 443 - continue; 444 - 445 441 if (cpumask_test_cpu(i, covered_cpus)) 446 442 continue; 447 443 444 + pr = all_cpu_data[i]; 448 445 cpc_ptr = per_cpu(cpc_desc_ptr, i); 449 446 if (!cpc_ptr) { 450 447 retval = -EFAULT; ··· 492 495 cpumask_set_cpu(j, pr->shared_cpu_map); 493 496 } 494 497 495 - for_each_possible_cpu(j) { 498 + for_each_cpu(j, pr->shared_cpu_map) { 496 499 if (i == j) 497 500 continue; 498 501 499 502 match_pr = all_cpu_data[j]; 500 - if (!match_pr) 501 - continue; 502 - 503 - match_cpc_ptr = per_cpu(cpc_desc_ptr, j); 504 - if (!match_cpc_ptr) { 505 - retval = -EFAULT; 506 - goto err_ret; 507 - } 508 - 509 - match_pdomain = &(match_cpc_ptr->domain_info); 510 - if (match_pdomain->domain != pdomain->domain) 511 - continue; 512 - 513 503 match_pr->shared_type = pr->shared_type; 514 504 cpumask_copy(match_pr->shared_cpu_map, 515 505 pr->shared_cpu_map); 516 506 } 517 507 } 508 + goto out; 518 509 519 510 err_ret: 520 511 for_each_possible_cpu(i) { 521 512 pr = all_cpu_data[i]; 522 - if (!pr) 523 - continue; 524 513 525 514 /* Assume no coordination on any error parsing domain info */ 526 - if (retval) { 527 - cpumask_clear(pr->shared_cpu_map); 528 - cpumask_set_cpu(i, pr->shared_cpu_map); 529 - pr->shared_type = CPUFREQ_SHARED_TYPE_ALL; 530 - } 515 + cpumask_clear(pr->shared_cpu_map); 516 + cpumask_set_cpu(i, pr->shared_cpu_map); 517 + pr->shared_type = CPUFREQ_SHARED_TYPE_ALL; 531 518 } 532 - 519 + out: 533 520 free_cpumask_var(covered_cpus); 534 521 return retval; 535 522 }
+1 -1
drivers/acpi/device_pm.c
··· 1321 1321 */ 1322 1322 static const struct acpi_device_id special_pm_ids[] = { 1323 1323 {"PNP0C0B", }, /* Generic ACPI fan */ 1324 - {"INT1044", }, /* Fan for Tiger Lake generation */ 1325 1324 {"INT3404", }, /* Fan */ 1325 + {"INTC1044", }, /* Fan for Tiger Lake generation */ 1326 1326 {} 1327 1327 }; 1328 1328 struct acpi_device *adev = ACPI_COMPANION(dev);
+1 -1
drivers/acpi/dptf/dptf_power.c
··· 97 97 } 98 98 99 99 static const struct acpi_device_id int3407_device_ids[] = { 100 - {"INT1047", 0}, 101 100 {"INT3407", 0}, 101 + {"INTC1047", 0}, 102 102 {"", 0}, 103 103 }; 104 104 MODULE_DEVICE_TABLE(acpi, int3407_device_ids);
+4 -4
drivers/acpi/dptf/int340x_thermal.c
··· 13 13 14 14 #define INT3401_DEVICE 0X01 15 15 static const struct acpi_device_id int340x_thermal_device_ids[] = { 16 - {"INT1040"}, 17 - {"INT1043"}, 18 - {"INT1044"}, 19 - {"INT1047"}, 20 16 {"INT3400"}, 21 17 {"INT3401", INT3401_DEVICE}, 22 18 {"INT3402"}, ··· 24 28 {"INT3409"}, 25 29 {"INT340A"}, 26 30 {"INT340B"}, 31 + {"INTC1040"}, 32 + {"INTC1043"}, 33 + {"INTC1044"}, 34 + {"INTC1047"}, 27 35 {""}, 28 36 }; 29 37
-7
drivers/acpi/processor_throttling.c
··· 897 897 return pr->throttling.acpi_processor_get_throttling(pr); 898 898 } 899 899 900 - static int call_on_cpu(int cpu, long (*fn)(void *), void *arg, bool direct) 901 - { 902 - if (direct || (is_percpu_thread() && cpu == smp_processor_id())) 903 - return fn(arg); 904 - return work_on_cpu(cpu, fn, arg); 905 - } 906 - 907 900 static int acpi_processor_get_throttling(struct acpi_processor *pr) 908 901 { 909 902 if (!pr)
+1 -1
drivers/acpi/tables.c
··· 501 501 ACPI_SIG_WDDT, ACPI_SIG_WDRT, ACPI_SIG_DSDT, ACPI_SIG_FADT, 502 502 ACPI_SIG_PSDT, ACPI_SIG_RSDT, ACPI_SIG_XSDT, ACPI_SIG_SSDT, 503 503 ACPI_SIG_IORT, ACPI_SIG_NFIT, ACPI_SIG_HMAT, ACPI_SIG_PPTT, 504 - NULL }; 504 + ACPI_SIG_NHLT, NULL }; 505 505 506 506 #define ACPI_HEADER_SIZE sizeof(struct acpi_table_header) 507 507
+9
drivers/acpi/video_detect.c
··· 352 352 DMI_MATCH(DMI_PRODUCT_NAME, "Precision 7510"), 353 353 }, 354 354 }, 355 + { 356 + .callback = video_detect_force_native, 357 + .ident = "Acer Aspire 5738z", 358 + .matches = { 359 + DMI_MATCH(DMI_SYS_VENDOR, "Acer"), 360 + DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5738"), 361 + DMI_MATCH(DMI_BOARD_NAME, "JV50"), 362 + }, 363 + }, 355 364 356 365 /* 357 366 * Desktops which falsely report a backlight and which our heuristics
+1 -1
drivers/platform/x86/intel-hid.c
··· 19 19 MODULE_AUTHOR("Alex Hung"); 20 20 21 21 static const struct acpi_device_id intel_hid_ids[] = { 22 - {"INT1051", 0}, 23 22 {"INT33D5", 0}, 23 + {"INTC1051", 0}, 24 24 {"", 0}, 25 25 }; 26 26 MODULE_DEVICE_TABLE(acpi, intel_hid_ids);
+1 -1
drivers/thermal/intel/int340x_thermal/int3400_thermal.c
··· 369 369 } 370 370 371 371 static const struct acpi_device_id int3400_thermal_match[] = { 372 - {"INT1040", 0}, 373 372 {"INT3400", 0}, 373 + {"INTC1040", 0}, 374 374 {} 375 375 }; 376 376
+1 -1
drivers/thermal/intel/int340x_thermal/int3403_thermal.c
··· 282 282 } 283 283 284 284 static const struct acpi_device_id int3403_device_ids[] = { 285 - {"INT1043", 0}, 286 285 {"INT3403", 0}, 286 + {"INTC1043", 0}, 287 287 {"", 0}, 288 288 }; 289 289 MODULE_DEVICE_TABLE(acpi, int3403_device_ids);
+1 -1
include/acpi/acpixf.h
··· 12 12 13 13 /* Current ACPICA subsystem version in YYYYMMDD format */ 14 14 15 - #define ACPI_CA_VERSION 0x20200214 15 + #define ACPI_CA_VERSION 0x20200326 16 16 17 17 #include <acpi/acconfig.h> 18 18 #include <acpi/actypes.h>
+18 -3
include/acpi/actbl2.h
··· 43 43 #define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */ 44 44 #define ACPI_SIG_SDEI "SDEI" /* Software Delegated Exception Interface Table */ 45 45 #define ACPI_SIG_SDEV "SDEV" /* Secure Devices table */ 46 + #define ACPI_SIG_NHLT "NHLT" /* Non-HDAudio Link Table */ 46 47 47 48 /* 48 49 * All tables must be byte-packed to match the ACPI specification, since ··· 275 274 /* Values for subtable Type above */ 276 275 277 276 enum acpi_ivrs_type { 278 - ACPI_IVRS_TYPE_HARDWARE = 0x10, 277 + ACPI_IVRS_TYPE_HARDWARE1 = 0x10, 278 + ACPI_IVRS_TYPE_HARDWARE2 = 0x11, 279 279 ACPI_IVRS_TYPE_MEMORY1 = 0x20, 280 280 ACPI_IVRS_TYPE_MEMORY2 = 0x21, 281 281 ACPI_IVRS_TYPE_MEMORY3 = 0x22 ··· 303 301 304 302 /* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */ 305 303 306 - struct acpi_ivrs_hardware { 304 + struct acpi_ivrs_hardware_10 { 307 305 struct acpi_ivrs_header header; 308 306 u16 capability_offset; /* Offset for IOMMU control fields */ 309 307 u64 base_address; /* IOMMU control registers */ 310 308 u16 pci_segment_group; 311 309 u16 info; /* MSI number and unit ID */ 312 - u32 reserved; 310 + u32 feature_reporting; 311 + }; 312 + 313 + /* 0x11: I/O Virtualization Hardware Definition Block (IVHD) */ 314 + 315 + struct acpi_ivrs_hardware_11 { 316 + struct acpi_ivrs_header header; 317 + u16 capability_offset; /* Offset for IOMMU control fields */ 318 + u64 base_address; /* IOMMU control registers */ 319 + u16 pci_segment_group; 320 + u16 info; /* MSI number and unit ID */ 321 + u32 attributes; 322 + u64 efr_register_image; 323 + u64 reserved; 313 324 }; 314 325 315 326 /* Masks for Info field above */
+3 -3
include/acpi/actbl3.h
··· 39 39 #define ACPI_SIG_WDDT "WDDT" /* Watchdog Timer Description Table */ 40 40 #define ACPI_SIG_WDRT "WDRT" /* Watchdog Resource Table */ 41 41 #define ACPI_SIG_WPBT "WPBT" /* Windows Platform Binary Table */ 42 - #define ACPI_SIG_WSMT "WSMT" /* Windows SMM Security Migrations Table */ 42 + #define ACPI_SIG_WSMT "WSMT" /* Windows SMM Security Mitigations Table */ 43 43 #define ACPI_SIG_XENV "XENV" /* Xen Environment table */ 44 44 #define ACPI_SIG_XXXX "XXXX" /* Intermediate AML header for ASL/ASL+ converter */ 45 45 ··· 673 673 674 674 /******************************************************************************* 675 675 * 676 - * WSMT - Windows SMM Security Migrations Table 676 + * WSMT - Windows SMM Security Mitigations Table 677 677 * Version 1 678 678 * 679 - * Conforms to "Windows SMM Security Migrations Table", 679 + * Conforms to "Windows SMM Security Mitigations Table", 680 680 * Version 1.0, April 18, 2016 681 681 * 682 682 ******************************************************************************/
+1 -1
include/acpi/acuuid.h
··· 57 57 #define UUID_THERMAL_EXTENSIONS "14d399cd-7a27-4b18-8fb4-7cb7b9f4e500" 58 58 #define UUID_DEVICE_PROPERTIES "daffd814-6eba-4d8c-8a91-bc9bbf4aa301" 59 59 60 - #endif /* __AUUID_H__ */ 60 + #endif /* __ACUUID_H__ */
+8
include/acpi/processor.h
··· 297 297 } 298 298 #endif 299 299 300 + static inline int call_on_cpu(int cpu, long (*fn)(void *), void *arg, 301 + bool direct) 302 + { 303 + if (direct || (is_percpu_thread() && cpu == smp_processor_id())) 304 + return fn(arg); 305 + return work_on_cpu(cpu, fn, arg); 306 + } 307 + 300 308 /* in processor_perflib.c */ 301 309 302 310 #ifdef CONFIG_CPU_FREQ