yeahuh / rpms / qemu-kvm

Forked from rpms/qemu-kvm 2 years ago
Clone
76daa3
From 0efa66da9c8638270ac03a02d184473b7a049fe8 Mon Sep 17 00:00:00 2001
76daa3
From: David Gibson <dgibson@redhat.com>
76daa3
Date: Thu, 27 Apr 2017 02:15:54 +0200
76daa3
Subject: [PATCH 19/23] target/ppc: Add new H-CALL shells for in memory table
76daa3
 translation
76daa3
76daa3
RH-Author: David Gibson <dgibson@redhat.com>
76daa3
Message-id: <20170427021558.4884-4-dgibson@redhat.com>
76daa3
Patchwork-id: 74914
76daa3
O-Subject: [Pegas-1.0 qemu-kvm-rhev PATCH 3/7] target/ppc: Add new H-CALL shells for in memory table translation
76daa3
Bugzilla: 1368786
76daa3
RH-Acked-by: Thomas Huth <thuth@redhat.com>
76daa3
RH-Acked-by: Laurent Vivier <lvivier@redhat.com>
76daa3
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
76daa3
76daa3
From: Suraj Jitindar Singh <sjitindarsingh@gmail.com>
76daa3
76daa3
The use of the new in memory tables introduced in ISAv3.00 for translation,
76daa3
also referred to as process tables, requires the introduction of 3 new
76daa3
H-CALLs; H_REGISTER_PROCESS_TABLE, H_CLEAN_SLB, and H_INVALIDATE_PID.
76daa3
76daa3
Add shells for each of these and register them as the hypercall handlers.
76daa3
Currently they all log an unimplemented hypercall and return H_FUNCTION.
76daa3
76daa3
Signed-off-by: Suraj Jitindar Singh <sjitindarsingh@gmail.com>
76daa3
[dwg: Fix style nits]
76daa3
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
76daa3
76daa3
(cherry picked from commit d77a98b01575bbbeff87a83f6e7f5ca0ce3aefdb)
76daa3
76daa3
Siged-off-by: David Gibson <dgibson@redhat.com>
76daa3
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
76daa3
---
76daa3
 hw/ppc/spapr_hcall.c   | 31 +++++++++++++++++++++++++++++++
76daa3
 include/hw/ppc/spapr.h |  3 +++
76daa3
 2 files changed, 34 insertions(+)
76daa3
76daa3
diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c
76daa3
index f05a90e..7952129 100644
76daa3
--- a/hw/ppc/spapr_hcall.c
76daa3
+++ b/hw/ppc/spapr_hcall.c
76daa3
@@ -878,6 +878,32 @@ static target_ulong h_set_mode(PowerPCCPU *cpu, sPAPRMachineState *spapr,
76daa3
     return ret;
76daa3
 }
76daa3
 
76daa3
+static target_ulong h_clean_slb(PowerPCCPU *cpu, sPAPRMachineState *spapr,
76daa3
+                                target_ulong opcode, target_ulong *args)
76daa3
+{
76daa3
+    qemu_log_mask(LOG_UNIMP, "Unimplemented SPAPR hcall 0x"TARGET_FMT_lx"%s\n",
76daa3
+                  opcode, " (H_CLEAN_SLB)");
76daa3
+    return H_FUNCTION;
76daa3
+}
76daa3
+
76daa3
+static target_ulong h_invalidate_pid(PowerPCCPU *cpu, sPAPRMachineState *spapr,
76daa3
+                                     target_ulong opcode, target_ulong *args)
76daa3
+{
76daa3
+    qemu_log_mask(LOG_UNIMP, "Unimplemented SPAPR hcall 0x"TARGET_FMT_lx"%s\n",
76daa3
+                  opcode, " (H_INVALIDATE_PID)");
76daa3
+    return H_FUNCTION;
76daa3
+}
76daa3
+
76daa3
+static target_ulong h_register_process_table(PowerPCCPU *cpu,
76daa3
+                                             sPAPRMachineState *spapr,
76daa3
+                                             target_ulong opcode,
76daa3
+                                             target_ulong *args)
76daa3
+{
76daa3
+    qemu_log_mask(LOG_UNIMP, "Unimplemented SPAPR hcall 0x"TARGET_FMT_lx"%s\n",
76daa3
+                  opcode, " (H_REGISTER_PROC_TBL)");
76daa3
+    return H_FUNCTION;
76daa3
+}
76daa3
+
76daa3
 #define H_SIGNAL_SYS_RESET_ALL         -1
76daa3
 #define H_SIGNAL_SYS_RESET_ALLBUTSELF  -2
76daa3
 
76daa3
@@ -1084,6 +1110,11 @@ static void hypercall_register_types(void)
76daa3
     spapr_register_hypercall(H_PAGE_INIT, h_page_init);
76daa3
     spapr_register_hypercall(H_SET_MODE, h_set_mode);
76daa3
 
76daa3
+    /* In Memory Table MMU h-calls */
76daa3
+    spapr_register_hypercall(H_CLEAN_SLB, h_clean_slb);
76daa3
+    spapr_register_hypercall(H_INVALIDATE_PID, h_invalidate_pid);
76daa3
+    spapr_register_hypercall(H_REGISTER_PROC_TBL, h_register_process_table);
76daa3
+
76daa3
     /* "debugger" hcalls (also used by SLOF). Note: We do -not- differenciate
76daa3
      * here between the "CI" and the "CACHE" variants, they will use whatever
76daa3
      * mapping attributes qemu is using. When using KVM, the kernel will
76daa3
diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
76daa3
index 808aac8..9db6bbe 100644
76daa3
--- a/include/hw/ppc/spapr.h
76daa3
+++ b/include/hw/ppc/spapr.h
76daa3
@@ -349,6 +349,9 @@ struct sPAPRMachineState {
76daa3
 #define H_XIRR_X                0x2FC
76daa3
 #define H_RANDOM                0x300
76daa3
 #define H_SET_MODE              0x31C
76daa3
+#define H_CLEAN_SLB             0x374
76daa3
+#define H_INVALIDATE_PID        0x378
76daa3
+#define H_REGISTER_PROC_TBL     0x37C
76daa3
 #define H_SIGNAL_SYS_RESET      0x380
76daa3
 #define MAX_HCALL_OPCODE        H_SIGNAL_SYS_RESET
76daa3
 
76daa3
-- 
76daa3
1.8.3.1
76daa3