qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Jason Wessel <jason.wessel@windriver.com>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] qemu-system-ppc problem with PVR access from user space
Date: Fri, 02 Nov 2007 08:04:04 -0500	[thread overview]
Message-ID: <472B2044.9080601@windriver.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 804 bytes --]

The typical kernel + user space I boot on the prep machine no longer
boots due to an issue accessing the PVR special purpose register.  When
the PVR is accessed from user space, it should generate an exception
with the PC set to the instruction that it occurred at when it saves to
the stack.  In the latest CVS, it is off by 4 bytes.  With out the fix
/sbin/init gets killed because the kernel's trap handler which does the
userspace emulation of the instruction does not clean up the trap.

I am using the attached patch to work around the problem, but I wonder
if there is a more generic problem that was introduced as a regression
with all ppc merges in the last month or so, given this used to work
fine through the generic handler.

Any insight into this would certainly be useful.

Thanks,
Jason.

[-- Attachment #2: ppc_pvr_access_from_user_space.patch --]
[-- Type: text/x-patch, Size: 1125 bytes --]


Work around the problem that the PC register is not saved with
the right address when taking a user space PVR access exception.

Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
---
 target-ppc/translate_init.c |    9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

--- a/target-ppc/translate_init.c
+++ b/target-ppc/translate_init.c
@@ -92,6 +92,13 @@ static void spr_write_clear (void *opaqu
 }
 #endif
 
+static void spr_read_generic_fault_user(void *opaque, int sprn)
+{
+	DisasContext *ctx = opaque;
+	ctx->nip -= 4;
+	GEN_EXCP_PRIVREG(ctx);
+}
+
 /* SPR common to all PowerPC */
 /* XER */
 static void spr_read_xer (void *opaque, int sprn)
@@ -5942,7 +5949,7 @@ static void init_ppc_proc (CPUPPCState *
     /* Register SPR common to all PowerPC implementations */
     gen_spr_generic(env);
     spr_register(env, SPR_PVR, "PVR",
-                 SPR_NOACCESS, SPR_NOACCESS,
+                 &spr_read_generic_fault_user, SPR_NOACCESS,
                  &spr_read_generic, SPR_NOACCESS,
                  def->pvr);
     /* PowerPC implementation specific initialisations (SPRs, timers, ...) */

             reply	other threads:[~2007-11-02 13:05 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-11-02 13:04 Jason Wessel [this message]
2007-11-02 13:38 ` [Qemu-devel] qemu-system-ppc problem with PVR access from user space J. Mayer
2007-11-02 13:57   ` Jason Wessel
2007-11-02 16:23     ` Jocelyn Mayer
2007-11-02 20:46       ` Daniel Jacobowitz
2007-11-02 22:10         ` J. Mayer

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=472B2044.9080601@windriver.com \
    --to=jason.wessel@windriver.com \
    --cc=qemu-devel@nongnu.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).