Commit d30dc9abb4aacfd4df3f486f22bcbc0531b73283

Authored by Alexey Starikovskiy
Committed by Len Brown
1 parent bbf25010f1

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 &register_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 &register_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 &register_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,