qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: "David Gibson" <david@gibson.dropbear.id.au>,
	"Cédric Le Goater" <clg@kaod.org>
Cc: qemu-ppc@nongnu.org, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 06/10] ppc: Rework generation of priv and inval interrupts
Date: Wed, 15 Jun 2016 14:31:56 +1000	[thread overview]
Message-ID: <1465965116.30200.51.camel@kernel.crashing.org> (raw)
In-Reply-To: <20160615011906.GA4882@voom.fritz.box>

On Wed, 2016-06-15 at 11:19 +1000, David Gibson wrote:
> 
> >  static void spr_noaccess(DisasContext *ctx, int gprn, int sprn)
> > @@ -4348,9 +4371,15 @@ static inline void gen_op_mfspr(DisasContext *ctx)
> >                               TARGET_FMT_lx "\n", sprn, sprn, ctx->nip - 4);
> >                  }
> >              }
> > -            gen_inval_exception(ctx, POWERPC_EXCP_PRIV_REG);
> > +            gen_priv_exception(ctx, POWERPC_EXCP_PRIV_REG);
> >          }
> >      } else {
> > +        /* ISA 2.07 defines these as no-ops */
> > +        if ((ctx->insns_flags2 & PPC2_ISA207S) &&
> > +            (sprn >= 808 && sprn <= 811)) {
> > +            /* This is a nop */
> > +            return;
> > +        }
> >          /* Not defined */
> >          fprintf(stderr, "Trying to read invalid spr %d (0x%03x) at "
> >                  TARGET_FMT_lx "\n", sprn, sprn, ctx->nip - 4);
> > @@ -4358,9 +4387,18 @@ static inline void gen_op_mfspr(DisasContext *ctx)
> >              qemu_log("Trying to read invalid spr %d (0x%03x) at "
> >                       TARGET_FMT_lx "\n", sprn, sprn, ctx->nip - 4);
> >          }
> > -        /* Only generate an exception in user space, otherwise this is a nop */
> > -        if (ctx->pr) {
> > -            gen_inval_exception(ctx, POWERPC_EXCP_INVAL_SPR);
> > +
> > +        /* The behaviour depends on MSR:PR and SPR# bit 0x10,
> > +         * it can generate a priv, a hv emu or a no-op
> > +         */
> > +        if (sprn & 0x10) {
> > +            if (ctx->pr) {
> > +                gen_priv_exception(ctx, POWERPC_EXCP_INVAL_SPR);
> > +            }
> > +        } else {
> > +            if (ctx->pr || sprn == 0 || sprn == 4 || sprn == 5 || sprn == 6) {
> > +                gen_hvpriv_exception(ctx, POWERPC_EXCP_INVAL_SPR);
> 
> Just double checking this logic.  So in this case we get an exception
> to the hypervisor if executed in guest user mode, but a no-op if
> 
> executed in guest supervisor mode.  That seems.. odd.

From the architecture:

* if spr 0 =0:
  - if MSR PR =1: Hypervisor Emulation Assistance
    interrupt
  - if MSR PR =0: Hypervisor Emulation Assistance
    interrupt for SPRs 0, 4, 5, and 6 and no opera-
    tion (i.e. the instruction is treated as a no-op)
    for all other SPRs
„
* if spr 0 =1:
  - if MSR PR =1: Privileged Instruction type Pro-
    gram interrupt
  - if MSR PR =0: no operation (i.e. the instruction
    is treated as a no-op)

IE. SPRs with 0x10 are supervisor priv, so PR access will trap to
the OS, whether they are implemented or not.

Otherwise, you get the "system illegal isntruction" handler which
is turned into an HVPRIV on all recent processors (the exception code
will turn that back into a 0x700 if the processor doesn't support
HVPRIV).

It was done this way so that an OS (guest) can context switch a bunch
of supervisor SPRs without having to test if they individually exist
on a given processor.

Cheers,
Ben.

> 

  reply	other threads:[~2016-06-15  4:32 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-13  5:24 [Qemu-devel] [PATCH 00/10] rework exception model to support the HV mode Cédric Le Goater
2016-06-13  5:24 ` [Qemu-devel] [PATCH 01/10] ppc: Fix rfi/rfid/hrfi/... emulation Cédric Le Goater
2016-06-16  1:07   ` David Gibson
2016-06-17  2:27     ` [Qemu-devel] [Qemu-ppc] " David Gibson
2016-06-17  5:54       ` Cédric Le Goater
2016-06-17  6:03         ` Cédric Le Goater
2016-06-17  6:28           ` David Gibson
2016-06-17  6:39             ` Cédric Le Goater
2016-06-17  7:10           ` Thomas Huth
2016-06-17  7:17             ` Cédric Le Goater
2016-06-17 10:41             ` Cédric Le Goater
2016-06-17 11:02               ` Thomas Huth
2016-06-17 11:11                 ` Alexander Graf
2016-06-17 14:32                 ` Cédric Le Goater
2016-06-18 23:35                   ` Benjamin Herrenschmidt
2016-06-19 12:49                     ` Cédric Le Goater
2016-06-19 13:00                       ` Alexander Graf
2016-06-19 17:21                         ` Cédric Le Goater
2016-06-19 22:15                           ` Benjamin Herrenschmidt
2016-06-19 22:35                             ` Benjamin Herrenschmidt
2016-06-20  7:08                               ` Benjamin Herrenschmidt
2016-06-20  7:11                                 ` Alexander Graf
2016-06-20  8:02                                 ` Benjamin Herrenschmidt
2016-06-20  9:32                                   ` Benjamin Herrenschmidt
2016-06-20 13:55                                     ` Alexander Graf
2016-06-21  8:21                                     ` Mark Cave-Ayland
2016-06-21  9:33                                       ` Benjamin Herrenschmidt
2016-06-21  9:37                                         ` Benjamin Herrenschmidt
2016-06-19 14:08                       ` Benjamin Herrenschmidt
2016-06-19 17:23                         ` Cédric Le Goater
2016-06-19 21:12                           ` Benjamin Herrenschmidt
2016-06-20  2:19                             ` David Gibson
2016-06-20  6:17                               ` Cédric Le Goater
2016-06-20  7:47                                 ` Thomas Huth
2016-06-20  8:21                                   ` Benjamin Herrenschmidt
2016-06-20  8:46                                   ` Cédric Le Goater
2016-06-20  8:18                                 ` Benjamin Herrenschmidt
2016-06-20  6:10                             ` Cédric Le Goater
2016-06-20  8:18                               ` Benjamin Herrenschmidt
2016-06-18 23:30                 ` Benjamin Herrenschmidt
2016-06-18 23:29               ` Benjamin Herrenschmidt
2016-06-17  6:19     ` [Qemu-devel] " Cédric Le Goater
2016-06-13  5:24 ` [Qemu-devel] [PATCH 02/10] ppc: Create cpu_ppc_set_papr() helper (for LPCR) Cédric Le Goater
2016-06-14  6:15   ` David Gibson
2016-06-14  6:52     ` Cédric Le Goater
2016-06-15  1:01       ` David Gibson
2016-06-13  5:24 ` [Qemu-devel] [PATCH 03/10] ppc: Rework POWER7 & POWER8 exception model (part 2) Cédric Le Goater
2016-06-14  6:25   ` David Gibson
2016-06-14 21:19     ` Benjamin Herrenschmidt
2016-06-15  1:00       ` David Gibson
2016-06-13  5:24 ` [Qemu-devel] [PATCH 04/10] ppc: Fix POWER7 and POWER8 exception definitions Cédric Le Goater
2016-06-13  5:24 ` [Qemu-devel] [PATCH 05/10] ppc: Fix generation if ISI/DSI vs. HV mode Cédric Le Goater
2016-06-14  6:34   ` David Gibson
2016-06-14  6:42     ` Cédric Le Goater
2016-06-15  1:09       ` David Gibson
2016-06-13  5:24 ` [Qemu-devel] [PATCH 06/10] ppc: Rework generation of priv and inval interrupts Cédric Le Goater
2016-06-15  1:19   ` David Gibson
2016-06-15  4:31     ` Benjamin Herrenschmidt [this message]
2016-06-15  5:06       ` David Gibson
2016-06-13  5:24 ` [Qemu-devel] [PATCH 07/10] ppc: Add real mode CI load/store instructions for P7 and P8 Cédric Le Goater
2016-06-15  3:46   ` David Gibson
2016-06-13  5:24 ` [Qemu-devel] [PATCH 08/10] ppc: Turn a bunch of booleans from int to bool Cédric Le Goater
2016-06-13  5:24 ` [Qemu-devel] [PATCH 09/10] ppc: Move exception generation code out of line Cédric Le Goater
2016-06-13  7:44   ` Thomas Huth
2016-06-13  8:36     ` Cédric Le Goater
2016-06-15  1:57       ` David Gibson
2016-06-13  5:24 ` [Qemu-devel] [PATCH 10/10] ppc: Add P7/P8 Power Management instructions Cédric Le Goater
2016-06-15  1:56   ` David Gibson

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=1465965116.30200.51.camel@kernel.crashing.org \
    --to=benh@kernel.crashing.org \
    --cc=clg@kaod.org \
    --cc=david@gibson.dropbear.id.au \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@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).