diff options
author | Vineet Gupta <vgupta@synopsys.com> | 2013-02-11 15:31:24 +0100 |
---|---|---|
committer | Vineet Gupta <vgupta@synopsys.com> | 2013-02-15 18:45:49 +0100 |
commit | 5c39c0ab5e862cf71cda1fc39a5cedd4e2f18c6e (patch) | |
tree | 5241b832c2e64f581b55bb8c56bf3cb49836423b /arch/arc/kernel/asm-offsets.c | |
parent | ARC: Signal handling (diff) | |
download | linux-5c39c0ab5e862cf71cda1fc39a5cedd4e2f18c6e.tar.xz linux-5c39c0ab5e862cf71cda1fc39a5cedd4e2f18c6e.zip |
ARC: [Review] Preparing to fix incorrect syscall restarts due to signals
To avoid multiple syscall restarts (multiple signals) or no restart at
all (sigreturn), we need just an extra bit of state "literally 1 bit" in
struct pt_regs. orig_r8 is the best place to do this, however given the
way it is encoded currently, we can't add anything simplistically.
Current orig_r8:
* syscalls -> 1 to NR_SYSCALLS
* Exceptions -> NR_SYSCALLS + 1
* Break-point-> NR_SYSCALLS + 2
In new scheme it is a bit-field
* lower short word contains the exact event type (and a new bit to represent
restart semantics : if syscall was already / can't be restarted)
* upper short word optionally containing the syscall num - needed by
likes of tracehooks etc
This patch only changes how orig_r8 is organised and nothing should
change behaviourily.
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Cc: Al Viro <viro@ZenIV.linux.org.uk>
Diffstat (limited to 'arch/arc/kernel/asm-offsets.c')
-rw-r--r-- | arch/arc/kernel/asm-offsets.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/arc/kernel/asm-offsets.c b/arch/arc/kernel/asm-offsets.c index 64b2c2fa7b54..d7770cc9aee3 100644 --- a/arch/arc/kernel/asm-offsets.c +++ b/arch/arc/kernel/asm-offsets.c @@ -46,7 +46,7 @@ int main(void) BLANK(); DEFINE(PT_status32, offsetof(struct pt_regs, status32)); - DEFINE(PT_orig_r8, offsetof(struct pt_regs, orig_r8)); + DEFINE(PT_orig_r8, offsetof(struct pt_regs, orig_r8_word)); DEFINE(PT_sp, offsetof(struct pt_regs, sp)); DEFINE(PT_r0, offsetof(struct pt_regs, r0)); DEFINE(PT_r1, offsetof(struct pt_regs, r1)); |