qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 2/2][SPARC] Fix TA0_Shutdown feature
       [not found] <BANLkTikeSfsp537pf-unOyR4ftxctmfP2w@mail.gmail.com>
@ 2011-05-17 15:32 ` Julien Grall
  2011-05-17 19:57   ` Blue Swirl
  0 siblings, 1 reply; 4+ messages in thread
From: Julien Grall @ 2011-05-17 15:32 UTC (permalink / raw)
  To: qemu-devel; +Cc: Fabien Chouteau

Fix TA0_SHUTDOWN feature

Signed-off-by: Julien Grall <julien.grall@gmail.com>
---
 target-sparc/op_helper.c |   13 +++++++++++--
 target-sparc/translate.c |    9 +--------
 2 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/target-sparc/op_helper.c b/target-sparc/op_helper.c
index a6fabad..cb775f5 100644
--- a/target-sparc/op_helper.c
+++ b/target-sparc/op_helper.c
@@ -326,8 +326,17 @@ void HELPER(raise_exception)(int tt)

 void HELPER(trap_always)(int tt)
 {
-    env->exception_index = tt;
-    do_interrupt(env);
+    if (tt == TT_TRAP
+        && env->def->features & CPU_FEATURE_TA0_SHUTDOWN
+#ifndef TARGET_SPARC64
+        && env->psret == 0
+#endif
+        ) {
+        helper_shutdown();
+    } else {
+        env->exception_index = tt;
+        do_interrupt(env);
+    }
 }

 void helper_shutdown(void)
diff --git a/target-sparc/translate.c b/target-sparc/translate.c
index b30003b..a47a2de 100644
--- a/target-sparc/translate.c
+++ b/target-sparc/translate.c
@@ -2009,14 +2009,7 @@ static void disas_sparc_insn(DisasContext * dc)
                     tcg_gen_addi_tl(cpu_dst, cpu_dst, TT_TRAP);
                     tcg_gen_trunc_tl_i32(cpu_tmp32, cpu_dst);

-                    if (rs2 == 0 &&
-                        dc->def->features & CPU_FEATURE_TA0_SHUTDOWN) {
-
-                        gen_helper_shutdown();
-
-                    } else {
-                        gen_helper_trap_always(cpu_tmp32);
-                    }
+                    gen_helper_trap_always(cpu_tmp32);
                 } else if (cond != 0) {
                     TCGv r_cond = tcg_temp_new();
                     int l1;
-- 
1.7.4.4

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

* Re: [Qemu-devel] [PATCH 2/2][SPARC] Fix TA0_Shutdown feature
  2011-05-17 15:32 ` [Qemu-devel] [PATCH 2/2][SPARC] Fix TA0_Shutdown feature Julien Grall
@ 2011-05-17 19:57   ` Blue Swirl
  2011-05-18 13:17     ` Julien Grall
  0 siblings, 1 reply; 4+ messages in thread
From: Blue Swirl @ 2011-05-17 19:57 UTC (permalink / raw)
  To: Julien Grall; +Cc: qemu-devel, Fabien Chouteau

On Tue, May 17, 2011 at 6:32 PM, Julien Grall <julien.grall@gmail.com> wrote:
> Fix TA0_SHUTDOWN feature

But what would be the bug?

> Signed-off-by: Julien Grall <julien.grall@gmail.com>
> ---
>  target-sparc/op_helper.c |   13 +++++++++++--
>  target-sparc/translate.c |    9 +--------
>  2 files changed, 12 insertions(+), 10 deletions(-)
>
> diff --git a/target-sparc/op_helper.c b/target-sparc/op_helper.c
> index a6fabad..cb775f5 100644
> --- a/target-sparc/op_helper.c
> +++ b/target-sparc/op_helper.c
> @@ -326,8 +326,17 @@ void HELPER(raise_exception)(int tt)
>
>  void HELPER(trap_always)(int tt)
>  {
> -    env->exception_index = tt;
> -    do_interrupt(env);
> +    if (tt == TT_TRAP
> +        && env->def->features & CPU_FEATURE_TA0_SHUTDOWN
> +#ifndef TARGET_SPARC64
> +        && env->psret == 0
> +#endif
> +        ) {
> +        helper_shutdown();
> +    } else {
> +        env->exception_index = tt;
> +        do_interrupt(env);
> +    }
>  }
>
>  void helper_shutdown(void)
> diff --git a/target-sparc/translate.c b/target-sparc/translate.c
> index b30003b..a47a2de 100644
> --- a/target-sparc/translate.c
> +++ b/target-sparc/translate.c
> @@ -2009,14 +2009,7 @@ static void disas_sparc_insn(DisasContext * dc)
>                     tcg_gen_addi_tl(cpu_dst, cpu_dst, TT_TRAP);
>                     tcg_gen_trunc_tl_i32(cpu_tmp32, cpu_dst);
>
> -                    if (rs2 == 0 &&
> -                        dc->def->features & CPU_FEATURE_TA0_SHUTDOWN) {
> -
> -                        gen_helper_shutdown();
> -
> -                    } else {
> -                        gen_helper_trap_always(cpu_tmp32);
> -                    }
> +                    gen_helper_trap_always(cpu_tmp32);

No, this would actually be just opposite to how QEMU works.
Performance comes from doing more work at translation time in order to
save time during executing the generated code.

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

* Re: [Qemu-devel] [PATCH 2/2][SPARC] Fix TA0_Shutdown feature
  2011-05-17 19:57   ` Blue Swirl
@ 2011-05-18 13:17     ` Julien Grall
  2011-05-20 16:03       ` Blue Swirl
  0 siblings, 1 reply; 4+ messages in thread
From: Julien Grall @ 2011-05-18 13:17 UTC (permalink / raw)
  To: Blue Swirl; +Cc: qemu-devel, Fabien Chouteau

On Tue, May 17, 2011 at 9:57 PM, Blue Swirl <blauwirbel@gmail.com> wrote:
> On Tue, May 17, 2011 at 6:32 PM, Julien Grall <julien.grall@gmail.com> wrote:
>> Fix TA0_SHUTDOWN feature
>
> But what would be the bug?

We try to add RTEMS's support on leon platform for QEMU. RTEMS uses
software trap 0 for various syscall.
The current implementation of TA0_SHUTDOWN breaks the RTEMS boot.

> No, this would actually be just opposite to how QEMU works.
> Performance comes from doing more work at translation time in order to
> save time during executing the generated code.

I agree, this solution slows down the execution, but I didn't find
another solution to fix this bug.

-- 
Grall Julien

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

* Re: [Qemu-devel] [PATCH 2/2][SPARC] Fix TA0_Shutdown feature
  2011-05-18 13:17     ` Julien Grall
@ 2011-05-20 16:03       ` Blue Swirl
  0 siblings, 0 replies; 4+ messages in thread
From: Blue Swirl @ 2011-05-20 16:03 UTC (permalink / raw)
  To: Julien Grall; +Cc: qemu-devel, Fabien Chouteau

On Wed, May 18, 2011 at 4:17 PM, Julien Grall <julien.grall@gmail.com> wrote:
> On Tue, May 17, 2011 at 9:57 PM, Blue Swirl <blauwirbel@gmail.com> wrote:
>> On Tue, May 17, 2011 at 6:32 PM, Julien Grall <julien.grall@gmail.com> wrote:
>>> Fix TA0_SHUTDOWN feature
>>
>> But what would be the bug?
>
> We try to add RTEMS's support on leon platform for QEMU. RTEMS uses
> software trap 0 for various syscall.
> The current implementation of TA0_SHUTDOWN breaks the RTEMS boot.
>
>> No, this would actually be just opposite to how QEMU works.
>> Performance comes from doing more work at translation time in order to
>> save time during executing the generated code.
>
> I agree, this solution slows down the execution, but I didn't find
> another solution to fix this bug.

You should retain the feature check in translate.c but add a leon
specific helper in place of helper_shutdown, which can check for
psret.

It would be also possible to generate code for the psret check if the
helper overhead were an issue.

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

end of thread, other threads:[~2011-05-20 16:04 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <BANLkTikeSfsp537pf-unOyR4ftxctmfP2w@mail.gmail.com>
2011-05-17 15:32 ` [Qemu-devel] [PATCH 2/2][SPARC] Fix TA0_Shutdown feature Julien Grall
2011-05-17 19:57   ` Blue Swirl
2011-05-18 13:17     ` Julien Grall
2011-05-20 16:03       ` Blue Swirl

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