qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] target/ppc: Better CTRL SPR implementation
@ 2023-06-20 13:15 Nicholas Piggin
  2023-06-23  9:32 ` Cédric Le Goater
  0 siblings, 1 reply; 2+ messages in thread
From: Nicholas Piggin @ 2023-06-20 13:15 UTC (permalink / raw)
  To: qemu-ppc
  Cc: Nicholas Piggin, qemu-devel, Harsh Prateek Bora,
	Daniel Henrique Barboza

The CTRL register is able to write the bit in the RUN field, which gets
reflected into the TS field which is read-only and contains the state of
the RUN field for all threads in the core.

TCG does not implement SMT, so the correct implementation just requires
mirroring the RUN bit into the first bit of the TS field.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
This is also unchanged from last posting except improved changelog.
The pseries TCG SMT patches depend on this one, but it is good to go
by itself too (this is what CTRL appears like to hardware KVM guest).

Thanks,
Nick

 target/ppc/translate.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/target/ppc/translate.c b/target/ppc/translate.c
index b591f2e496..1ade063616 100644
--- a/target/ppc/translate.c
+++ b/target/ppc/translate.c
@@ -418,7 +418,14 @@ void spr_write_generic32(DisasContext *ctx, int sprn, int gprn)
 
 void spr_write_CTRL(DisasContext *ctx, int sprn, int gprn)
 {
-    spr_write_generic32(ctx, sprn, gprn);
+    /* This does not implement >1 thread */
+    TCGv t0 = tcg_temp_new();
+    TCGv t1 = tcg_temp_new();
+    tcg_gen_extract_tl(t0, cpu_gpr[gprn], 0, 1); /* Extract RUN field */
+    tcg_gen_shli_tl(t1, t0, 8); /* Duplicate the bit in TS */
+    tcg_gen_or_tl(t1, t1, t0);
+    gen_store_spr(sprn, t1);
+    spr_store_dump_spr(sprn);
 
     /*
      * SPR_CTRL writes must force a new translation block,
-- 
2.40.1



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] target/ppc: Better CTRL SPR implementation
  2023-06-20 13:15 [PATCH] target/ppc: Better CTRL SPR implementation Nicholas Piggin
@ 2023-06-23  9:32 ` Cédric Le Goater
  0 siblings, 0 replies; 2+ messages in thread
From: Cédric Le Goater @ 2023-06-23  9:32 UTC (permalink / raw)
  To: Nicholas Piggin, qemu-ppc
  Cc: qemu-devel, Harsh Prateek Bora, Daniel Henrique Barboza

On 6/20/23 15:15, Nicholas Piggin wrote:
> The CTRL register is able to write the bit in the RUN field, which gets
> reflected into the TS field which is read-only and contains the state of
> the RUN field for all threads in the core.
> 
> TCG does not implement SMT, so the correct implementation just requires
> mirroring the RUN bit into the first bit of the TS field.
> 
> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>


Applied to ppc-next.

Thanks,

C.



> ---
> This is also unchanged from last posting except improved changelog.
> The pseries TCG SMT patches depend on this one, but it is good to go
> by itself too (this is what CTRL appears like to hardware KVM guest).
> 
> Thanks,
> Nick
> 
>   target/ppc/translate.c | 9 ++++++++-
>   1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/target/ppc/translate.c b/target/ppc/translate.c
> index b591f2e496..1ade063616 100644
> --- a/target/ppc/translate.c
> +++ b/target/ppc/translate.c
> @@ -418,7 +418,14 @@ void spr_write_generic32(DisasContext *ctx, int sprn, int gprn)
>   
>   void spr_write_CTRL(DisasContext *ctx, int sprn, int gprn)
>   {
> -    spr_write_generic32(ctx, sprn, gprn);
> +    /* This does not implement >1 thread */
> +    TCGv t0 = tcg_temp_new();
> +    TCGv t1 = tcg_temp_new();
> +    tcg_gen_extract_tl(t0, cpu_gpr[gprn], 0, 1); /* Extract RUN field */
> +    tcg_gen_shli_tl(t1, t0, 8); /* Duplicate the bit in TS */
> +    tcg_gen_or_tl(t1, t1, t0);
> +    gen_store_spr(sprn, t1);
> +    spr_store_dump_spr(sprn);
>   
>       /*
>        * SPR_CTRL writes must force a new translation block,



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2023-06-23  9:33 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-06-20 13:15 [PATCH] target/ppc: Better CTRL SPR implementation Nicholas Piggin
2023-06-23  9:32 ` Cédric Le Goater

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).