Linux PARISC architecture development
 help / color / mirror / Atom feed
From: Richard Hirst <rhirst@linuxcare.com>
To: David Huggins-Daines <dhd@eradicator.org>
Cc: parisc-linux@thepuffingroup.com
Subject: Re: [parisc-linux] signal.c, etc
Date: Wed, 20 Dec 2000 09:14:02 +0000	[thread overview]
Message-ID: <20001220091402.C2554@linuxcare.com> (raw)
In-Reply-To: <87zohuhm30.fsf@cepstral.com>; from dhd@eradicator.org on Sun, Dec 17, 2000 at 02:41:39PM -0500

Hi Dave,

On Sun, Dec 17, 2000 at 02:41:39PM -0500, David Huggins-Daines wrote:
> Hi,
> 
> Just reading through the archives, I noticed you came upon my rather
> hackish IAOQ manipulation in signal.c.
> 
> If you guys need any explanation about the intent of that code please
> ask me.  (I'm back on the parisc-linux list now, BTW)

Welcome back! Feel free to fix anything I broke.

> I freely admit that it is bogus (in fact that's why the comment was
> there), not because I didn't know which part of IAOQ was front and
> which was back, but because:
> 
> (a) There are two different signal exit paths, one from interruptions,
>     one from system calls.  This complicates things *tremendously*.
>     However, exiting from a signal handler always goes via system
>     calls, and in that case, the stored IAOQ values are meaningless.
>     I probably should have removed all the meaningless frobbings of
>     the stored IAOQ, but ... well ... time passes, you become occupied
>     elsewhere, etc.

Right, the code as was worked ok for the syscall case but broke
for the interrupt case.  The problem is that following the signal
and call to sys_rt_sigreturn, you need to return to userland either
via an interrupt return path, or a syscall return path, depending on
where you were when the signal occurred.  There is now a test in
syscall.S for __NR_rt_sigreturn in order to implement that.

> (b) I don't understand what the processor actually does when you
>     restore IAOQ on exit from an interruption.  The HP documentation
>     is not written in a particularly lucid manner.
> 
> (c) Setting iaoq_back to iaoq_front + 4 is *not* the right answer
>     because you may have taken an interruption in a branch, or an insn
>     may have been nullified, etc.

Absolutely - that was the main problem with the code as it was.
Seting iaoq_back to iaoq_front + 4 is valid if you are starting up the
signal handler, and should be ok if the singal occurred while you
were blocked on a syscall.

> (d) I had about ten billion other things to do at the time and was
>     under lots of pressure to get "more important things" working...

Sure - the current code does work for me under various test cases, but
it did take days to get to that point.

Richard

      reply	other threads:[~2000-12-20  9:17 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2000-12-17 19:41 [parisc-linux] signal.c, etc David Huggins-Daines
2000-12-20  9:14 ` Richard Hirst [this message]

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=20001220091402.C2554@linuxcare.com \
    --to=rhirst@linuxcare.com \
    --cc=dhd@eradicator.org \
    --cc=parisc-linux@thepuffingroup.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox