From: "Cédric Le Goater" <clg@kaod.org>
To: David Gibson <david@gibson.dropbear.id.au>
Cc: qemu-ppc@nongnu.org, qemu-devel@nongnu.org,
Benjamin Herrenschmidt <benh@kernel.crashing.org>
Subject: Re: [Qemu-devel] [PATCH 01/10] ppc: Fix rfi/rfid/hrfi/... emulation
Date: Fri, 17 Jun 2016 08:19:18 +0200 [thread overview]
Message-ID: <57639666.9040802@kaod.org> (raw)
In-Reply-To: <20160616010702.GI28087@voom.fritz.box>
On 06/16/2016 03:07 AM, David Gibson wrote:
> On Mon, Jun 13, 2016 at 07:24:47AM +0200, Cédric Le Goater wrote:
>> From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
>>
>> This reworks emulation of the various "rfi" variants. I removed
>> some masking bits that I couldn't make sense of, the only bit that
>> I am aware we should mask here is POW, the CPU's MSR mask should
>> take care of the rest.
>>
>> This also fixes some problems when running 32-bit userspace under
>> a 64-bit kernel.
>>
>> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
>> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
>
> I've merged this patch to ppc-for-2.7.
>
> The reset of the series I'd like to see a respin for, even if it's
> just to clean up the commit messages.
Yes. I noted a couple of commit messages to rephrase, the "inline"
removal patch to keep and a merge of Andrei patches for HV {I,D}SI.
I will get that going once I have a better idea on a block I/O
issue I see with another patchset. I am really pulling my hair
on this one. Spent the week on it :/ The good thing is that it
made me write a unit test !
Cheers,
C.
>> ---
>> target-ppc/excp_helper.c | 51 +++++++++++++++++++-----------------------------
>> target-ppc/translate.c | 7 +++++++
>> 2 files changed, 27 insertions(+), 31 deletions(-)
>>
>> diff --git a/target-ppc/excp_helper.c b/target-ppc/excp_helper.c
>> index 30e960e30b63..aa0b63f4b0de 100644
>> --- a/target-ppc/excp_helper.c
>> +++ b/target-ppc/excp_helper.c
>> @@ -922,25 +922,20 @@ void helper_store_msr(CPUPPCState *env, target_ulong val)
>> }
>> }
>>
>> -static inline void do_rfi(CPUPPCState *env, target_ulong nip, target_ulong msr,
>> - target_ulong msrm, int keep_msrh)
>> +static inline void do_rfi(CPUPPCState *env, target_ulong nip, target_ulong msr)
>> {
>> CPUState *cs = CPU(ppc_env_get_cpu(env));
>>
>> + /* MSR:POW cannot be set by any form of rfi */
>> + msr &= ~(1ULL << MSR_POW);
>> +
>> #if defined(TARGET_PPC64)
>> - if (msr_is_64bit(env, msr)) {
>> - nip = (uint64_t)nip;
>> - msr &= (uint64_t)msrm;
>> - } else {
>> + /* Switching to 32-bit ? Crop the nip */
>> + if (!msr_is_64bit(env, msr)) {
>> nip = (uint32_t)nip;
>> - msr = (uint32_t)(msr & msrm);
>> - if (keep_msrh) {
>> - msr |= env->msr & ~((uint64_t)0xFFFFFFFF);
>> - }
>> }
>> #else
>> nip = (uint32_t)nip;
>> - msr &= (uint32_t)msrm;
>> #endif
>> /* XXX: beware: this is false if VLE is supported */
>> env->nip = nip & ~((target_ulong)0x00000003);
>> @@ -959,26 +954,24 @@ static inline void do_rfi(CPUPPCState *env, target_ulong nip, target_ulong msr,
>>
>> void helper_rfi(CPUPPCState *env)
>> {
>> - if (env->excp_model == POWERPC_EXCP_BOOKE) {
>> - do_rfi(env, env->spr[SPR_SRR0], env->spr[SPR_SRR1],
>> - ~((target_ulong)0), 0);
>> - } else {
>> - do_rfi(env, env->spr[SPR_SRR0], env->spr[SPR_SRR1],
>> - ~((target_ulong)0x783F0000), 1);
>> - }
>> + do_rfi(env, env->spr[SPR_SRR0], env->spr[SPR_SRR1] & 0xfffffffful);
>> }
>>
>> +#define MSR_BOOK3S_MASK
>> #if defined(TARGET_PPC64)
>> void helper_rfid(CPUPPCState *env)
>> {
>> - do_rfi(env, env->spr[SPR_SRR0], env->spr[SPR_SRR1],
>> - ~((target_ulong)0x783F0000), 0);
>> + /* The architeture defines a number of rules for which bits
>> + * can change but in practice, we handle this in hreg_store_msr()
>> + * which will be called by do_rfi(), so there is no need to filter
>> + * here
>> + */
>> + do_rfi(env, env->spr[SPR_SRR0], env->spr[SPR_SRR1]);
>> }
>>
>> void helper_hrfid(CPUPPCState *env)
>> {
>> - do_rfi(env, env->spr[SPR_HSRR0], env->spr[SPR_HSRR1],
>> - ~((target_ulong)0x783F0000), 0);
>> + do_rfi(env, env->spr[SPR_HSRR0], env->spr[SPR_HSRR1]);
>> }
>> #endif
>>
>> @@ -986,28 +979,24 @@ void helper_hrfid(CPUPPCState *env)
>> /* Embedded PowerPC specific helpers */
>> void helper_40x_rfci(CPUPPCState *env)
>> {
>> - do_rfi(env, env->spr[SPR_40x_SRR2], env->spr[SPR_40x_SRR3],
>> - ~((target_ulong)0xFFFF0000), 0);
>> + do_rfi(env, env->spr[SPR_40x_SRR2], env->spr[SPR_40x_SRR3]);
>> }
>>
>> void helper_rfci(CPUPPCState *env)
>> {
>> - do_rfi(env, env->spr[SPR_BOOKE_CSRR0], env->spr[SPR_BOOKE_CSRR1],
>> - ~((target_ulong)0), 0);
>> + do_rfi(env, env->spr[SPR_BOOKE_CSRR0], env->spr[SPR_BOOKE_CSRR1]);
>> }
>>
>> void helper_rfdi(CPUPPCState *env)
>> {
>> /* FIXME: choose CSRR1 or DSRR1 based on cpu type */
>> - do_rfi(env, env->spr[SPR_BOOKE_DSRR0], env->spr[SPR_BOOKE_DSRR1],
>> - ~((target_ulong)0), 0);
>> + do_rfi(env, env->spr[SPR_BOOKE_DSRR0], env->spr[SPR_BOOKE_DSRR1]);
>> }
>>
>> void helper_rfmci(CPUPPCState *env)
>> {
>> /* FIXME: choose CSRR1 or MCSRR1 based on cpu type */
>> - do_rfi(env, env->spr[SPR_BOOKE_MCSRR0], env->spr[SPR_BOOKE_MCSRR1],
>> - ~((target_ulong)0), 0);
>> + do_rfi(env, env->spr[SPR_BOOKE_MCSRR0], env->spr[SPR_BOOKE_MCSRR1]);
>> }
>> #endif
>>
>> @@ -1045,7 +1034,7 @@ void helper_td(CPUPPCState *env, target_ulong arg1, target_ulong arg2,
>>
>> void helper_rfsvc(CPUPPCState *env)
>> {
>> - do_rfi(env, env->lr, env->ctr, 0x0000FFFF, 0);
>> + do_rfi(env, env->lr, env->ctr & 0x0000FFFF);
>> }
>>
>> /* Embedded.Processor Control */
>> diff --git a/target-ppc/translate.c b/target-ppc/translate.c
>> index b6894751e8df..a02ddf52bfe6 100644
>> --- a/target-ppc/translate.c
>> +++ b/target-ppc/translate.c
>> @@ -4087,6 +4087,13 @@ static void gen_rfi(DisasContext *ctx)
>> #if defined(CONFIG_USER_ONLY)
>> gen_inval_exception(ctx, POWERPC_EXCP_PRIV_OPC);
>> #else
>> + /* This instruction doesn't exist anymore on 64-bit server
>> + * processors compliant with arch 2.x
>> + */
>> + if (ctx->insns_flags & PPC_SEGMENT_64B) {
>> + gen_inval_exception(ctx, POWERPC_EXCP_INVAL_INVAL);
>> + return;
>> + }
>> /* Restore CPU state */
>> if (unlikely(ctx->pr)) {
>> gen_inval_exception(ctx, POWERPC_EXCP_PRIV_OPC);
>
next prev parent reply other threads:[~2016-06-17 6:19 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 ` Cédric Le Goater [this message]
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
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=57639666.9040802@kaod.org \
--to=clg@kaod.org \
--cc=benh@kernel.crashing.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 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.