From: "Nicholas Piggin" <npiggin@gmail.com>
To: "Harsh Prateek Bora" <harshpb@linux.ibm.com>, <qemu-ppc@nongnu.org>
Cc: <qemu-devel@nongnu.org>,
"Daniel Henrique Barboza" <dbarboza@ventanamicro.com>
Subject: Re: [PATCH 2/4] ppc/spapr: Add a nested state struct
Date: Wed, 14 Jun 2023 21:56:20 +1000 [thread overview]
Message-ID: <CTCCRNIC7LCM.383MVI3UNIDK4@wheely> (raw)
In-Reply-To: <f350a17c-5164-93ed-446f-1925ced02f10@linux.ibm.com>
On Fri Jun 9, 2023 at 5:09 PM AEST, Harsh Prateek Bora wrote:
>
>
> On 6/8/23 14:43, Nicholas Piggin wrote:
> > Rather than use a copy of CPUPPCState to store the host state while
> > the environment has been switched to the L2, use a new struct for
> > this purpose.
> >
> > Have helper functions to save and load this host state.
> >
> > Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
> > ---
> > hw/ppc/spapr_hcall.c | 150 ++++++++++++++++++++++++--------
> > include/hw/ppc/spapr_cpu_core.h | 5 +-
> > 2 files changed, 115 insertions(+), 40 deletions(-)
> >
> > diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c
> > index 0582b524d1..d5b8d54692 100644
> > --- a/hw/ppc/spapr_hcall.c
> > +++ b/hw/ppc/spapr_hcall.c
> > @@ -1546,6 +1546,112 @@ static target_ulong h_copy_tofrom_guest(PowerPCCPU *cpu,
> > return H_FUNCTION;
> > }
> >
> > +struct nested_ppc_state {
> > + uint64_t gpr[32];
> > + uint64_t lr;
> > + uint64_t ctr;
> > + uint64_t cfar;
> > + uint64_t msr;
> > + uint64_t nip;
> > + uint32_t cr;
> > +
> > + uint64_t xer;
> > +
> > + uint64_t lpcr;
> > + uint64_t lpidr;
> > + uint64_t pidr;
> > + uint64_t pcr;
> > + uint64_t dpdes;
> > + uint64_t hfscr;
> > + uint64_t srr0;
> > + uint64_t srr1;
> > + uint64_t sprg0;
> > + uint64_t sprg1;
> > + uint64_t sprg2;
> > + uint64_t sprg3;
> > + uint64_t ppr;
> > +
> > + int64_t tb_offset;
> > +};
> > +
>
> <snip>
>
> > +static void nested_load_state(PowerPCCPU *cpu, struct nested_ppc_state *load)
> > +{
> > + CPUState *cs = CPU(cpu);
> > + CPUPPCState *env = &cpu->env;
> > +
> > + memcpy(env->gpr, load->gpr, sizeof(env->gpr));
> > +
> > + env->lr = load->lr;
> > + env->ctr = load->ctr;
> > + env->cfar = load->cfar;
> > + env->msr = load->msr;
> > + env->nip = load->nip;
> > +
> > + ppc_set_cr(env, load->cr);
> > + cpu_write_xer(env, load->xer);
> > +
> > + env->spr[SPR_LPCR] = load->lpcr;
> > + env->spr[SPR_LPIDR] = load->lpidr;
> > + env->spr[SPR_PCR] = load->pcr;
> > + env->spr[SPR_DPDES] = load->dpdes;
> > + env->spr[SPR_HFSCR] = load->hfscr;
> > + env->spr[SPR_SRR0] = load->srr0;
> > + env->spr[SPR_SRR1] = load->srr1;
> > + env->spr[SPR_SPRG0] = load->sprg0;
> > + env->spr[SPR_SPRG1] = load->sprg1;
> > + env->spr[SPR_SPRG2] = load->sprg2;
> > + env->spr[SPR_SPRG3] = load->sprg3;
> > + env->spr[SPR_BOOKS_PID] = load->pidr;
> > + env->spr[SPR_PPR] = load->ppr;
> > +
> > + env->tb_env->tb_offset = load->tb_offset;
> > +
> > + /*
> > + * MSR updated, compute hflags and possible interrupts.
> > + */
> > + hreg_compute_hflags(env);
> > + ppc_maybe_interrupt(env);
> > +
> > + /*
> > + * Nested HV does not tag TLB entries between L1 and L2, so must
> > + * flush on transition.
> > + */
> > + tlb_flush(cs);
> > + env->reserve_addr = -1; /* Reset the reservation */
> > +}
> > +
>
> <snip>
>
> > @@ -1766,34 +1872,8 @@ void spapr_exit_nested(PowerPCCPU *cpu, int excp)
> > address_space_unmap(CPU(cpu)->as, regs, len, len, true);
> >
> > out_restore_l1:
> > - memcpy(env->gpr, spapr_cpu->nested_host_state->gpr, sizeof(env->gpr));
> > - env->lr = spapr_cpu->nested_host_state->lr;
> > - env->ctr = spapr_cpu->nested_host_state->ctr;
> > - memcpy(env->crf, spapr_cpu->nested_host_state->crf, sizeof(env->crf));
> > - env->cfar = spapr_cpu->nested_host_state->cfar;
> > - env->xer = spapr_cpu->nested_host_state->xer;
> > - env->so = spapr_cpu->nested_host_state->so;
> > - env->ca = spapr_cpu->nested_host_state->ca;
> > - env->ov = spapr_cpu->nested_host_state->ov;
> > - env->ov32 = spapr_cpu->nested_host_state->ov32;
> > - env->ca32 = spapr_cpu->nested_host_state->ca32;
>
> Above fields so, ca, ov, ov32, ca32 are not taken care in
> nested_load_state, ca being introduced in previous patch.
They should be, by cpu_write_xer.
Thanks,
Nick
next prev parent reply other threads:[~2023-06-14 11:57 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-08 9:13 [PATCH 0/4] ppc/spapr: Nested HV fix and tidying Nicholas Piggin
2023-06-08 9:13 ` [PATCH 1/4] ppc/spapr: H_ENTER_NESTED should restore host XER ca field Nicholas Piggin
2023-06-09 7:05 ` Harsh Prateek Bora
2023-06-14 11:53 ` Nicholas Piggin
2023-06-08 9:13 ` [PATCH 2/4] ppc/spapr: Add a nested state struct Nicholas Piggin
2023-06-09 7:09 ` Harsh Prateek Bora
2023-06-14 11:56 ` Nicholas Piggin [this message]
2023-06-15 4:51 ` Harsh Prateek Bora
2023-06-15 5:36 ` Nicholas Piggin
2023-06-08 9:13 ` [PATCH 3/4] ppc/spapr: load and store l2 state with helper functions Nicholas Piggin
2023-06-09 8:00 ` Harsh Prateek Bora
2023-06-14 12:02 ` Nicholas Piggin
2023-06-15 4:53 ` Harsh Prateek Bora
2023-06-08 9:13 ` [PATCH 4/4] ppc/spapr: Move spapr nested HV to a new file Nicholas Piggin
2023-06-15 6:30 ` Harsh Prateek Bora
2023-06-15 11:51 ` Nicholas Piggin
2023-06-16 4:57 ` Harsh Prateek Bora
2023-06-18 9:53 ` Daniel Henrique Barboza
2023-06-20 3:41 ` Nicholas Piggin
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=CTCCRNIC7LCM.383MVI3UNIDK4@wheely \
--to=npiggin@gmail.com \
--cc=dbarboza@ventanamicro.com \
--cc=harshpb@linux.ibm.com \
--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.