qemu-ppc
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2 08/14] target/ppc: 405: System call exception cleanup


From: Cédric Le Goater
Subject: Re: [PATCH v2 08/14] target/ppc: 405: System call exception cleanup
Date: Tue, 25 Jan 2022 09:18:19 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.3.0

On 1/19/22 07:09, David Gibson wrote:
On Tue, Jan 18, 2022 at 03:44:42PM -0300, Fabiano Rosas wrote:
There's no sc 1.

No... but what exactly should and will happen if you attempt to
execute an "sc 1" on 40x.  Will it be treated as an "sc 0", or will it
cause a 0x700?  If it's a 0x700, better double check that that is
generated at translation time, if you're removing the check on level
here.

A Program Interrupt with the illegal instruction error code should be
generated at translation time but it is not the case today. It never
was correctly implemented AFAICT :

  /* Top bit of opc2 corresponds with low bit of LEV, so use two handlers */
  GEN_HANDLER(sc, 0x11, 0x11, 0xFF, 0x03FFF01D, PPC_FLOW),
  GEN_HANDLER(sc, 0x11, 0x01, 0xFF, 0x03FFF01D, PPC_FLOW),

We would need a simple 'sc' instruction for the PPC405 and other
processors. Let's add that to the TODO list.

Thanks,

C.




Signed-off-by: Fabiano Rosas <farosas@linux.ibm.com>
---
  target/ppc/excp_helper.c | 21 ++-------------------
  1 file changed, 2 insertions(+), 19 deletions(-)

diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c
index 8fae8aa0be..9a6f8365d6 100644
--- a/target/ppc/excp_helper.c
+++ b/target/ppc/excp_helper.c
@@ -398,7 +398,7 @@ static void powerpc_excp_40x(PowerPCCPU *cpu, int excp)
      CPUPPCState *env = &cpu->env;
      int excp_model = env->excp_model;
      target_ulong msr, new_msr, vector;
-    int srr0, srr1, lev = -1;
+    int srr0, srr1;
if (excp <= POWERPC_EXCP_NONE || excp >= POWERPC_EXCP_NB) {
          cpu_abort(cs, "Invalid PowerPC exception %d. Aborting\n", excp);
@@ -521,30 +521,13 @@ static void powerpc_excp_40x(PowerPCCPU *cpu, int excp)
          }
          break;
      case POWERPC_EXCP_SYSCALL:   /* System call exception                    
*/
-        lev = env->error_code;
-
-        if ((lev == 1) && cpu->vhyp) {
-            dump_hcall(env);
-        } else {
-            dump_syscall(env);
-        }
+        dump_syscall(env);
/*
           * We need to correct the NIP which in this case is supposed
           * to point to the next instruction
           */
          env->nip += 4;
-
-        /* "PAPR mode" built-in hypercall emulation */
-        if ((lev == 1) && cpu->vhyp) {
-            PPCVirtualHypervisorClass *vhc =
-                PPC_VIRTUAL_HYPERVISOR_GET_CLASS(cpu->vhyp);
-            vhc->hypercall(cpu->vhyp, cpu);
-            return;
-        }
-        if (lev == 1) {
-            new_msr |= (target_ulong)MSR_HVB;
-        }
          break;
      case POWERPC_EXCP_FIT:       /* Fixed-interval timer interrupt           
*/
          trace_ppc_excp_print("FIT");





reply via email to

[Prev in Thread] Current Thread [Next in Thread]