diff options
| author | Helge Deller <deller@gmx.de> | 2008-12-29 21:47:38 -0500 |
|---|---|---|
| committer | Kyle McMartin <kyle@mcmartin.ca> | 2009-03-30 22:51:35 -0400 |
| commit | c84c3a698f17ae5d55a6ecc76298fb894e106336 (patch) | |
| tree | 6b6d1de960a9f189f86bf1d28ec31be110a8b35e /arch/parisc/kernel | |
| parent | 8a1def457bab9f9654bd4dbb1e3eea6fedd26afa (diff) | |
parisc: document light weight syscall ABI
Document the LWS ABI including implementation notes for
userspace, and comment cleanup.
Remove extraneous .align 16 after lws_lock_start.
Signed-off-by: Carlos O'Donell <carlos@systemhalted.org>
Signed-off-by: Helge Deller <deller@gmx.de>
Signed-off-by: Kyle McMartin <kyle@mcmartin.ca>
Diffstat (limited to 'arch/parisc/kernel')
| -rw-r--r-- | arch/parisc/kernel/syscall.S | 58 |
1 files changed, 48 insertions, 10 deletions
diff --git a/arch/parisc/kernel/syscall.S b/arch/parisc/kernel/syscall.S index 69b6eebc466e..59fc1a43ec3e 100644 --- a/arch/parisc/kernel/syscall.S +++ b/arch/parisc/kernel/syscall.S | |||
| @@ -365,17 +365,51 @@ tracesys_sigexit: | |||
| 365 | 365 | ||
| 366 | 366 | ||
| 367 | /********************************************************* | 367 | /********************************************************* |
| 368 | Light-weight-syscall code | 368 | 32/64-bit Light-Weight-Syscall ABI |
| 369 | 369 | ||
| 370 | r20 - lws number | 370 | * - Indicates a hint for userspace inline asm |
| 371 | r26,r25,r24,r23,r22 - Input registers | 371 | implementations. |
| 372 | r28 - Function return register | ||
| 373 | r21 - Error code. | ||
| 374 | 372 | ||
| 375 | Scracth: Any of the above that aren't being | 373 | Syscall number (caller-saves) |
| 376 | currently used, including r1. | 374 | - %r20 |
| 375 | * In asm clobber. | ||
| 377 | 376 | ||
| 378 | Return pointer: r31 (Not usable) | 377 | Argument registers (caller-saves) |
| 378 | - %r26, %r25, %r24, %r23, %r22 | ||
| 379 | * In asm input. | ||
| 380 | |||
| 381 | Return registers (caller-saves) | ||
| 382 | - %r28 (return), %r21 (errno) | ||
| 383 | * In asm output. | ||
| 384 | |||
| 385 | Caller-saves registers | ||
| 386 | - %r1, %r27, %r29 | ||
| 387 | - %r2 (return pointer) | ||
| 388 | - %r31 (ble link register) | ||
| 389 | * In asm clobber. | ||
| 390 | |||
| 391 | Callee-saves registers | ||
| 392 | - %r3-%r18 | ||
| 393 | - %r30 (stack pointer) | ||
| 394 | * Not in asm clobber. | ||
| 395 | |||
| 396 | If userspace is 32-bit: | ||
| 397 | Callee-saves registers | ||
| 398 | - %r19 (32-bit PIC register) | ||
| 399 | |||
| 400 | Differences from 32-bit calling convention: | ||
| 401 | - Syscall number in %r20 | ||
| 402 | - Additional argument register %r22 (arg4) | ||
| 403 | - Callee-saves %r19. | ||
| 404 | |||
| 405 | If userspace is 64-bit: | ||
| 406 | Callee-saves registers | ||
| 407 | - %r27 (64-bit PIC register) | ||
| 408 | |||
| 409 | Differences from 64-bit calling convention: | ||
| 410 | - Syscall number in %r20 | ||
| 411 | - Additional argument register %r22 (arg4) | ||
| 412 | - Callee-saves %r27. | ||
| 379 | 413 | ||
| 380 | Error codes returned by entry path: | 414 | Error codes returned by entry path: |
| 381 | 415 | ||
| @@ -473,7 +507,8 @@ lws_compare_and_swap64: | |||
| 473 | b,n lws_compare_and_swap | 507 | b,n lws_compare_and_swap |
| 474 | #else | 508 | #else |
| 475 | /* If we are not a 64-bit kernel, then we don't | 509 | /* If we are not a 64-bit kernel, then we don't |
| 476 | * implement having 64-bit input registers | 510 | * have 64-bit input registers, and calling |
| 511 | * the 64-bit LWS CAS returns ENOSYS. | ||
| 477 | */ | 512 | */ |
| 478 | b,n lws_exit_nosys | 513 | b,n lws_exit_nosys |
| 479 | #endif | 514 | #endif |
| @@ -635,12 +670,15 @@ END(sys_call_table64) | |||
| 635 | /* | 670 | /* |
| 636 | All light-weight-syscall atomic operations | 671 | All light-weight-syscall atomic operations |
| 637 | will use this set of locks | 672 | will use this set of locks |
| 673 | |||
| 674 | NOTE: The lws_lock_start symbol must be | ||
| 675 | at least 16-byte aligned for safe use | ||
| 676 | with ldcw. | ||
| 638 | */ | 677 | */ |
| 639 | .section .data | 678 | .section .data |
| 640 | .align PAGE_SIZE | 679 | .align PAGE_SIZE |
| 641 | ENTRY(lws_lock_start) | 680 | ENTRY(lws_lock_start) |
| 642 | /* lws locks */ | 681 | /* lws locks */ |
| 643 | .align 16 | ||
| 644 | .rept 16 | 682 | .rept 16 |
| 645 | /* Keep locks aligned at 16-bytes */ | 683 | /* Keep locks aligned at 16-bytes */ |
| 646 | .word 1 | 684 | .word 1 |
