From: Carlos O'Donell <carlos@baldric.uwo.ca>
To: Randolph Chung <randolph@tausq.org>
Cc: John David Anglin <dave@hiauly1.hia.nrc.ca>,
parisc-linux@lists.parisc-linux.org
Subject: Re: [parisc-linux] Re: how to handle ERESTART_RESTARTBLOCK ?
Date: Sun, 26 Oct 2003 23:37:05 -0500 [thread overview]
Message-ID: <20031027043705.GJ26587@systemhalted> (raw)
In-Reply-To: <20031026210201.GO24406@tausq.org>
On Sun, Oct 26, 2003 at 01:02:01PM -0800, Randolph Chung wrote:
> hrm, oops, that's the magical disappearance act... :)
>
> Index: arch/parisc/kernel/signal.c
> ===================================================================
> RCS file: /var/cvs/linux-2.6/arch/parisc/kernel/signal.c,v
> retrieving revision 1.11
> diff -u -p -r1.11 signal.c
> --- arch/parisc/kernel/signal.c 24 Sep 2003 17:54:31 -0000 1.11
> +++ arch/parisc/kernel/signal.c 26 Oct 2003 20:53:14 -0000
> @@ -530,10 +531,68 @@ do_signal(sigset_t *oldset, struct pt_re
> /* Did we come from a system call? */
> if (in_syscall) {
> /* Restart the system call - no handlers present */
> - if (regs->gr[28] == -ERESTART_RESTARTBLOCK ||
> - regs->gr[28] == -ERESTARTNOHAND ||
> - regs->gr[28] == -ERESTARTSYS ||
> - regs->gr[28] == -ERESTARTNOINTR) {
> + if (regs->gr[28] == -ERESTART_RESTARTBLOCK) {
> + unsigned int *usp = (unsigned int *)regs->gr[30];
> +
> + /* Setup a trampoline to restart the syscall
> + * with __NR_restart_syscall
> + */
> +#ifndef __LP64__
> + /* 32-bit version:
> + * 0: <frame marker>
> + * 4: <return address>
> + * 8: ble 0x100(%%sr2, %%r0)
> + * 12: ldi __NR_restart_syscall, %r20
> + * 16: ldw -60(%sp), %r20
> + * 20: bv %r0(%r20)
> + * 24: ldwm -64(%sp), %r3
> + */
What do you think of:
a. Copy the original rp into a temp register.
b. Setup our rp so we return to the stack trampoline.
c. Return to userspace.
d. Trampoline restores original rp.
e. Make call to restart syscall.
f. Kernel does the magic.
g. Return to the original rp.
You don't care if you get a signal because you are never going to return
to the trampoline, so you don't adjust 'sp' to protect the trampoline.
My fears:
a. Timer tick while on the trampoline before the syscall is made.
= Signal is delivered... what happens?
As a mater of fact, I'm wholely afraid of stack trampolines for the
explicit reason that your timeslice might expire and odd things might
transpire.
c.
next prev parent reply other threads:[~2003-10-27 4:41 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-08-12 6:02 [parisc-linux] how to handle ERESTART_RESTARTBLOCK ? Randolph Chung
2003-10-26 7:37 ` [parisc-linux] " Randolph Chung
2003-10-26 7:39 ` Randolph Chung
2003-10-26 16:49 ` Carlos O'Donell
2003-10-26 19:18 ` Randolph Chung
2003-10-26 19:53 ` John David Anglin
2003-10-26 20:59 ` Randolph Chung
2003-10-26 21:02 ` Randolph Chung
2003-10-27 4:37 ` Carlos O'Donell [this message]
2003-10-27 5:06 ` Randolph Chung
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20031027043705.GJ26587@systemhalted \
--to=carlos@baldric.uwo.ca \
--cc=dave@hiauly1.hia.nrc.ca \
--cc=parisc-linux@lists.parisc-linux.org \
--cc=randolph@tausq.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.