Commit d30dc9abb4aacfd4df3f486f22bcbc0531b73283
Committed by
Len Brown
1 parent
bbf25010f1
Exists in
master
and in
7 other branches
ACPICA: hw: remove use_lock flag from acpi_hw_register_{read, write}
use_lock flag is used once for acpi_hw_register_read, and never for acpi_hw_register_write. It will greatly simplify understanding of locking if we just drop this use_lock altogether, and wrap the only call to ..._read in lock/unlock. Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de> Signed-off-by: Len Brown <len.brown@intel.com>
Showing 4 changed files with 48 additions and 78 deletions Side-by-side Diff
drivers/acpi/events/evevent.c
... | ... | @@ -239,10 +239,8 @@ |
239 | 239 | * Read the fixed feature status and enable registers, as all the cases |
240 | 240 | * depend on their values. Ignore errors here. |
241 | 241 | */ |
242 | - (void)acpi_hw_register_read(ACPI_MTX_DO_NOT_LOCK, | |
243 | - ACPI_REGISTER_PM1_STATUS, &fixed_status); | |
244 | - (void)acpi_hw_register_read(ACPI_MTX_DO_NOT_LOCK, | |
245 | - ACPI_REGISTER_PM1_ENABLE, &fixed_enable); | |
242 | + (void)acpi_hw_register_read(ACPI_REGISTER_PM1_STATUS, &fixed_status); | |
243 | + (void)acpi_hw_register_read(ACPI_REGISTER_PM1_ENABLE, &fixed_enable); | |
246 | 244 | |
247 | 245 | ACPI_DEBUG_PRINT((ACPI_DB_INTERRUPTS, |
248 | 246 | "Fixed Event Block: Enable %08X Status %08X\n", |
drivers/acpi/hardware/hwregs.c
... | ... | @@ -75,8 +75,7 @@ |
75 | 75 | |
76 | 76 | lock_flags = acpi_os_acquire_lock(acpi_gbl_hardware_lock); |
77 | 77 | |
78 | - status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK, | |
79 | - ACPI_REGISTER_PM1_STATUS, | |
78 | + status = acpi_hw_register_write(ACPI_REGISTER_PM1_STATUS, | |
80 | 79 | ACPI_BITMASK_ALL_FIXED_STATUS); |
81 | 80 | if (ACPI_FAILURE(status)) { |
82 | 81 | goto unlock_and_exit; |
... | ... | @@ -259,7 +258,7 @@ |
259 | 258 | * |
260 | 259 | ******************************************************************************/ |
261 | 260 | |
262 | -acpi_status acpi_get_register(u32 register_id, u32 * return_value) | |
261 | +acpi_status acpi_get_register_unlocked(u32 register_id, u32 * return_value) | |
263 | 262 | { |
264 | 263 | u32 register_value = 0; |
265 | 264 | struct acpi_bit_register_info *bit_reg_info; |
... | ... | @@ -276,8 +275,7 @@ |
276 | 275 | |
277 | 276 | /* Read from the register */ |
278 | 277 | |
279 | - status = acpi_hw_register_read(ACPI_MTX_LOCK, | |
280 | - bit_reg_info->parent_register, | |
278 | + status = acpi_hw_register_read(bit_reg_info->parent_register, | |
281 | 279 | ®ister_value); |
282 | 280 | |
283 | 281 | if (ACPI_SUCCESS(status)) { |
... | ... | @@ -298,6 +296,16 @@ |
298 | 296 | return_ACPI_STATUS(status); |
299 | 297 | } |
300 | 298 | |
299 | +acpi_status acpi_get_register(u32 register_id, u32 * return_value) | |
300 | +{ | |
301 | + acpi_status status; | |
302 | + acpi_cpu_flags flags; | |
303 | + flags = acpi_os_acquire_lock(acpi_gbl_hardware_lock); | |
304 | + status = acpi_get_register_unlocked(register_id, return_value); | |
305 | + acpi_os_release_lock(acpi_gbl_hardware_lock, flags); | |
306 | + return status; | |
307 | +} | |
308 | + | |
301 | 309 | ACPI_EXPORT_SYMBOL(acpi_get_register) |
302 | 310 | |
303 | 311 | /******************************************************************************* |
... | ... | @@ -335,8 +343,7 @@ |
335 | 343 | |
336 | 344 | /* Always do a register read first so we can insert the new bits */ |
337 | 345 | |
338 | - status = acpi_hw_register_read(ACPI_MTX_DO_NOT_LOCK, | |
339 | - bit_reg_info->parent_register, | |
346 | + status = acpi_hw_register_read(bit_reg_info->parent_register, | |
340 | 347 | ®ister_value); |
341 | 348 | if (ACPI_FAILURE(status)) { |
342 | 349 | goto unlock_and_exit; |
... | ... | @@ -363,8 +370,7 @@ |
363 | 370 | bit_reg_info-> |
364 | 371 | access_bit_mask); |
365 | 372 | if (value) { |
366 | - status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK, | |
367 | - ACPI_REGISTER_PM1_STATUS, | |
373 | + status = acpi_hw_register_write(ACPI_REGISTER_PM1_STATUS, | |
368 | 374 | (u16) value); |
369 | 375 | register_value = 0; |
370 | 376 | } |
... | ... | @@ -377,8 +383,7 @@ |
377 | 383 | bit_reg_info->access_bit_mask, |
378 | 384 | value); |
379 | 385 | |
380 | - status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK, | |
381 | - ACPI_REGISTER_PM1_ENABLE, | |
386 | + status = acpi_hw_register_write(ACPI_REGISTER_PM1_ENABLE, | |
382 | 387 | (u16) register_value); |
383 | 388 | break; |
384 | 389 | |
385 | 390 | |
... | ... | @@ -397,15 +402,13 @@ |
397 | 402 | bit_reg_info->access_bit_mask, |
398 | 403 | value); |
399 | 404 | |
400 | - status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK, | |
401 | - ACPI_REGISTER_PM1_CONTROL, | |
405 | + status = acpi_hw_register_write(ACPI_REGISTER_PM1_CONTROL, | |
402 | 406 | (u16) register_value); |
403 | 407 | break; |
404 | 408 | |
405 | 409 | case ACPI_REGISTER_PM2_CONTROL: |
406 | 410 | |
407 | - status = acpi_hw_register_read(ACPI_MTX_DO_NOT_LOCK, | |
408 | - ACPI_REGISTER_PM2_CONTROL, | |
411 | + status = acpi_hw_register_read(ACPI_REGISTER_PM2_CONTROL, | |
409 | 412 | ®ister_value); |
410 | 413 | if (ACPI_FAILURE(status)) { |
411 | 414 | goto unlock_and_exit; |
... | ... | @@ -430,8 +433,7 @@ |
430 | 433 | xpm2_control_block. |
431 | 434 | address))); |
432 | 435 | |
433 | - status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK, | |
434 | - ACPI_REGISTER_PM2_CONTROL, | |
436 | + status = acpi_hw_register_write(ACPI_REGISTER_PM2_CONTROL, | |
435 | 437 | (u8) (register_value)); |
436 | 438 | break; |
437 | 439 | |
... | ... | @@ -461,8 +463,7 @@ |
461 | 463 | * |
462 | 464 | * FUNCTION: acpi_hw_register_read |
463 | 465 | * |
464 | - * PARAMETERS: use_lock - Lock hardware? True/False | |
465 | - * register_id - ACPI Register ID | |
466 | + * PARAMETERS: register_id - ACPI Register ID | |
466 | 467 | * return_value - Where the register value is returned |
467 | 468 | * |
468 | 469 | * RETURN: Status and the value read. |
469 | 470 | |
470 | 471 | |
... | ... | @@ -471,19 +472,14 @@ |
471 | 472 | * |
472 | 473 | ******************************************************************************/ |
473 | 474 | acpi_status |
474 | -acpi_hw_register_read(u8 use_lock, u32 register_id, u32 * return_value) | |
475 | +acpi_hw_register_read(u32 register_id, u32 * return_value) | |
475 | 476 | { |
476 | 477 | u32 value1 = 0; |
477 | 478 | u32 value2 = 0; |
478 | 479 | acpi_status status; |
479 | - acpi_cpu_flags lock_flags = 0; | |
480 | 480 | |
481 | 481 | ACPI_FUNCTION_TRACE(hw_register_read); |
482 | 482 | |
483 | - if (ACPI_MTX_LOCK == use_lock) { | |
484 | - lock_flags = acpi_os_acquire_lock(acpi_gbl_hardware_lock); | |
485 | - } | |
486 | - | |
487 | 483 | switch (register_id) { |
488 | 484 | case ACPI_REGISTER_PM1_STATUS: /* 16-bit access */ |
489 | 485 | |
... | ... | @@ -491,7 +487,7 @@ |
491 | 487 | acpi_hw_low_level_read(16, &value1, |
492 | 488 | &acpi_gbl_FADT.xpm1a_event_block); |
493 | 489 | if (ACPI_FAILURE(status)) { |
494 | - goto unlock_and_exit; | |
490 | + goto exit; | |
495 | 491 | } |
496 | 492 | |
497 | 493 | /* PM1B is optional */ |
... | ... | @@ -507,7 +503,7 @@ |
507 | 503 | status = |
508 | 504 | acpi_hw_low_level_read(16, &value1, &acpi_gbl_xpm1a_enable); |
509 | 505 | if (ACPI_FAILURE(status)) { |
510 | - goto unlock_and_exit; | |
506 | + goto exit; | |
511 | 507 | } |
512 | 508 | |
513 | 509 | /* PM1B is optional */ |
... | ... | @@ -523,7 +519,7 @@ |
523 | 519 | acpi_hw_low_level_read(16, &value1, |
524 | 520 | &acpi_gbl_FADT.xpm1a_control_block); |
525 | 521 | if (ACPI_FAILURE(status)) { |
526 | - goto unlock_and_exit; | |
522 | + goto exit; | |
527 | 523 | } |
528 | 524 | |
529 | 525 | status = |
... | ... | @@ -558,10 +554,7 @@ |
558 | 554 | break; |
559 | 555 | } |
560 | 556 | |
561 | - unlock_and_exit: | |
562 | - if (ACPI_MTX_LOCK == use_lock) { | |
563 | - acpi_os_release_lock(acpi_gbl_hardware_lock, lock_flags); | |
564 | - } | |
557 | + exit: | |
565 | 558 | |
566 | 559 | if (ACPI_SUCCESS(status)) { |
567 | 560 | *return_value = value1; |
... | ... | @@ -574,8 +567,7 @@ |
574 | 567 | * |
575 | 568 | * FUNCTION: acpi_hw_register_write |
576 | 569 | * |
577 | - * PARAMETERS: use_lock - Lock hardware? True/False | |
578 | - * register_id - ACPI Register ID | |
570 | + * PARAMETERS: register_id - ACPI Register ID | |
579 | 571 | * Value - The value to write |
580 | 572 | * |
581 | 573 | * RETURN: Status |
582 | 574 | |
583 | 575 | |
584 | 576 | |
585 | 577 | |
... | ... | @@ -597,28 +589,22 @@ |
597 | 589 | * |
598 | 590 | ******************************************************************************/ |
599 | 591 | |
600 | -acpi_status acpi_hw_register_write(u8 use_lock, u32 register_id, u32 value) | |
592 | +acpi_status acpi_hw_register_write(u32 register_id, u32 value) | |
601 | 593 | { |
602 | 594 | acpi_status status; |
603 | - acpi_cpu_flags lock_flags = 0; | |
604 | 595 | u32 read_value; |
605 | 596 | |
606 | 597 | ACPI_FUNCTION_TRACE(hw_register_write); |
607 | 598 | |
608 | - if (ACPI_MTX_LOCK == use_lock) { | |
609 | - lock_flags = acpi_os_acquire_lock(acpi_gbl_hardware_lock); | |
610 | - } | |
611 | - | |
612 | 599 | switch (register_id) { |
613 | 600 | case ACPI_REGISTER_PM1_STATUS: /* 16-bit access */ |
614 | 601 | |
615 | 602 | /* Perform a read first to preserve certain bits (per ACPI spec) */ |
616 | 603 | |
617 | - status = acpi_hw_register_read(ACPI_MTX_DO_NOT_LOCK, | |
618 | - ACPI_REGISTER_PM1_STATUS, | |
604 | + status = acpi_hw_register_read(ACPI_REGISTER_PM1_STATUS, | |
619 | 605 | &read_value); |
620 | 606 | if (ACPI_FAILURE(status)) { |
621 | - goto unlock_and_exit; | |
607 | + goto exit; | |
622 | 608 | } |
623 | 609 | |
624 | 610 | /* Insert the bits to be preserved */ |
... | ... | @@ -632,7 +618,7 @@ |
632 | 618 | acpi_hw_low_level_write(16, value, |
633 | 619 | &acpi_gbl_FADT.xpm1a_event_block); |
634 | 620 | if (ACPI_FAILURE(status)) { |
635 | - goto unlock_and_exit; | |
621 | + goto exit; | |
636 | 622 | } |
637 | 623 | |
638 | 624 | /* PM1B is optional */ |
... | ... | @@ -647,7 +633,7 @@ |
647 | 633 | status = |
648 | 634 | acpi_hw_low_level_write(16, value, &acpi_gbl_xpm1a_enable); |
649 | 635 | if (ACPI_FAILURE(status)) { |
650 | - goto unlock_and_exit; | |
636 | + goto exit; | |
651 | 637 | } |
652 | 638 | |
653 | 639 | /* PM1B is optional */ |
654 | 640 | |
... | ... | @@ -661,11 +647,10 @@ |
661 | 647 | /* |
662 | 648 | * Perform a read first to preserve certain bits (per ACPI spec) |
663 | 649 | */ |
664 | - status = acpi_hw_register_read(ACPI_MTX_DO_NOT_LOCK, | |
665 | - ACPI_REGISTER_PM1_CONTROL, | |
650 | + status = acpi_hw_register_read(ACPI_REGISTER_PM1_CONTROL, | |
666 | 651 | &read_value); |
667 | 652 | if (ACPI_FAILURE(status)) { |
668 | - goto unlock_and_exit; | |
653 | + goto exit; | |
669 | 654 | } |
670 | 655 | |
671 | 656 | /* Insert the bits to be preserved */ |
... | ... | @@ -679,7 +664,7 @@ |
679 | 664 | acpi_hw_low_level_write(16, value, |
680 | 665 | &acpi_gbl_FADT.xpm1a_control_block); |
681 | 666 | if (ACPI_FAILURE(status)) { |
682 | - goto unlock_and_exit; | |
667 | + goto exit; | |
683 | 668 | } |
684 | 669 | |
685 | 670 | status = |
... | ... | @@ -728,11 +713,7 @@ |
728 | 713 | break; |
729 | 714 | } |
730 | 715 | |
731 | - unlock_and_exit: | |
732 | - if (ACPI_MTX_LOCK == use_lock) { | |
733 | - acpi_os_release_lock(acpi_gbl_hardware_lock, lock_flags); | |
734 | - } | |
735 | - | |
716 | + exit: | |
736 | 717 | return_ACPI_STATUS(status); |
737 | 718 | } |
738 | 719 |
drivers/acpi/hardware/hwsleep.c
... | ... | @@ -313,8 +313,7 @@ |
313 | 313 | |
314 | 314 | /* Get current value of PM1A control */ |
315 | 315 | |
316 | - status = acpi_hw_register_read(ACPI_MTX_DO_NOT_LOCK, | |
317 | - ACPI_REGISTER_PM1_CONTROL, &PM1Acontrol); | |
316 | + status = acpi_hw_register_read(ACPI_REGISTER_PM1_CONTROL, &PM1Acontrol); | |
318 | 317 | if (ACPI_FAILURE(status)) { |
319 | 318 | return_ACPI_STATUS(status); |
320 | 319 | } |
321 | 320 | |
... | ... | @@ -341,15 +340,13 @@ |
341 | 340 | |
342 | 341 | /* Write #1: fill in SLP_TYP data */ |
343 | 342 | |
344 | - status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK, | |
345 | - ACPI_REGISTER_PM1A_CONTROL, | |
343 | + status = acpi_hw_register_write(ACPI_REGISTER_PM1A_CONTROL, | |
346 | 344 | PM1Acontrol); |
347 | 345 | if (ACPI_FAILURE(status)) { |
348 | 346 | return_ACPI_STATUS(status); |
349 | 347 | } |
350 | 348 | |
351 | - status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK, | |
352 | - ACPI_REGISTER_PM1B_CONTROL, | |
349 | + status = acpi_hw_register_write(ACPI_REGISTER_PM1B_CONTROL, | |
353 | 350 | PM1Bcontrol); |
354 | 351 | if (ACPI_FAILURE(status)) { |
355 | 352 | return_ACPI_STATUS(status); |
356 | 353 | |
... | ... | @@ -364,15 +361,13 @@ |
364 | 361 | |
365 | 362 | ACPI_FLUSH_CPU_CACHE(); |
366 | 363 | |
367 | - status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK, | |
368 | - ACPI_REGISTER_PM1A_CONTROL, | |
364 | + status = acpi_hw_register_write(ACPI_REGISTER_PM1A_CONTROL, | |
369 | 365 | PM1Acontrol); |
370 | 366 | if (ACPI_FAILURE(status)) { |
371 | 367 | return_ACPI_STATUS(status); |
372 | 368 | } |
373 | 369 | |
374 | - status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK, | |
375 | - ACPI_REGISTER_PM1B_CONTROL, | |
370 | + status = acpi_hw_register_write(ACPI_REGISTER_PM1B_CONTROL, | |
376 | 371 | PM1Bcontrol); |
377 | 372 | if (ACPI_FAILURE(status)) { |
378 | 373 | return_ACPI_STATUS(status); |
... | ... | @@ -392,8 +387,7 @@ |
392 | 387 | */ |
393 | 388 | acpi_os_stall(10000000); |
394 | 389 | |
395 | - status = acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK, | |
396 | - ACPI_REGISTER_PM1_CONTROL, | |
390 | + status = acpi_hw_register_write(ACPI_REGISTER_PM1_CONTROL, | |
397 | 391 | sleep_enable_reg_info-> |
398 | 392 | access_bit_mask); |
399 | 393 | if (ACPI_FAILURE(status)) { |
... | ... | @@ -520,8 +514,7 @@ |
520 | 514 | |
521 | 515 | /* Get current value of PM1A control */ |
522 | 516 | |
523 | - status = acpi_hw_register_read(ACPI_MTX_DO_NOT_LOCK, | |
524 | - ACPI_REGISTER_PM1_CONTROL, | |
517 | + status = acpi_hw_register_read(ACPI_REGISTER_PM1_CONTROL, | |
525 | 518 | &PM1Acontrol); |
526 | 519 | if (ACPI_SUCCESS(status)) { |
527 | 520 | |
528 | 521 | |
... | ... | @@ -543,11 +536,9 @@ |
543 | 536 | |
544 | 537 | /* Just ignore any errors */ |
545 | 538 | |
546 | - (void)acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK, | |
547 | - ACPI_REGISTER_PM1A_CONTROL, | |
539 | + (void)acpi_hw_register_write(ACPI_REGISTER_PM1A_CONTROL, | |
548 | 540 | PM1Acontrol); |
549 | - (void)acpi_hw_register_write(ACPI_MTX_DO_NOT_LOCK, | |
550 | - ACPI_REGISTER_PM1B_CONTROL, | |
541 | + (void)acpi_hw_register_write(ACPI_REGISTER_PM1B_CONTROL, | |
551 | 542 | PM1Bcontrol); |
552 | 543 | } |
553 | 544 | } |
include/acpi/achware.h
... | ... | @@ -71,9 +71,9 @@ |
71 | 71 | struct acpi_bit_register_info *acpi_hw_get_bit_register_info(u32 register_id); |
72 | 72 | |
73 | 73 | acpi_status |
74 | -acpi_hw_register_read(u8 use_lock, u32 register_id, u32 * return_value); | |
74 | +acpi_hw_register_read(u32 register_id, u32 * return_value); | |
75 | 75 | |
76 | -acpi_status acpi_hw_register_write(u8 use_lock, u32 register_id, u32 value); | |
76 | +acpi_status acpi_hw_register_write(u32 register_id, u32 value); | |
77 | 77 | |
78 | 78 | acpi_status |
79 | 79 | acpi_hw_low_level_read(u32 width, |