All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v1 for-2.11 00/10] target/s390x: cleanup cpu.h
@ 2017-08-17  9:22 David Hildenbrand
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 01/10] target/s390x: move cc_name() to cc_helper.c David Hildenbrand
                   ` (11 more replies)
  0 siblings, 12 replies; 43+ messages in thread
From: David Hildenbrand @ 2017-08-17  9:22 UTC (permalink / raw)
  To: qemu-devel; +Cc: rth, Aurelien Jarno, thuth, cohuck, david, borntraeger

cpu.h is accessed outside of target/s390x. It should only contain
what is expected to be accessed outside of this folder. Therefore, create
internal.h and move a lot to that file. In addition, introduce
kvm-stub.c and kvm_390x.h for kvm specific functions.

Let's see what compilers think about this version.

RFC -> v1:
- (hopefully) fixed a compile error
- move some functions from cpu.h to the only c file they are used in
- move kvm function and stubs to kvm_s390x.h and kvm-stub.c
- smaller requested style fixes


David Hildenbrand (10):
  target/s390x: move cc_name() to cc_helper.c
  target/s390x: move cpu_mmu_idx_to_asc() to excp_helper.c
  target/s390x: move psw_key_valid() to mem_helper.c
  target/s390x: move s390_do_cpu_reset() to diag.c
  target/s390x: move get_per_in_range() to misc_helper.c
  target/s390x: introduce internal.h
  target/s390x: move a couple of functions to cpu.c
  s390x: avoid calling kvm_ functions outside of target/s390x/
  s390x/kvm: move KVM declarations and stubs to separate files
  target/s390x: cleanup cpu.h

 hw/s390x/s390-virtio-ccw.c |   4 +-
 target/s390x/Makefile.objs |   1 +
 target/s390x/arch_dump.c   |   1 +
 target/s390x/cc_helper.c   |  49 +++
 target/s390x/cpu.c         |  87 ++++++
 target/s390x/cpu.h         | 761 +++++----------------------------------------
 target/s390x/cpu_models.c  |   1 +
 target/s390x/diag.c        |   8 +
 target/s390x/excp_helper.c |  15 +
 target/s390x/fpu_helper.c  |   1 +
 target/s390x/gdbstub.c     |   1 +
 target/s390x/helper.c      |   1 +
 target/s390x/int_helper.c  |   1 +
 target/s390x/internal.h    | 391 +++++++++++++++++++++++
 target/s390x/interrupt.c   |   1 +
 target/s390x/ioinst.c      |   1 +
 target/s390x/kvm-stub.c    | 111 +++++++
 target/s390x/kvm.c         |   1 +
 target/s390x/kvm_s390x.h   |  51 +++
 target/s390x/machine.c     |   1 +
 target/s390x/mem_helper.c  |  12 +
 target/s390x/misc_helper.c |  12 +
 target/s390x/mmu_helper.c  |   1 +
 target/s390x/translate.c   |   1 +
 24 files changed, 820 insertions(+), 694 deletions(-)
 create mode 100644 target/s390x/internal.h
 create mode 100644 target/s390x/kvm-stub.c
 create mode 100644 target/s390x/kvm_s390x.h

-- 
2.9.4

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

* [Qemu-devel] [PATCH v1 for-2.11 01/10] target/s390x: move cc_name() to cc_helper.c
  2017-08-17  9:22 [Qemu-devel] [PATCH v1 for-2.11 00/10] target/s390x: cleanup cpu.h David Hildenbrand
@ 2017-08-17  9:22 ` David Hildenbrand
  2017-08-17 11:01   ` Thomas Huth
                     ` (2 more replies)
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 02/10] target/s390x: move cpu_mmu_idx_to_asc() to excp_helper.c David Hildenbrand
                   ` (10 subsequent siblings)
  11 siblings, 3 replies; 43+ messages in thread
From: David Hildenbrand @ 2017-08-17  9:22 UTC (permalink / raw)
  To: qemu-devel; +Cc: rth, Aurelien Jarno, thuth, cohuck, david, borntraeger

While at it, move the translations into the function.

Signed-off-by: David Hildenbrand <david@redhat.com>
---
 target/s390x/cc_helper.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
 target/s390x/cpu.h       | 48 +-----------------------------------------------
 2 files changed, 49 insertions(+), 47 deletions(-)

diff --git a/target/s390x/cc_helper.c b/target/s390x/cc_helper.c
index 1cf8551..a4562e5 100644
--- a/target/s390x/cc_helper.c
+++ b/target/s390x/cc_helper.c
@@ -31,6 +31,54 @@
 #define HELPER_LOG(x...)
 #endif
 
+const char *cc_name(int cc_op)
+{
+    static const char *cc_names[] = {
+        [CC_OP_CONST0]    = "CC_OP_CONST0",
+        [CC_OP_CONST1]    = "CC_OP_CONST1",
+        [CC_OP_CONST2]    = "CC_OP_CONST2",
+        [CC_OP_CONST3]    = "CC_OP_CONST3",
+        [CC_OP_DYNAMIC]   = "CC_OP_DYNAMIC",
+        [CC_OP_STATIC]    = "CC_OP_STATIC",
+        [CC_OP_NZ]        = "CC_OP_NZ",
+        [CC_OP_LTGT_32]   = "CC_OP_LTGT_32",
+        [CC_OP_LTGT_64]   = "CC_OP_LTGT_64",
+        [CC_OP_LTUGTU_32] = "CC_OP_LTUGTU_32",
+        [CC_OP_LTUGTU_64] = "CC_OP_LTUGTU_64",
+        [CC_OP_LTGT0_32]  = "CC_OP_LTGT0_32",
+        [CC_OP_LTGT0_64]  = "CC_OP_LTGT0_64",
+        [CC_OP_ADD_64]    = "CC_OP_ADD_64",
+        [CC_OP_ADDU_64]   = "CC_OP_ADDU_64",
+        [CC_OP_ADDC_64]   = "CC_OP_ADDC_64",
+        [CC_OP_SUB_64]    = "CC_OP_SUB_64",
+        [CC_OP_SUBU_64]   = "CC_OP_SUBU_64",
+        [CC_OP_SUBB_64]   = "CC_OP_SUBB_64",
+        [CC_OP_ABS_64]    = "CC_OP_ABS_64",
+        [CC_OP_NABS_64]   = "CC_OP_NABS_64",
+        [CC_OP_ADD_32]    = "CC_OP_ADD_32",
+        [CC_OP_ADDU_32]   = "CC_OP_ADDU_32",
+        [CC_OP_ADDC_32]   = "CC_OP_ADDC_32",
+        [CC_OP_SUB_32]    = "CC_OP_SUB_32",
+        [CC_OP_SUBU_32]   = "CC_OP_SUBU_32",
+        [CC_OP_SUBB_32]   = "CC_OP_SUBB_32",
+        [CC_OP_ABS_32]    = "CC_OP_ABS_32",
+        [CC_OP_NABS_32]   = "CC_OP_NABS_32",
+        [CC_OP_COMP_32]   = "CC_OP_COMP_32",
+        [CC_OP_COMP_64]   = "CC_OP_COMP_64",
+        [CC_OP_TM_32]     = "CC_OP_TM_32",
+        [CC_OP_TM_64]     = "CC_OP_TM_64",
+        [CC_OP_NZ_F32]    = "CC_OP_NZ_F32",
+        [CC_OP_NZ_F64]    = "CC_OP_NZ_F64",
+        [CC_OP_NZ_F128]   = "CC_OP_NZ_F128",
+        [CC_OP_ICM]       = "CC_OP_ICM",
+        [CC_OP_SLA_32]    = "CC_OP_SLA_32",
+        [CC_OP_SLA_64]    = "CC_OP_SLA_64",
+        [CC_OP_FLOGR]     = "CC_OP_FLOGR",
+    };
+
+    return cc_names[cc_op];
+}
+
 static uint32_t cc_calc_ltgt_32(int32_t src, int32_t dst)
 {
     if (src == dst) {
diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
index 29fdd5d..3e798ef 100644
--- a/target/s390x/cpu.h
+++ b/target/s390x/cpu.h
@@ -744,53 +744,7 @@ enum cc_op {
     CC_OP_MAX
 };
 
-static const char *cc_names[] = {
-    [CC_OP_CONST0]    = "CC_OP_CONST0",
-    [CC_OP_CONST1]    = "CC_OP_CONST1",
-    [CC_OP_CONST2]    = "CC_OP_CONST2",
-    [CC_OP_CONST3]    = "CC_OP_CONST3",
-    [CC_OP_DYNAMIC]   = "CC_OP_DYNAMIC",
-    [CC_OP_STATIC]    = "CC_OP_STATIC",
-    [CC_OP_NZ]        = "CC_OP_NZ",
-    [CC_OP_LTGT_32]   = "CC_OP_LTGT_32",
-    [CC_OP_LTGT_64]   = "CC_OP_LTGT_64",
-    [CC_OP_LTUGTU_32] = "CC_OP_LTUGTU_32",
-    [CC_OP_LTUGTU_64] = "CC_OP_LTUGTU_64",
-    [CC_OP_LTGT0_32]  = "CC_OP_LTGT0_32",
-    [CC_OP_LTGT0_64]  = "CC_OP_LTGT0_64",
-    [CC_OP_ADD_64]    = "CC_OP_ADD_64",
-    [CC_OP_ADDU_64]   = "CC_OP_ADDU_64",
-    [CC_OP_ADDC_64]   = "CC_OP_ADDC_64",
-    [CC_OP_SUB_64]    = "CC_OP_SUB_64",
-    [CC_OP_SUBU_64]   = "CC_OP_SUBU_64",
-    [CC_OP_SUBB_64]   = "CC_OP_SUBB_64",
-    [CC_OP_ABS_64]    = "CC_OP_ABS_64",
-    [CC_OP_NABS_64]   = "CC_OP_NABS_64",
-    [CC_OP_ADD_32]    = "CC_OP_ADD_32",
-    [CC_OP_ADDU_32]   = "CC_OP_ADDU_32",
-    [CC_OP_ADDC_32]   = "CC_OP_ADDC_32",
-    [CC_OP_SUB_32]    = "CC_OP_SUB_32",
-    [CC_OP_SUBU_32]   = "CC_OP_SUBU_32",
-    [CC_OP_SUBB_32]   = "CC_OP_SUBB_32",
-    [CC_OP_ABS_32]    = "CC_OP_ABS_32",
-    [CC_OP_NABS_32]   = "CC_OP_NABS_32",
-    [CC_OP_COMP_32]   = "CC_OP_COMP_32",
-    [CC_OP_COMP_64]   = "CC_OP_COMP_64",
-    [CC_OP_TM_32]     = "CC_OP_TM_32",
-    [CC_OP_TM_64]     = "CC_OP_TM_64",
-    [CC_OP_NZ_F32]    = "CC_OP_NZ_F32",
-    [CC_OP_NZ_F64]    = "CC_OP_NZ_F64",
-    [CC_OP_NZ_F128]   = "CC_OP_NZ_F128",
-    [CC_OP_ICM]       = "CC_OP_ICM",
-    [CC_OP_SLA_32]    = "CC_OP_SLA_32",
-    [CC_OP_SLA_64]    = "CC_OP_SLA_64",
-    [CC_OP_FLOGR]     = "CC_OP_FLOGR",
-};
-
-static inline const char *cc_name(int cc_op)
-{
-    return cc_names[cc_op];
-}
+const char *cc_name(int cc_op);
 
 static inline void setcc(S390CPU *cpu, uint64_t cc)
 {
-- 
2.9.4

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

* [Qemu-devel] [PATCH v1 for-2.11 02/10] target/s390x: move cpu_mmu_idx_to_asc() to excp_helper.c
  2017-08-17  9:22 [Qemu-devel] [PATCH v1 for-2.11 00/10] target/s390x: cleanup cpu.h David Hildenbrand
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 01/10] target/s390x: move cc_name() to cc_helper.c David Hildenbrand
@ 2017-08-17  9:22 ` David Hildenbrand
  2017-08-17 11:03   ` Thomas Huth
  2017-08-18  3:52   ` Richard Henderson
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 03/10] target/s390x: move psw_key_valid() to mem_helper.c David Hildenbrand
                   ` (9 subsequent siblings)
  11 siblings, 2 replies; 43+ messages in thread
From: David Hildenbrand @ 2017-08-17  9:22 UTC (permalink / raw)
  To: qemu-devel; +Cc: rth, Aurelien Jarno, thuth, cohuck, david, borntraeger

Only used in that file.

Signed-off-by: David Hildenbrand <david@redhat.com>
---
 target/s390x/cpu.h         | 14 --------------
 target/s390x/excp_helper.c | 14 ++++++++++++++
 2 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
index 3e798ef..6567cfa 100644
--- a/target/s390x/cpu.h
+++ b/target/s390x/cpu.h
@@ -393,20 +393,6 @@ static inline int cpu_mmu_index(CPUS390XState *env, bool ifetch)
     }
 }
 
-static inline uint64_t cpu_mmu_idx_to_asc(int mmu_idx)
-{
-    switch (mmu_idx) {
-    case MMU_PRIMARY_IDX:
-        return PSW_ASC_PRIMARY;
-    case MMU_SECONDARY_IDX:
-        return PSW_ASC_SECONDARY;
-    case MMU_HOME_IDX:
-        return PSW_ASC_HOME;
-    default:
-        abort();
-    }
-}
-
 static inline void cpu_get_tb_cpu_state(CPUS390XState* env, target_ulong *pc,
                                         target_ulong *cs_base, uint32_t *flags)
 {
diff --git a/target/s390x/excp_helper.c b/target/s390x/excp_helper.c
index d183377..db86259 100644
--- a/target/s390x/excp_helper.c
+++ b/target/s390x/excp_helper.c
@@ -68,6 +68,20 @@ int s390_cpu_handle_mmu_fault(CPUState *cs, vaddr address,
 
 #else /* !CONFIG_USER_ONLY */
 
+static inline uint64_t cpu_mmu_idx_to_asc(int mmu_idx)
+{
+    switch (mmu_idx) {
+    case MMU_PRIMARY_IDX:
+        return PSW_ASC_PRIMARY;
+    case MMU_SECONDARY_IDX:
+        return PSW_ASC_SECONDARY;
+    case MMU_HOME_IDX:
+        return PSW_ASC_HOME;
+    default:
+        abort();
+    }
+}
+
 int s390_cpu_handle_mmu_fault(CPUState *cs, vaddr orig_vaddr,
                               int rw, int mmu_idx)
 {
-- 
2.9.4

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

* [Qemu-devel] [PATCH v1 for-2.11 03/10] target/s390x: move psw_key_valid() to mem_helper.c
  2017-08-17  9:22 [Qemu-devel] [PATCH v1 for-2.11 00/10] target/s390x: cleanup cpu.h David Hildenbrand
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 01/10] target/s390x: move cc_name() to cc_helper.c David Hildenbrand
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 02/10] target/s390x: move cpu_mmu_idx_to_asc() to excp_helper.c David Hildenbrand
@ 2017-08-17  9:22 ` David Hildenbrand
  2017-08-17 11:04   ` Thomas Huth
  2017-08-18  3:54   ` Richard Henderson
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 04/10] target/s390x: move s390_do_cpu_reset() to diag.c David Hildenbrand
                   ` (8 subsequent siblings)
  11 siblings, 2 replies; 43+ messages in thread
From: David Hildenbrand @ 2017-08-17  9:22 UTC (permalink / raw)
  To: qemu-devel; +Cc: rth, Aurelien Jarno, thuth, cohuck, david, borntraeger

Only used in that file.

Signed-off-by: David Hildenbrand <david@redhat.com>
---
 target/s390x/cpu.h        | 11 -----------
 target/s390x/mem_helper.c | 11 +++++++++++
 2 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
index 6567cfa..42d4ac0 100644
--- a/target/s390x/cpu.h
+++ b/target/s390x/cpu.h
@@ -366,17 +366,6 @@ void s390x_cpu_debug_excp_handler(CPUState *cs);
 #define MMU_SECONDARY_IDX       1
 #define MMU_HOME_IDX            2
 
-static inline bool psw_key_valid(CPUS390XState *env, uint8_t psw_key)
-{
-    uint16_t pkm = env->cregs[3] >> 16;
-
-    if (env->psw.mask & PSW_MASK_PSTATE) {
-        /* PSW key has range 0..15, it is valid if the bit is 1 in the PKM */
-        return pkm & (0x80 >> psw_key);
-    }
-    return true;
-}
-
 static inline int cpu_mmu_index(CPUS390XState *env, bool ifetch)
 {
     switch (env->psw.mask & PSW_MASK_ASC) {
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index c71dce4..b91c740 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -56,6 +56,17 @@ void tlb_fill(CPUState *cs, target_ulong addr, MMUAccessType access_type,
 #define HELPER_LOG(x...)
 #endif
 
+static inline bool psw_key_valid(CPUS390XState *env, uint8_t psw_key)
+{
+    uint16_t pkm = env->cregs[3] >> 16;
+
+    if (env->psw.mask & PSW_MASK_PSTATE) {
+        /* PSW key has range 0..15, it is valid if the bit is 1 in the PKM */
+        return pkm & (0x80 >> psw_key);
+    }
+    return true;
+}
+
 /* Reduce the length so that addr + len doesn't cross a page boundary.  */
 static inline uint32_t adj_len_to_page(uint32_t len, uint64_t addr)
 {
-- 
2.9.4

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

* [Qemu-devel] [PATCH v1 for-2.11 04/10] target/s390x: move s390_do_cpu_reset() to diag.c
  2017-08-17  9:22 [Qemu-devel] [PATCH v1 for-2.11 00/10] target/s390x: cleanup cpu.h David Hildenbrand
                   ` (2 preceding siblings ...)
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 03/10] target/s390x: move psw_key_valid() to mem_helper.c David Hildenbrand
@ 2017-08-17  9:22 ` David Hildenbrand
  2017-08-17 11:05   ` Thomas Huth
  2017-08-18  3:55   ` Richard Henderson
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 05/10] target/s390x: move get_per_in_range() to misc_helper.c David Hildenbrand
                   ` (7 subsequent siblings)
  11 siblings, 2 replies; 43+ messages in thread
From: David Hildenbrand @ 2017-08-17  9:22 UTC (permalink / raw)
  To: qemu-devel; +Cc: rth, Aurelien Jarno, thuth, cohuck, david, borntraeger

Only used in that file. Also drop the comment, not really needed.

Signed-off-by: David Hildenbrand <david@redhat.com>
---
 target/s390x/cpu.h  | 7 -------
 target/s390x/diag.c | 7 +++++++
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
index 42d4ac0..d8bc134 100644
--- a/target/s390x/cpu.h
+++ b/target/s390x/cpu.h
@@ -490,13 +490,6 @@ static inline hwaddr decode_basedisp_s(CPUS390XState *env, uint32_t ipb,
 /* Base/displacement are at the same locations. */
 #define decode_basedisp_rs decode_basedisp_s
 
-/* helper functions for run_on_cpu() */
-static inline void s390_do_cpu_reset(CPUState *cs, run_on_cpu_data arg)
-{
-    S390CPUClass *scc = S390_CPU_GET_CLASS(cs);
-
-    scc->cpu_reset(cs);
-}
 static inline void s390_do_cpu_full_reset(CPUState *cs, run_on_cpu_data arg)
 {
     cpu_reset(cs);
diff --git a/target/s390x/diag.c b/target/s390x/diag.c
index 10ac845..1847cdb 100644
--- a/target/s390x/diag.c
+++ b/target/s390x/diag.c
@@ -39,6 +39,13 @@ static int modified_clear_reset(S390CPU *cpu)
     return 0;
 }
 
+static inline void s390_do_cpu_reset(CPUState *cs, run_on_cpu_data arg)
+{
+    S390CPUClass *scc = S390_CPU_GET_CLASS(cs);
+
+    scc->cpu_reset(cs);
+}
+
 static int load_normal_reset(S390CPU *cpu)
 {
     S390CPUClass *scc = S390_CPU_GET_CLASS(cpu);
-- 
2.9.4

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

* [Qemu-devel] [PATCH v1 for-2.11 05/10] target/s390x: move get_per_in_range() to misc_helper.c
  2017-08-17  9:22 [Qemu-devel] [PATCH v1 for-2.11 00/10] target/s390x: cleanup cpu.h David Hildenbrand
                   ` (3 preceding siblings ...)
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 04/10] target/s390x: move s390_do_cpu_reset() to diag.c David Hildenbrand
@ 2017-08-17  9:22 ` David Hildenbrand
  2017-08-17 11:09   ` Thomas Huth
  2017-08-18  3:56   ` Richard Henderson
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 06/10] target/s390x: introduce internal.h David Hildenbrand
                   ` (6 subsequent siblings)
  11 siblings, 2 replies; 43+ messages in thread
From: David Hildenbrand @ 2017-08-17  9:22 UTC (permalink / raw)
  To: qemu-devel; +Cc: rth, Aurelien Jarno, thuth, cohuck, david, borntraeger

Only used in that file.

Signed-off-by: David Hildenbrand <david@redhat.com>
---
 target/s390x/cpu.h         | 11 -----------
 target/s390x/misc_helper.c | 11 +++++++++++
 2 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
index d8bc134..ca10f0a 100644
--- a/target/s390x/cpu.h
+++ b/target/s390x/cpu.h
@@ -438,17 +438,6 @@ static inline uint8_t get_per_atmid(CPUS390XState *env)
            ((env->psw.mask & PSW_ASC_ACCREG)?    (1 << 2) : 0);
 }
 
-/* Check if an address is within the PER starting address and the PER
-   ending address.  The address range might loop.  */
-static inline bool get_per_in_range(CPUS390XState *env, uint64_t addr)
-{
-    if (env->cregs[10] <= env->cregs[11]) {
-        return env->cregs[10] <= addr && addr <= env->cregs[11];
-    } else {
-        return env->cregs[10] <= addr || addr <= env->cregs[11];
-    }
-}
-
 S390CPU *cpu_s390x_init(const char *cpu_model);
 S390CPU *s390x_new_cpu(const char *cpu_model, int64_t id, Error **errp);
 S390CPU *cpu_s390x_create(const char *cpu_model, Error **errp);
diff --git a/target/s390x/misc_helper.c b/target/s390x/misc_helper.c
index d23ffcd..ab0c53d 100644
--- a/target/s390x/misc_helper.c
+++ b/target/s390x/misc_helper.c
@@ -451,6 +451,17 @@ void HELPER(per_check_exception)(CPUS390XState *env)
     }
 }
 
+/* Check if an address is within the PER starting address and the PER
+   ending address.  The address range might loop.  */
+static inline bool get_per_in_range(CPUS390XState *env, uint64_t addr)
+{
+    if (env->cregs[10] <= env->cregs[11]) {
+        return env->cregs[10] <= addr && addr <= env->cregs[11];
+    } else {
+        return env->cregs[10] <= addr || addr <= env->cregs[11];
+    }
+}
+
 void HELPER(per_branch)(CPUS390XState *env, uint64_t from, uint64_t to)
 {
     if ((env->cregs[9] & PER_CR9_EVENT_BRANCH)) {
-- 
2.9.4

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

* [Qemu-devel] [PATCH v1 for-2.11 06/10] target/s390x: introduce internal.h
  2017-08-17  9:22 [Qemu-devel] [PATCH v1 for-2.11 00/10] target/s390x: cleanup cpu.h David Hildenbrand
                   ` (4 preceding siblings ...)
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 05/10] target/s390x: move get_per_in_range() to misc_helper.c David Hildenbrand
@ 2017-08-17  9:22 ` David Hildenbrand
  2017-08-17 11:59   ` Thomas Huth
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 07/10] target/s390x: move a couple of functions to cpu.c David Hildenbrand
                   ` (5 subsequent siblings)
  11 siblings, 1 reply; 43+ messages in thread
From: David Hildenbrand @ 2017-08-17  9:22 UTC (permalink / raw)
  To: qemu-devel; +Cc: rth, Aurelien Jarno, thuth, cohuck, david, borntraeger

cpu.h should only contain what really has to be accessed outside of
target/s390x/. Add internal.h which can only be used inside target/s390x/.

Move everything that isn't fast enough to run away and restructure it
right away. We'll move all kvm_* stuff later.

Minor style fixes to avoid checkpatch warning to:
- struct Lowcore: "{" goes into same line as typedef
- struct LowCore: add spaces around "-" in array length calculations
- time2tod() and tod2time(): move "{" to separate line
- get_per_atmid(): add space between ")" and "?". Move cases by one char.
- get_per_atmid(): drop extra paremthesis around (1 << 6)

Change license of new file to GPL2+ and keep copyright notice.

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: David Hildenbrand <david@redhat.com>
---
 target/s390x/arch_dump.c   |   1 +
 target/s390x/cc_helper.c   |   1 +
 target/s390x/cpu.c         |   1 +
 target/s390x/cpu.h         | 343 ---------------------------------------
 target/s390x/cpu_models.c  |   1 +
 target/s390x/diag.c        |   1 +
 target/s390x/excp_helper.c |   1 +
 target/s390x/fpu_helper.c  |   1 +
 target/s390x/gdbstub.c     |   1 +
 target/s390x/helper.c      |   1 +
 target/s390x/int_helper.c  |   1 +
 target/s390x/internal.h    | 391 +++++++++++++++++++++++++++++++++++++++++++++
 target/s390x/interrupt.c   |   1 +
 target/s390x/ioinst.c      |   1 +
 target/s390x/kvm.c         |   1 +
 target/s390x/machine.c     |   1 +
 target/s390x/mem_helper.c  |   1 +
 target/s390x/misc_helper.c |   1 +
 target/s390x/mmu_helper.c  |   1 +
 target/s390x/translate.c   |   1 +
 20 files changed, 409 insertions(+), 343 deletions(-)
 create mode 100644 target/s390x/internal.h

diff --git a/target/s390x/arch_dump.c b/target/s390x/arch_dump.c
index 96c9fb9..a6a61ee 100644
--- a/target/s390x/arch_dump.c
+++ b/target/s390x/arch_dump.c
@@ -13,6 +13,7 @@
 
 #include "qemu/osdep.h"
 #include "cpu.h"
+#include "internal.h"
 #include "elf.h"
 #include "exec/cpu-all.h"
 #include "sysemu/dump.h"
diff --git a/target/s390x/cc_helper.c b/target/s390x/cc_helper.c
index a4562e5..9e23aa6 100644
--- a/target/s390x/cc_helper.c
+++ b/target/s390x/cc_helper.c
@@ -20,6 +20,7 @@
 
 #include "qemu/osdep.h"
 #include "cpu.h"
+#include "internal.h"
 #include "exec/exec-all.h"
 #include "exec/helper-proto.h"
 #include "qemu/host-utils.h"
diff --git a/target/s390x/cpu.c b/target/s390x/cpu.c
index 489bc25..dadd383 100644
--- a/target/s390x/cpu.c
+++ b/target/s390x/cpu.c
@@ -26,6 +26,7 @@
 #include "qemu/osdep.h"
 #include "qapi/error.h"
 #include "cpu.h"
+#include "internal.h"
 #include "qemu-common.h"
 #include "qemu/cutils.h"
 #include "qemu/timer.h"
diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
index ca10f0a..1f20934 100644
--- a/target/s390x/cpu.h
+++ b/target/s390x/cpu.h
@@ -213,20 +213,6 @@ static inline S390CPU *s390_env_get_cpu(CPUS390XState *env)
 extern const struct VMStateDescription vmstate_s390_cpu;
 #endif
 
-void s390_cpu_do_interrupt(CPUState *cpu);
-bool s390_cpu_exec_interrupt(CPUState *cpu, int int_req);
-void s390_cpu_dump_state(CPUState *cpu, FILE *f, fprintf_function cpu_fprintf,
-                         int flags);
-int s390_cpu_write_elf64_note(WriteCoreDumpFunction f, CPUState *cs,
-                              int cpuid, void *opaque);
-
-hwaddr s390_cpu_get_phys_page_debug(CPUState *cpu, vaddr addr);
-hwaddr s390_cpu_get_phys_addr_debug(CPUState *cpu, vaddr addr);
-int s390_cpu_gdb_read_register(CPUState *cpu, uint8_t *buf, int reg);
-int s390_cpu_gdb_write_register(CPUState *cpu, uint8_t *buf, int reg);
-void s390_cpu_gdb_init(CPUState *cs);
-void s390x_cpu_debug_excp_handler(CPUState *cs);
-
 #include "sysemu/kvm.h"
 
 /* distinguish between 24 bit and 31 bit addressing */
@@ -390,26 +376,6 @@ static inline void cpu_get_tb_cpu_state(CPUS390XState* env, target_ulong *pc,
     *flags = (env->psw.mask >> FLAG_MASK_PSW_SHIFT) & FLAG_MASK_PSW;
 }
 
-#define MAX_ILEN 6
-
-/* While the PoO talks about ILC (a number between 1-3) what is actually
-   stored in LowCore is shifted left one bit (an even between 2-6).  As
-   this is the actual length of the insn and therefore more useful, that
-   is what we want to pass around and manipulate.  To make sure that we
-   have applied this distinction universally, rename the "ILC" to "ILEN".  */
-static inline int get_ilen(uint8_t opc)
-{
-    switch (opc >> 6) {
-    case 0:
-        return 2;
-    case 1:
-    case 2:
-        return 4;
-    default:
-        return 6;
-    }
-}
-
 /* PER bits from control register 9 */
 #define PER_CR9_EVENT_BRANCH           0x80000000
 #define PER_CR9_EVENT_IFETCH           0x40000000
@@ -426,66 +392,17 @@ static inline int get_ilen(uint8_t opc)
 #define PER_CODE_EVENT_STORE_REAL      0x0800
 #define PER_CODE_EVENT_NULLIFICATION   0x0100
 
-/* Compute the ATMID field that is stored in the per_perc_atmid lowcore
-   entry when a PER exception is triggered.  */
-static inline uint8_t get_per_atmid(CPUS390XState *env)
-{
-    return ((env->psw.mask & PSW_MASK_64) ?      (1 << 7) : 0) |
-           (                                     (1 << 6)    ) |
-           ((env->psw.mask & PSW_MASK_32) ?      (1 << 5) : 0) |
-           ((env->psw.mask & PSW_MASK_DAT)?      (1 << 4) : 0) |
-           ((env->psw.mask & PSW_ASC_SECONDARY)? (1 << 3) : 0) |
-           ((env->psw.mask & PSW_ASC_ACCREG)?    (1 << 2) : 0);
-}
-
 S390CPU *cpu_s390x_init(const char *cpu_model);
 S390CPU *s390x_new_cpu(const char *cpu_model, int64_t id, Error **errp);
-S390CPU *cpu_s390x_create(const char *cpu_model, Error **errp);
-void s390x_translate_init(void);
 
 /* you can call this signal handler from your SIGBUS and SIGSEGV
    signal handlers to inform the virtual CPU of exceptions. non zero
    is returned if the signal was handled by the virtual CPU.  */
 int cpu_s390x_signal_handler(int host_signum, void *pinfo,
                            void *puc);
-int s390_cpu_handle_mmu_fault(CPUState *cpu, vaddr address, int rw,
-                              int mmu_idx);
 
 
 #ifndef CONFIG_USER_ONLY
-void do_restart_interrupt(CPUS390XState *env);
-void s390x_cpu_do_unaligned_access(CPUState *cs, vaddr addr,
-                                   MMUAccessType access_type,
-                                   int mmu_idx, uintptr_t retaddr);
-
-static inline hwaddr decode_basedisp_s(CPUS390XState *env, uint32_t ipb,
-                                       uint8_t *ar)
-{
-    hwaddr addr = 0;
-    uint8_t reg;
-
-    reg = ipb >> 28;
-    if (reg > 0) {
-        addr = env->regs[reg];
-    }
-    addr += (ipb >> 16) & 0xfff;
-    if (ar) {
-        *ar = reg;
-    }
-
-    return addr;
-}
-
-/* Base/displacement are at the same locations. */
-#define decode_basedisp_rs decode_basedisp_s
-
-static inline void s390_do_cpu_full_reset(CPUState *cs, run_on_cpu_data arg)
-{
-    cpu_reset(cs);
-}
-
-void s390x_tod_timer(void *opaque);
-void s390x_cpu_timer(void *opaque);
 
 int s390_virtio_hypercall(CPUS390XState *env);
 
@@ -543,50 +460,15 @@ static inline int s390_set_clock(uint8_t *tod_high, uint64_t *tod_low)
 }
 
 S390CPU *s390_cpu_addr2state(uint16_t cpu_addr);
-unsigned int s390_cpu_halt(S390CPU *cpu);
-void s390_cpu_unhalt(S390CPU *cpu);
 unsigned int s390_cpu_set_state(uint8_t cpu_state, S390CPU *cpu);
-static inline uint8_t s390_cpu_get_state(S390CPU *cpu)
-{
-    return cpu->env.cpu_state;
-}
 
 void gtod_save(QEMUFile *f, void *opaque);
 int gtod_load(QEMUFile *f, void *opaque, int version_id);
 
-void cpu_inject_ext(S390CPU *cpu, uint32_t code, uint32_t param,
-                    uint64_t param64);
-
-/* ioinst.c */
-void ioinst_handle_xsch(S390CPU *cpu, uint64_t reg1);
-void ioinst_handle_csch(S390CPU *cpu, uint64_t reg1);
-void ioinst_handle_hsch(S390CPU *cpu, uint64_t reg1);
-void ioinst_handle_msch(S390CPU *cpu, uint64_t reg1, uint32_t ipb);
-void ioinst_handle_ssch(S390CPU *cpu, uint64_t reg1, uint32_t ipb);
-void ioinst_handle_stcrw(S390CPU *cpu, uint32_t ipb);
-void ioinst_handle_stsch(S390CPU *cpu, uint64_t reg1, uint32_t ipb);
-int ioinst_handle_tsch(S390CPU *cpu, uint64_t reg1, uint32_t ipb);
-void ioinst_handle_chsc(S390CPU *cpu, uint32_t ipb);
-int ioinst_handle_tpi(S390CPU *cpu, uint32_t ipb);
-void ioinst_handle_schm(S390CPU *cpu, uint64_t reg1, uint64_t reg2,
-                        uint32_t ipb);
-void ioinst_handle_rsch(S390CPU *cpu, uint64_t reg1);
-void ioinst_handle_rchp(S390CPU *cpu, uint64_t reg1);
-void ioinst_handle_sal(S390CPU *cpu, uint64_t reg1);
-
 /* service interrupts are floating therefore we must not pass an cpustate */
 void s390_sclp_extint(uint32_t parm);
 
 #else
-static inline unsigned int s390_cpu_halt(S390CPU *cpu)
-{
-    return 0;
-}
-
-static inline void s390_cpu_unhalt(S390CPU *cpu)
-{
-}
-
 static inline unsigned int s390_cpu_set_state(uint8_t cpu_state, S390CPU *cpu)
 {
     return 0;
@@ -600,10 +482,6 @@ extern void subsystem_reset(void);
 
 void s390_cpu_list(FILE *f, fprintf_function cpu_fprintf);
 #define cpu_list s390_cpu_list
-void s390_cpu_model_register_props(Object *obj);
-void s390_cpu_model_class_register_props(ObjectClass *oc);
-void s390_realize_cpu_model(CPUState *cs, Error **errp);
-ObjectClass *s390_cpu_class_by_name(const char *name);
 
 #define EXCP_EXT 1 /* external interrupt */
 #define EXCP_SVC 2 /* supervisor call (syscall) */
@@ -640,69 +518,6 @@ ObjectClass *s390_cpu_class_by_name(const char *name);
 /* Total Core Registers. */
 #define S390_NUM_CORE_REGS 18
 
-/* CC optimization */
-
-/* Instead of computing the condition codes after each x86 instruction,
- * QEMU just stores the result (called CC_DST), the type of operation
- * (called CC_OP) and whatever operands are needed (CC_SRC and possibly
- * CC_VR). When the condition codes are needed, the condition codes can
- * be calculated using this information. Condition codes are not generated
- * if they are only needed for conditional branches.
- */
-enum cc_op {
-    CC_OP_CONST0 = 0,           /* CC is 0 */
-    CC_OP_CONST1,               /* CC is 1 */
-    CC_OP_CONST2,               /* CC is 2 */
-    CC_OP_CONST3,               /* CC is 3 */
-
-    CC_OP_DYNAMIC,              /* CC calculation defined by env->cc_op */
-    CC_OP_STATIC,               /* CC value is env->cc_op */
-
-    CC_OP_NZ,                   /* env->cc_dst != 0 */
-    CC_OP_LTGT_32,              /* signed less/greater than (32bit) */
-    CC_OP_LTGT_64,              /* signed less/greater than (64bit) */
-    CC_OP_LTUGTU_32,            /* unsigned less/greater than (32bit) */
-    CC_OP_LTUGTU_64,            /* unsigned less/greater than (64bit) */
-    CC_OP_LTGT0_32,             /* signed less/greater than 0 (32bit) */
-    CC_OP_LTGT0_64,             /* signed less/greater than 0 (64bit) */
-
-    CC_OP_ADD_64,               /* overflow on add (64bit) */
-    CC_OP_ADDU_64,              /* overflow on unsigned add (64bit) */
-    CC_OP_ADDC_64,              /* overflow on unsigned add-carry (64bit) */
-    CC_OP_SUB_64,               /* overflow on subtraction (64bit) */
-    CC_OP_SUBU_64,              /* overflow on unsigned subtraction (64bit) */
-    CC_OP_SUBB_64,              /* overflow on unsigned sub-borrow (64bit) */
-    CC_OP_ABS_64,               /* sign eval on abs (64bit) */
-    CC_OP_NABS_64,              /* sign eval on nabs (64bit) */
-
-    CC_OP_ADD_32,               /* overflow on add (32bit) */
-    CC_OP_ADDU_32,              /* overflow on unsigned add (32bit) */
-    CC_OP_ADDC_32,              /* overflow on unsigned add-carry (32bit) */
-    CC_OP_SUB_32,               /* overflow on subtraction (32bit) */
-    CC_OP_SUBU_32,              /* overflow on unsigned subtraction (32bit) */
-    CC_OP_SUBB_32,              /* overflow on unsigned sub-borrow (32bit) */
-    CC_OP_ABS_32,               /* sign eval on abs (64bit) */
-    CC_OP_NABS_32,              /* sign eval on nabs (64bit) */
-
-    CC_OP_COMP_32,              /* complement */
-    CC_OP_COMP_64,              /* complement */
-
-    CC_OP_TM_32,                /* test under mask (32bit) */
-    CC_OP_TM_64,                /* test under mask (64bit) */
-
-    CC_OP_NZ_F32,               /* FP dst != 0 (32bit) */
-    CC_OP_NZ_F64,               /* FP dst != 0 (64bit) */
-    CC_OP_NZ_F128,              /* FP dst != 0 (128bit) */
-
-    CC_OP_ICM,                  /* insert characters under mask */
-    CC_OP_SLA_32,               /* Calculate shift left signed (32bit) */
-    CC_OP_SLA_64,               /* Calculate shift left signed (64bit) */
-    CC_OP_FLOGR,                /* find leftmost one */
-    CC_OP_MAX
-};
-
-const char *cc_name(int cc_op);
-
 static inline void setcc(S390CPU *cpu, uint64_t cc)
 {
     CPUS390XState *env = &cpu->env;
@@ -712,130 +527,6 @@ static inline void setcc(S390CPU *cpu, uint64_t cc)
     env->cc_op = cc;
 }
 
-#ifndef CONFIG_USER_ONLY
-
-typedef struct LowCore
-{
-    /* prefix area: defined by architecture */
-    uint32_t        ccw1[2];                  /* 0x000 */
-    uint32_t        ccw2[4];                  /* 0x008 */
-    uint8_t         pad1[0x80-0x18];          /* 0x018 */
-    uint32_t        ext_params;               /* 0x080 */
-    uint16_t        cpu_addr;                 /* 0x084 */
-    uint16_t        ext_int_code;             /* 0x086 */
-    uint16_t        svc_ilen;                 /* 0x088 */
-    uint16_t        svc_code;                 /* 0x08a */
-    uint16_t        pgm_ilen;                 /* 0x08c */
-    uint16_t        pgm_code;                 /* 0x08e */
-    uint32_t        data_exc_code;            /* 0x090 */
-    uint16_t        mon_class_num;            /* 0x094 */
-    uint16_t        per_perc_atmid;           /* 0x096 */
-    uint64_t        per_address;              /* 0x098 */
-    uint8_t         exc_access_id;            /* 0x0a0 */
-    uint8_t         per_access_id;            /* 0x0a1 */
-    uint8_t         op_access_id;             /* 0x0a2 */
-    uint8_t         ar_access_id;             /* 0x0a3 */
-    uint8_t         pad2[0xA8-0xA4];          /* 0x0a4 */
-    uint64_t        trans_exc_code;           /* 0x0a8 */
-    uint64_t        monitor_code;             /* 0x0b0 */
-    uint16_t        subchannel_id;            /* 0x0b8 */
-    uint16_t        subchannel_nr;            /* 0x0ba */
-    uint32_t        io_int_parm;              /* 0x0bc */
-    uint32_t        io_int_word;              /* 0x0c0 */
-    uint8_t         pad3[0xc8-0xc4];          /* 0x0c4 */
-    uint32_t        stfl_fac_list;            /* 0x0c8 */
-    uint8_t         pad4[0xe8-0xcc];          /* 0x0cc */
-    uint32_t        mcck_interruption_code[2]; /* 0x0e8 */
-    uint8_t         pad5[0xf4-0xf0];          /* 0x0f0 */
-    uint32_t        external_damage_code;     /* 0x0f4 */
-    uint64_t        failing_storage_address;  /* 0x0f8 */
-    uint8_t         pad6[0x110-0x100];        /* 0x100 */
-    uint64_t        per_breaking_event_addr;  /* 0x110 */
-    uint8_t         pad7[0x120-0x118];        /* 0x118 */
-    PSW             restart_old_psw;          /* 0x120 */
-    PSW             external_old_psw;         /* 0x130 */
-    PSW             svc_old_psw;              /* 0x140 */
-    PSW             program_old_psw;          /* 0x150 */
-    PSW             mcck_old_psw;             /* 0x160 */
-    PSW             io_old_psw;               /* 0x170 */
-    uint8_t         pad8[0x1a0-0x180];        /* 0x180 */
-    PSW             restart_new_psw;          /* 0x1a0 */
-    PSW             external_new_psw;         /* 0x1b0 */
-    PSW             svc_new_psw;              /* 0x1c0 */
-    PSW             program_new_psw;          /* 0x1d0 */
-    PSW             mcck_new_psw;             /* 0x1e0 */
-    PSW             io_new_psw;               /* 0x1f0 */
-    PSW             return_psw;               /* 0x200 */
-    uint8_t         irb[64];                  /* 0x210 */
-    uint64_t        sync_enter_timer;         /* 0x250 */
-    uint64_t        async_enter_timer;        /* 0x258 */
-    uint64_t        exit_timer;               /* 0x260 */
-    uint64_t        last_update_timer;        /* 0x268 */
-    uint64_t        user_timer;               /* 0x270 */
-    uint64_t        system_timer;             /* 0x278 */
-    uint64_t        last_update_clock;        /* 0x280 */
-    uint64_t        steal_clock;              /* 0x288 */
-    PSW             return_mcck_psw;          /* 0x290 */
-    uint8_t         pad9[0xc00-0x2a0];        /* 0x2a0 */
-    /* System info area */
-    uint64_t        save_area[16];            /* 0xc00 */
-    uint8_t         pad10[0xd40-0xc80];       /* 0xc80 */
-    uint64_t        kernel_stack;             /* 0xd40 */
-    uint64_t        thread_info;              /* 0xd48 */
-    uint64_t        async_stack;              /* 0xd50 */
-    uint64_t        kernel_asce;              /* 0xd58 */
-    uint64_t        user_asce;                /* 0xd60 */
-    uint64_t        panic_stack;              /* 0xd68 */
-    uint64_t        user_exec_asce;           /* 0xd70 */
-    uint8_t         pad11[0xdc0-0xd78];       /* 0xd78 */
-
-    /* SMP info area: defined by DJB */
-    uint64_t        clock_comparator;         /* 0xdc0 */
-    uint64_t        ext_call_fast;            /* 0xdc8 */
-    uint64_t        percpu_offset;            /* 0xdd0 */
-    uint64_t        current_task;             /* 0xdd8 */
-    uint32_t        softirq_pending;          /* 0xde0 */
-    uint32_t        pad_0x0de4;               /* 0xde4 */
-    uint64_t        int_clock;                /* 0xde8 */
-    uint8_t         pad12[0xe00-0xdf0];       /* 0xdf0 */
-
-    /* 0xe00 is used as indicator for dump tools */
-    /* whether the kernel died with panic() or not */
-    uint32_t        panic_magic;              /* 0xe00 */
-
-    uint8_t         pad13[0x11b8-0xe04];      /* 0xe04 */
-
-    /* 64 bit extparam used for pfault, diag 250 etc  */
-    uint64_t        ext_params2;               /* 0x11B8 */
-
-    uint8_t         pad14[0x1200-0x11C0];      /* 0x11C0 */
-
-    /* System info area */
-
-    uint64_t        floating_pt_save_area[16]; /* 0x1200 */
-    uint64_t        gpregs_save_area[16];      /* 0x1280 */
-    uint32_t        st_status_fixed_logout[4]; /* 0x1300 */
-    uint8_t         pad15[0x1318-0x1310];      /* 0x1310 */
-    uint32_t        prefixreg_save_area;       /* 0x1318 */
-    uint32_t        fpt_creg_save_area;        /* 0x131c */
-    uint8_t         pad16[0x1324-0x1320];      /* 0x1320 */
-    uint32_t        tod_progreg_save_area;     /* 0x1324 */
-    uint32_t        cpu_timer_save_area[2];    /* 0x1328 */
-    uint32_t        clock_comp_save_area[2];   /* 0x1330 */
-    uint8_t         pad17[0x1340-0x1338];      /* 0x1338 */
-    uint32_t        access_regs_save_area[16]; /* 0x1340 */
-    uint64_t        cregs_save_area[16];       /* 0x1380 */
-
-    /* align to the top of the prefix area */
-
-    uint8_t         pad18[0x2000-0x1400];      /* 0x1400 */
-} QEMU_PACKED LowCore;
-
-LowCore *cpu_map_lowcore(CPUS390XState *env);
-void cpu_unmap_lowcore(LowCore *lowcore);
-
-#endif
-
 /* STSI */
 #define STSI_LEVEL_MASK         0x00000000f0000000ULL
 #define STSI_LEVEL_CURRENT      0x0000000000000000ULL
@@ -1011,15 +702,7 @@ struct sysib_322 {
 /* SIGP order code mask corresponding to bit positions 56-63 */
 #define SIGP_ORDER_MASK 0x000000ff
 
-void load_psw(CPUS390XState *env, uint64_t mask, uint64_t addr);
-uint64_t get_psw_mask(CPUS390XState *env);
-target_ulong mmu_real2abs(CPUS390XState *env, target_ulong raddr);
-int mmu_translate(CPUS390XState *env, target_ulong vaddr, int rw, uint64_t asc,
-                  target_ulong *raddr, int *flags, bool exc);
 int sclp_service_call(CPUS390XState *env, uint64_t sccb, uint32_t code);
-uint32_t calc_cc(CPUS390XState *env, uint32_t cc_op, uint64_t src, uint64_t dst,
-                 uint64_t vr);
-void s390_cpu_recompute_watchpoints(CPUState *cs);
 
 int s390_cpu_virt_mem_rw(S390CPU *cpu, vaddr laddr, uint8_t ar, void *hostbuf,
                          int len, bool is_write);
@@ -1031,39 +714,13 @@ int s390_cpu_virt_mem_rw(S390CPU *cpu, vaddr laddr, uint8_t ar, void *hostbuf,
 #define s390_cpu_virt_mem_check_write(cpu, laddr, ar, len)   \
         s390_cpu_virt_mem_rw(cpu, laddr, ar, NULL, len, true)
 
-/* The value of the TOD clock for 1.1.1970. */
-#define TOD_UNIX_EPOCH 0x7d91048bca000000ULL
-
-/* Converts ns to s390's clock format */
-static inline uint64_t time2tod(uint64_t ns) {
-    return (ns << 9) / 125;
-}
-
-/* Converts s390's clock format to ns */
-static inline uint64_t tod2time(uint64_t t) {
-    return (t * 125) >> 9;
-}
-
 /* from s390-virtio-ccw */
 #define MEM_SECTION_SIZE             0x10000000UL
 #define MAX_AVAIL_SLOTS              32
 
-/* fpu_helper.c */
-uint32_t set_cc_nz_f32(float32 v);
-uint32_t set_cc_nz_f64(float64 v);
-uint32_t set_cc_nz_f128(float128 v);
-
-/* misc_helper.c */
-#ifndef CONFIG_USER_ONLY
-int handle_diag_288(CPUS390XState *env, uint64_t r1, uint64_t r3);
-void handle_diag_308(CPUS390XState *env, uint64_t r1, uint64_t r3);
-#endif
 /* automatically detect the instruction length */
 #define ILEN_AUTO                   0xff
 void program_interrupt(CPUS390XState *env, uint32_t code, int ilen);
-void trigger_pgm_exception(CPUS390XState *env, uint32_t code, uint32_t ilen);
-void QEMU_NORETURN runtime_exception(CPUS390XState *env, int excp,
-                                     uintptr_t retaddr);
 
 #ifdef CONFIG_KVM
 void kvm_s390_program_interrupt(S390CPU *cpu, uint16_t code);
diff --git a/target/s390x/cpu_models.c b/target/s390x/cpu_models.c
index fa1338f..798699e 100644
--- a/target/s390x/cpu_models.c
+++ b/target/s390x/cpu_models.c
@@ -12,6 +12,7 @@
 
 #include "qemu/osdep.h"
 #include "cpu.h"
+#include "internal.h"
 #include "gen-features.h"
 #include "qapi/error.h"
 #include "qapi/visitor.h"
diff --git a/target/s390x/diag.c b/target/s390x/diag.c
index 1847cdb..e6b5e6d 100644
--- a/target/s390x/diag.c
+++ b/target/s390x/diag.c
@@ -14,6 +14,7 @@
 
 #include "qemu/osdep.h"
 #include "cpu.h"
+#include "internal.h"
 #include "exec/address-spaces.h"
 #include "exec/exec-all.h"
 #include "hw/watchdog/wdt_diag288.h"
diff --git a/target/s390x/excp_helper.c b/target/s390x/excp_helper.c
index db86259..361f970 100644
--- a/target/s390x/excp_helper.c
+++ b/target/s390x/excp_helper.c
@@ -21,6 +21,7 @@
 #include "qemu/osdep.h"
 #include "qapi/error.h"
 #include "cpu.h"
+#include "internal.h"
 #include "qemu/timer.h"
 #include "exec/exec-all.h"
 #include "exec/cpu_ldst.h"
diff --git a/target/s390x/fpu_helper.c b/target/s390x/fpu_helper.c
index 26f124f..ffbeb3b 100644
--- a/target/s390x/fpu_helper.c
+++ b/target/s390x/fpu_helper.c
@@ -20,6 +20,7 @@
 
 #include "qemu/osdep.h"
 #include "cpu.h"
+#include "internal.h"
 #include "exec/exec-all.h"
 #include "exec/cpu_ldst.h"
 #include "exec/helper-proto.h"
diff --git a/target/s390x/gdbstub.c b/target/s390x/gdbstub.c
index a7efafe..b8c81da 100644
--- a/target/s390x/gdbstub.c
+++ b/target/s390x/gdbstub.c
@@ -20,6 +20,7 @@
 #include "qemu/osdep.h"
 #include "qemu-common.h"
 #include "cpu.h"
+#include "internal.h"
 #include "exec/exec-all.h"
 #include "exec/gdbstub.h"
 #include "qemu/bitops.h"
diff --git a/target/s390x/helper.c b/target/s390x/helper.c
index 0c989b1..601fb2c 100644
--- a/target/s390x/helper.c
+++ b/target/s390x/helper.c
@@ -21,6 +21,7 @@
 #include "qemu/osdep.h"
 #include "qapi/error.h"
 #include "cpu.h"
+#include "internal.h"
 #include "exec/gdbstub.h"
 #include "qemu/timer.h"
 #include "exec/exec-all.h"
diff --git a/target/s390x/int_helper.c b/target/s390x/int_helper.c
index f26f36a..0076bea 100644
--- a/target/s390x/int_helper.c
+++ b/target/s390x/int_helper.c
@@ -20,6 +20,7 @@
 
 #include "qemu/osdep.h"
 #include "cpu.h"
+#include "internal.h"
 #include "exec/exec-all.h"
 #include "qemu/host-utils.h"
 #include "exec/helper-proto.h"
diff --git a/target/s390x/internal.h b/target/s390x/internal.h
new file mode 100644
index 0000000..dbb8769
--- /dev/null
+++ b/target/s390x/internal.h
@@ -0,0 +1,391 @@
+/*
+ * s390x internal definitions and helpers
+ *
+ * Copyright (c) 2009 Ulrich Hecht
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ */
+
+#ifndef S390X_INTERNAL_H
+#define S390X_INTERNAL_H
+
+#include "cpu.h"
+
+#ifndef CONFIG_USER_ONLY
+typedef struct LowCore {
+    /* prefix area: defined by architecture */
+    uint32_t        ccw1[2];                  /* 0x000 */
+    uint32_t        ccw2[4];                  /* 0x008 */
+    uint8_t         pad1[0x80 - 0x18];        /* 0x018 */
+    uint32_t        ext_params;               /* 0x080 */
+    uint16_t        cpu_addr;                 /* 0x084 */
+    uint16_t        ext_int_code;             /* 0x086 */
+    uint16_t        svc_ilen;                 /* 0x088 */
+    uint16_t        svc_code;                 /* 0x08a */
+    uint16_t        pgm_ilen;                 /* 0x08c */
+    uint16_t        pgm_code;                 /* 0x08e */
+    uint32_t        data_exc_code;            /* 0x090 */
+    uint16_t        mon_class_num;            /* 0x094 */
+    uint16_t        per_perc_atmid;           /* 0x096 */
+    uint64_t        per_address;              /* 0x098 */
+    uint8_t         exc_access_id;            /* 0x0a0 */
+    uint8_t         per_access_id;            /* 0x0a1 */
+    uint8_t         op_access_id;             /* 0x0a2 */
+    uint8_t         ar_access_id;             /* 0x0a3 */
+    uint8_t         pad2[0xA8 - 0xA4];        /* 0x0a4 */
+    uint64_t        trans_exc_code;           /* 0x0a8 */
+    uint64_t        monitor_code;             /* 0x0b0 */
+    uint16_t        subchannel_id;            /* 0x0b8 */
+    uint16_t        subchannel_nr;            /* 0x0ba */
+    uint32_t        io_int_parm;              /* 0x0bc */
+    uint32_t        io_int_word;              /* 0x0c0 */
+    uint8_t         pad3[0xc8 - 0xc4];        /* 0x0c4 */
+    uint32_t        stfl_fac_list;            /* 0x0c8 */
+    uint8_t         pad4[0xe8 - 0xcc];        /* 0x0cc */
+    uint32_t        mcck_interruption_code[2]; /* 0x0e8 */
+    uint8_t         pad5[0xf4 - 0xf0];        /* 0x0f0 */
+    uint32_t        external_damage_code;     /* 0x0f4 */
+    uint64_t        failing_storage_address;  /* 0x0f8 */
+    uint8_t         pad6[0x110 - 0x100];      /* 0x100 */
+    uint64_t        per_breaking_event_addr;  /* 0x110 */
+    uint8_t         pad7[0x120 - 0x118];      /* 0x118 */
+    PSW             restart_old_psw;          /* 0x120 */
+    PSW             external_old_psw;         /* 0x130 */
+    PSW             svc_old_psw;              /* 0x140 */
+    PSW             program_old_psw;          /* 0x150 */
+    PSW             mcck_old_psw;             /* 0x160 */
+    PSW             io_old_psw;               /* 0x170 */
+    uint8_t         pad8[0x1a0 - 0x180];      /* 0x180 */
+    PSW             restart_new_psw;          /* 0x1a0 */
+    PSW             external_new_psw;         /* 0x1b0 */
+    PSW             svc_new_psw;              /* 0x1c0 */
+    PSW             program_new_psw;          /* 0x1d0 */
+    PSW             mcck_new_psw;             /* 0x1e0 */
+    PSW             io_new_psw;               /* 0x1f0 */
+    PSW             return_psw;               /* 0x200 */
+    uint8_t         irb[64];                  /* 0x210 */
+    uint64_t        sync_enter_timer;         /* 0x250 */
+    uint64_t        async_enter_timer;        /* 0x258 */
+    uint64_t        exit_timer;               /* 0x260 */
+    uint64_t        last_update_timer;        /* 0x268 */
+    uint64_t        user_timer;               /* 0x270 */
+    uint64_t        system_timer;             /* 0x278 */
+    uint64_t        last_update_clock;        /* 0x280 */
+    uint64_t        steal_clock;              /* 0x288 */
+    PSW             return_mcck_psw;          /* 0x290 */
+    uint8_t         pad9[0xc00 - 0x2a0];      /* 0x2a0 */
+    /* System info area */
+    uint64_t        save_area[16];            /* 0xc00 */
+    uint8_t         pad10[0xd40 - 0xc80];     /* 0xc80 */
+    uint64_t        kernel_stack;             /* 0xd40 */
+    uint64_t        thread_info;              /* 0xd48 */
+    uint64_t        async_stack;              /* 0xd50 */
+    uint64_t        kernel_asce;              /* 0xd58 */
+    uint64_t        user_asce;                /* 0xd60 */
+    uint64_t        panic_stack;              /* 0xd68 */
+    uint64_t        user_exec_asce;           /* 0xd70 */
+    uint8_t         pad11[0xdc0 - 0xd78];     /* 0xd78 */
+
+    /* SMP info area: defined by DJB */
+    uint64_t        clock_comparator;         /* 0xdc0 */
+    uint64_t        ext_call_fast;            /* 0xdc8 */
+    uint64_t        percpu_offset;            /* 0xdd0 */
+    uint64_t        current_task;             /* 0xdd8 */
+    uint32_t        softirq_pending;          /* 0xde0 */
+    uint32_t        pad_0x0de4;               /* 0xde4 */
+    uint64_t        int_clock;                /* 0xde8 */
+    uint8_t         pad12[0xe00 - 0xdf0];     /* 0xdf0 */
+
+    /* 0xe00 is used as indicator for dump tools */
+    /* whether the kernel died with panic() or not */
+    uint32_t        panic_magic;              /* 0xe00 */
+
+    uint8_t         pad13[0x11b8 - 0xe04];    /* 0xe04 */
+
+    /* 64 bit extparam used for pfault, diag 250 etc  */
+    uint64_t        ext_params2;               /* 0x11B8 */
+
+    uint8_t         pad14[0x1200 - 0x11C0];    /* 0x11C0 */
+
+    /* System info area */
+
+    uint64_t        floating_pt_save_area[16]; /* 0x1200 */
+    uint64_t        gpregs_save_area[16];      /* 0x1280 */
+    uint32_t        st_status_fixed_logout[4]; /* 0x1300 */
+    uint8_t         pad15[0x1318 - 0x1310];    /* 0x1310 */
+    uint32_t        prefixreg_save_area;       /* 0x1318 */
+    uint32_t        fpt_creg_save_area;        /* 0x131c */
+    uint8_t         pad16[0x1324 - 0x1320];    /* 0x1320 */
+    uint32_t        tod_progreg_save_area;     /* 0x1324 */
+    uint32_t        cpu_timer_save_area[2];    /* 0x1328 */
+    uint32_t        clock_comp_save_area[2];   /* 0x1330 */
+    uint8_t         pad17[0x1340 - 0x1338];    /* 0x1338 */
+    uint32_t        access_regs_save_area[16]; /* 0x1340 */
+    uint64_t        cregs_save_area[16];       /* 0x1380 */
+
+    /* align to the top of the prefix area */
+
+    uint8_t         pad18[0x2000 - 0x1400];    /* 0x1400 */
+} QEMU_PACKED LowCore;
+#endif /* CONFIG_USER_ONLY */
+
+#define MAX_ILEN 6
+
+/* While the PoO talks about ILC (a number between 1-3) what is actually
+   stored in LowCore is shifted left one bit (an even between 2-6).  As
+   this is the actual length of the insn and therefore more useful, that
+   is what we want to pass around and manipulate.  To make sure that we
+   have applied this distinction universally, rename the "ILC" to "ILEN".  */
+static inline int get_ilen(uint8_t opc)
+{
+    switch (opc >> 6) {
+    case 0:
+        return 2;
+    case 1:
+    case 2:
+        return 4;
+    default:
+        return 6;
+    }
+}
+
+/* Compute the ATMID field that is stored in the per_perc_atmid lowcore
+   entry when a PER exception is triggered.  */
+static inline uint8_t get_per_atmid(CPUS390XState *env)
+{
+    return ((env->psw.mask & PSW_MASK_64) ?       (1 << 7) : 0) |
+                                                  (1 << 6)      |
+           ((env->psw.mask & PSW_MASK_32) ?       (1 << 5) : 0) |
+           ((env->psw.mask & PSW_MASK_DAT) ?      (1 << 4) : 0) |
+           ((env->psw.mask & PSW_ASC_SECONDARY) ? (1 << 3) : 0) |
+           ((env->psw.mask & PSW_ASC_ACCREG) ?    (1 << 2) : 0);
+}
+
+/* CC optimization */
+
+/* Instead of computing the condition codes after each x86 instruction,
+ * QEMU just stores the result (called CC_DST), the type of operation
+ * (called CC_OP) and whatever operands are needed (CC_SRC and possibly
+ * CC_VR). When the condition codes are needed, the condition codes can
+ * be calculated using this information. Condition codes are not generated
+ * if they are only needed for conditional branches.
+ */
+enum cc_op {
+    CC_OP_CONST0 = 0,           /* CC is 0 */
+    CC_OP_CONST1,               /* CC is 1 */
+    CC_OP_CONST2,               /* CC is 2 */
+    CC_OP_CONST3,               /* CC is 3 */
+
+    CC_OP_DYNAMIC,              /* CC calculation defined by env->cc_op */
+    CC_OP_STATIC,               /* CC value is env->cc_op */
+
+    CC_OP_NZ,                   /* env->cc_dst != 0 */
+    CC_OP_LTGT_32,              /* signed less/greater than (32bit) */
+    CC_OP_LTGT_64,              /* signed less/greater than (64bit) */
+    CC_OP_LTUGTU_32,            /* unsigned less/greater than (32bit) */
+    CC_OP_LTUGTU_64,            /* unsigned less/greater than (64bit) */
+    CC_OP_LTGT0_32,             /* signed less/greater than 0 (32bit) */
+    CC_OP_LTGT0_64,             /* signed less/greater than 0 (64bit) */
+
+    CC_OP_ADD_64,               /* overflow on add (64bit) */
+    CC_OP_ADDU_64,              /* overflow on unsigned add (64bit) */
+    CC_OP_ADDC_64,              /* overflow on unsigned add-carry (64bit) */
+    CC_OP_SUB_64,               /* overflow on subtraction (64bit) */
+    CC_OP_SUBU_64,              /* overflow on unsigned subtraction (64bit) */
+    CC_OP_SUBB_64,              /* overflow on unsigned sub-borrow (64bit) */
+    CC_OP_ABS_64,               /* sign eval on abs (64bit) */
+    CC_OP_NABS_64,              /* sign eval on nabs (64bit) */
+
+    CC_OP_ADD_32,               /* overflow on add (32bit) */
+    CC_OP_ADDU_32,              /* overflow on unsigned add (32bit) */
+    CC_OP_ADDC_32,              /* overflow on unsigned add-carry (32bit) */
+    CC_OP_SUB_32,               /* overflow on subtraction (32bit) */
+    CC_OP_SUBU_32,              /* overflow on unsigned subtraction (32bit) */
+    CC_OP_SUBB_32,              /* overflow on unsigned sub-borrow (32bit) */
+    CC_OP_ABS_32,               /* sign eval on abs (64bit) */
+    CC_OP_NABS_32,              /* sign eval on nabs (64bit) */
+
+    CC_OP_COMP_32,              /* complement */
+    CC_OP_COMP_64,              /* complement */
+
+    CC_OP_TM_32,                /* test under mask (32bit) */
+    CC_OP_TM_64,                /* test under mask (64bit) */
+
+    CC_OP_NZ_F32,               /* FP dst != 0 (32bit) */
+    CC_OP_NZ_F64,               /* FP dst != 0 (64bit) */
+    CC_OP_NZ_F128,              /* FP dst != 0 (128bit) */
+
+    CC_OP_ICM,                  /* insert characters under mask */
+    CC_OP_SLA_32,               /* Calculate shift left signed (32bit) */
+    CC_OP_SLA_64,               /* Calculate shift left signed (64bit) */
+    CC_OP_FLOGR,                /* find leftmost one */
+    CC_OP_MAX
+};
+
+/* The value of the TOD clock for 1.1.1970. */
+#define TOD_UNIX_EPOCH 0x7d91048bca000000ULL
+
+/* Converts ns to s390's clock format */
+static inline uint64_t time2tod(uint64_t ns)
+{
+    return (ns << 9) / 125;
+}
+
+/* Converts s390's clock format to ns */
+static inline uint64_t tod2time(uint64_t t)
+{
+    return (t * 125) >> 9;
+}
+
+static inline hwaddr decode_basedisp_s(CPUS390XState *env, uint32_t ipb,
+                                       uint8_t *ar)
+{
+    hwaddr addr = 0;
+    uint8_t reg;
+
+    reg = ipb >> 28;
+    if (reg > 0) {
+        addr = env->regs[reg];
+    }
+    addr += (ipb >> 16) & 0xfff;
+    if (ar) {
+        *ar = reg;
+    }
+
+    return addr;
+}
+
+/* Base/displacement are at the same locations. */
+#define decode_basedisp_rs decode_basedisp_s
+
+static inline void s390_do_cpu_full_reset(CPUState *cs, run_on_cpu_data arg)
+{
+    cpu_reset(cs);
+}
+
+static inline uint8_t s390_cpu_get_state(S390CPU *cpu)
+{
+    return cpu->env.cpu_state;
+}
+
+
+/* arch_dump.c */
+int s390_cpu_write_elf64_note(WriteCoreDumpFunction f, CPUState *cs,
+                              int cpuid, void *opaque);
+
+
+/* cc_helper.c */
+const char *cc_name(int cc_op);
+void load_psw(CPUS390XState *env, uint64_t mask, uint64_t addr);
+uint32_t calc_cc(CPUS390XState *env, uint32_t cc_op, uint64_t src, uint64_t dst,
+                 uint64_t vr);
+
+
+/* cpu.c */
+#ifndef CONFIG_USER_ONLY
+unsigned int s390_cpu_halt(S390CPU *cpu);
+void s390_cpu_unhalt(S390CPU *cpu);
+#else
+static inline unsigned int s390_cpu_halt(S390CPU *cpu)
+{
+    return 0;
+}
+
+static inline void s390_cpu_unhalt(S390CPU *cpu)
+{
+}
+#endif /* CONFIG_USER_ONLY */
+
+
+/* cpu_models.c */
+void s390_cpu_model_register_props(Object *obj);
+void s390_cpu_model_class_register_props(ObjectClass *oc);
+void s390_realize_cpu_model(CPUState *cs, Error **errp);
+ObjectClass *s390_cpu_class_by_name(const char *name);
+
+
+/* excp_helper.c */
+void s390x_cpu_debug_excp_handler(CPUState *cs);
+void s390_cpu_do_interrupt(CPUState *cpu);
+bool s390_cpu_exec_interrupt(CPUState *cpu, int int_req);
+int s390_cpu_handle_mmu_fault(CPUState *cpu, vaddr address, int rw,
+                              int mmu_idx);
+void s390x_cpu_do_unaligned_access(CPUState *cs, vaddr addr,
+                                   MMUAccessType access_type,
+                                   int mmu_idx, uintptr_t retaddr);
+
+
+/* fpu_helper.c */
+uint32_t set_cc_nz_f32(float32 v);
+uint32_t set_cc_nz_f64(float64 v);
+uint32_t set_cc_nz_f128(float128 v);
+
+
+/* gdbstub.c */
+int s390_cpu_gdb_read_register(CPUState *cpu, uint8_t *buf, int reg);
+int s390_cpu_gdb_write_register(CPUState *cpu, uint8_t *buf, int reg);
+void s390_cpu_gdb_init(CPUState *cs);
+
+
+/* helper.c */
+void s390_cpu_dump_state(CPUState *cpu, FILE *f, fprintf_function cpu_fprintf,
+                         int flags);
+hwaddr s390_cpu_get_phys_page_debug(CPUState *cpu, vaddr addr);
+hwaddr s390_cpu_get_phys_addr_debug(CPUState *cpu, vaddr addr);
+uint64_t get_psw_mask(CPUS390XState *env);
+void s390_cpu_recompute_watchpoints(CPUState *cs);
+void s390x_tod_timer(void *opaque);
+void s390x_cpu_timer(void *opaque);
+S390CPU *cpu_s390x_create(const char *cpu_model, Error **errp);
+void do_restart_interrupt(CPUS390XState *env);
+#ifndef CONFIG_USER_ONLY
+LowCore *cpu_map_lowcore(CPUS390XState *env);
+void cpu_unmap_lowcore(LowCore *lowcore);
+#endif /* CONFIG_USER_ONLY */
+
+
+/* interrupt.c */
+void trigger_pgm_exception(CPUS390XState *env, uint32_t code, uint32_t ilen);
+void cpu_inject_ext(S390CPU *cpu, uint32_t code, uint32_t param,
+                    uint64_t param64);
+
+
+/* ioinst.c */
+void ioinst_handle_xsch(S390CPU *cpu, uint64_t reg1);
+void ioinst_handle_csch(S390CPU *cpu, uint64_t reg1);
+void ioinst_handle_hsch(S390CPU *cpu, uint64_t reg1);
+void ioinst_handle_msch(S390CPU *cpu, uint64_t reg1, uint32_t ipb);
+void ioinst_handle_ssch(S390CPU *cpu, uint64_t reg1, uint32_t ipb);
+void ioinst_handle_stcrw(S390CPU *cpu, uint32_t ipb);
+void ioinst_handle_stsch(S390CPU *cpu, uint64_t reg1, uint32_t ipb);
+int ioinst_handle_tsch(S390CPU *cpu, uint64_t reg1, uint32_t ipb);
+void ioinst_handle_chsc(S390CPU *cpu, uint32_t ipb);
+int ioinst_handle_tpi(S390CPU *cpu, uint32_t ipb);
+void ioinst_handle_schm(S390CPU *cpu, uint64_t reg1, uint64_t reg2,
+                        uint32_t ipb);
+void ioinst_handle_rsch(S390CPU *cpu, uint64_t reg1);
+void ioinst_handle_rchp(S390CPU *cpu, uint64_t reg1);
+void ioinst_handle_sal(S390CPU *cpu, uint64_t reg1);
+
+
+/* mem_helper.c */
+target_ulong mmu_real2abs(CPUS390XState *env, target_ulong raddr);
+
+
+/* mmu_helper.c */
+int mmu_translate(CPUS390XState *env, target_ulong vaddr, int rw, uint64_t asc,
+                  target_ulong *raddr, int *flags, bool exc);
+
+
+/* misc_helper.c */
+void QEMU_NORETURN runtime_exception(CPUS390XState *env, int excp,
+                                     uintptr_t retaddr);
+int handle_diag_288(CPUS390XState *env, uint64_t r1, uint64_t r3);
+void handle_diag_308(CPUS390XState *env, uint64_t r1, uint64_t r3);
+
+
+/* translate.c */
+void s390x_translate_init(void);
+
+#endif /* S390X_INTERNAL_H */
diff --git a/target/s390x/interrupt.c b/target/s390x/interrupt.c
index fde3da7..119ca74 100644
--- a/target/s390x/interrupt.c
+++ b/target/s390x/interrupt.c
@@ -10,6 +10,7 @@
 #include "qemu/osdep.h"
 #include "qemu/log.h"
 #include "cpu.h"
+#include "internal.h"
 #include "exec/exec-all.h"
 #include "sysemu/kvm.h"
 #include "hw/s390x/ioinst.h"
diff --git a/target/s390x/ioinst.c b/target/s390x/ioinst.c
index 51fbea6..803ef5b 100644
--- a/target/s390x/ioinst.c
+++ b/target/s390x/ioinst.c
@@ -12,6 +12,7 @@
 #include "qemu/osdep.h"
 
 #include "cpu.h"
+#include "internal.h"
 #include "hw/s390x/ioinst.h"
 #include "trace.h"
 #include "hw/s390x/s390-pci-bus.h"
diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c
index c4c5791..6bb358c 100644
--- a/target/s390x/kvm.c
+++ b/target/s390x/kvm.c
@@ -29,6 +29,7 @@
 
 #include "qemu-common.h"
 #include "cpu.h"
+#include "internal.h"
 #include "qemu/error-report.h"
 #include "qemu/timer.h"
 #include "sysemu/sysemu.h"
diff --git a/target/s390x/machine.c b/target/s390x/machine.c
index 2dcadfd..592db6b 100644
--- a/target/s390x/machine.c
+++ b/target/s390x/machine.c
@@ -17,6 +17,7 @@
 #include "qemu/osdep.h"
 #include "hw/hw.h"
 #include "cpu.h"
+#include "internal.h"
 #include "sysemu/kvm.h"
 
 static int cpu_post_load(void *opaque, int version_id)
diff --git a/target/s390x/mem_helper.c b/target/s390x/mem_helper.c
index b91c740..ec4760e 100644
--- a/target/s390x/mem_helper.c
+++ b/target/s390x/mem_helper.c
@@ -20,6 +20,7 @@
 
 #include "qemu/osdep.h"
 #include "cpu.h"
+#include "internal.h"
 #include "exec/address-spaces.h"
 #include "exec/helper-proto.h"
 #include "exec/exec-all.h"
diff --git a/target/s390x/misc_helper.c b/target/s390x/misc_helper.c
index ab0c53d..11db9be 100644
--- a/target/s390x/misc_helper.c
+++ b/target/s390x/misc_helper.c
@@ -21,6 +21,7 @@
 #include "qemu/osdep.h"
 #include "qemu/main-loop.h"
 #include "cpu.h"
+#include "internal.h"
 #include "exec/memory.h"
 #include "qemu/host-utils.h"
 #include "exec/helper-proto.h"
diff --git a/target/s390x/mmu_helper.c b/target/s390x/mmu_helper.c
index 1ad0158..09fe5bb 100644
--- a/target/s390x/mmu_helper.c
+++ b/target/s390x/mmu_helper.c
@@ -19,6 +19,7 @@
 #include "qemu/error-report.h"
 #include "exec/address-spaces.h"
 #include "cpu.h"
+#include "internal.h"
 #include "sysemu/kvm.h"
 #include "trace.h"
 #include "hw/s390x/storage-keys.h"
diff --git a/target/s390x/translate.c b/target/s390x/translate.c
index cd96a8d..4b0db7b 100644
--- a/target/s390x/translate.c
+++ b/target/s390x/translate.c
@@ -30,6 +30,7 @@
 
 #include "qemu/osdep.h"
 #include "cpu.h"
+#include "internal.h"
 #include "disas/disas.h"
 #include "exec/exec-all.h"
 #include "tcg-op.h"
-- 
2.9.4

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

* [Qemu-devel] [PATCH v1 for-2.11 07/10] target/s390x: move a couple of functions to cpu.c
  2017-08-17  9:22 [Qemu-devel] [PATCH v1 for-2.11 00/10] target/s390x: cleanup cpu.h David Hildenbrand
                   ` (5 preceding siblings ...)
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 06/10] target/s390x: introduce internal.h David Hildenbrand
@ 2017-08-17  9:22 ` David Hildenbrand
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 08/10] s390x: avoid calling kvm_ functions outside of target/s390x/ David Hildenbrand
                   ` (4 subsequent siblings)
  11 siblings, 0 replies; 43+ messages in thread
From: David Hildenbrand @ 2017-08-17  9:22 UTC (permalink / raw)
  To: qemu-devel; +Cc: rth, Aurelien Jarno, thuth, cohuck, david, borntraeger

Prepare to move more stuff (especially KVM related) from cpu.h to
internal.h.

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: David Hildenbrand <david@redhat.com>
---
 target/s390x/cpu.c | 79 ++++++++++++++++++++++++++++++++++++++++++++++++
 target/s390x/cpu.h | 89 ++++++------------------------------------------------
 2 files changed, 89 insertions(+), 79 deletions(-)

diff --git a/target/s390x/cpu.c b/target/s390x/cpu.c
index dadd383..43c274d 100644
--- a/target/s390x/cpu.c
+++ b/target/s390x/cpu.c
@@ -392,6 +392,85 @@ unsigned int s390_cpu_set_state(uint8_t cpu_state, S390CPU *cpu)
 
     return s390_count_running_cpus();
 }
+
+int s390_get_clock(uint8_t *tod_high, uint64_t *tod_low)
+{
+    if (kvm_enabled()) {
+        return kvm_s390_get_clock(tod_high, tod_low);
+    }
+    /* Fixme TCG */
+    *tod_high = 0;
+    *tod_low = 0;
+    return 0;
+}
+
+int s390_set_clock(uint8_t *tod_high, uint64_t *tod_low)
+{
+    if (kvm_enabled()) {
+        return kvm_s390_set_clock(tod_high, tod_low);
+    }
+    /* Fixme TCG */
+    return 0;
+}
+
+int s390_set_memory_limit(uint64_t new_limit, uint64_t *hw_limit)
+{
+    if (kvm_enabled()) {
+        return kvm_s390_set_mem_limit(kvm_state, new_limit, hw_limit);
+    }
+    return 0;
+}
+
+void s390_cmma_reset(void)
+{
+    if (kvm_enabled()) {
+        kvm_s390_cmma_reset();
+    }
+}
+
+int s390_cpu_restart(S390CPU *cpu)
+{
+    if (kvm_enabled()) {
+        return kvm_s390_cpu_restart(cpu);
+    }
+    return -ENOSYS;
+}
+
+int s390_get_memslot_count(KVMState *s)
+{
+    if (kvm_enabled()) {
+        return kvm_s390_get_memslot_count(s);
+    } else {
+        return MAX_AVAIL_SLOTS;
+    }
+}
+
+int s390_assign_subch_ioeventfd(EventNotifier *notifier, uint32_t sch_id,
+                                int vq, bool assign)
+{
+    if (kvm_enabled()) {
+        return kvm_s390_assign_subch_ioeventfd(notifier, sch_id, vq, assign);
+    } else {
+        return 0;
+    }
+}
+
+void s390_crypto_reset(void)
+{
+    if (kvm_enabled()) {
+        kvm_s390_crypto_reset();
+    }
+}
+
+bool s390_get_squash_mcss(void)
+{
+    if (object_property_get_bool(OBJECT(qdev_get_machine()), "s390-squash-mcss",
+                                 NULL)) {
+        return true;
+    }
+
+    return false;
+}
 #endif
 
 static gchar *s390_gdb_arch_name(CPUState *cs)
diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
index 1f20934..4318eb7 100644
--- a/target/s390x/cpu.h
+++ b/target/s390x/cpu.h
@@ -439,25 +439,8 @@ static inline void kvm_s390_access_exception(S390CPU *cpu, uint16_t code,
 }
 #endif
 
-static inline int s390_get_clock(uint8_t *tod_high, uint64_t *tod_low)
-{
-    if (kvm_enabled()) {
-        return kvm_s390_get_clock(tod_high, tod_low);
-    }
-    /* Fixme TCG */
-    *tod_high = 0;
-    *tod_low = 0;
-    return 0;
-}
-
-static inline int s390_set_clock(uint8_t *tod_high, uint64_t *tod_low)
-{
-    if (kvm_enabled()) {
-        return kvm_s390_set_clock(tod_high, tod_low);
-    }
-    /* Fixme TCG */
-    return 0;
-}
+int s390_get_clock(uint8_t *tod_high, uint64_t *tod_low);
+int s390_set_clock(uint8_t *tod_high, uint64_t *tod_low);
 
 S390CPU *s390_cpu_addr2state(uint16_t cpu_addr);
 unsigned int s390_cpu_set_state(uint8_t cpu_state, S390CPU *cpu);
@@ -808,69 +791,17 @@ static inline void kvm_s390_crypto_reset(void)
 }
 #endif
 
-static inline int s390_set_memory_limit(uint64_t new_limit, uint64_t *hw_limit)
-{
-    if (kvm_enabled()) {
-        return kvm_s390_set_mem_limit(kvm_state, new_limit, hw_limit);
-    }
-    return 0;
-}
-
-static inline void s390_cmma_reset(void)
-{
-    if (kvm_enabled()) {
-        kvm_s390_cmma_reset();
-    }
-}
-
-static inline int s390_cpu_restart(S390CPU *cpu)
-{
-    if (kvm_enabled()) {
-        return kvm_s390_cpu_restart(cpu);
-    }
-    return -ENOSYS;
-}
-
-static inline int s390_get_memslot_count(KVMState *s)
-{
-    if (kvm_enabled()) {
-        return kvm_s390_get_memslot_count(s);
-    } else {
-        return MAX_AVAIL_SLOTS;
-    }
-}
-
+int s390_set_memory_limit(uint64_t new_limit, uint64_t *hw_limit);
+void s390_cmma_reset(void);
+int s390_cpu_restart(S390CPU *cpu);
+int s390_get_memslot_count(KVMState *s);
 void s390_io_interrupt(uint16_t subchannel_id, uint16_t subchannel_nr,
                        uint32_t io_int_parm, uint32_t io_int_word);
 void s390_crw_mchk(void);
-
-static inline int s390_assign_subch_ioeventfd(EventNotifier *notifier,
-                                              uint32_t sch_id, int vq,
-                                              bool assign)
-{
-    if (kvm_enabled()) {
-        return kvm_s390_assign_subch_ioeventfd(notifier, sch_id, vq, assign);
-    } else {
-        return 0;
-    }
-}
-
-static inline void s390_crypto_reset(void)
-{
-    if (kvm_enabled()) {
-        kvm_s390_crypto_reset();
-    }
-}
-
-static inline bool s390_get_squash_mcss(void)
-{
-    if (object_property_get_bool(OBJECT(qdev_get_machine()), "s390-squash-mcss",
-                                 NULL)) {
-        return true;
-    }
-
-    return false;
-}
+int s390_assign_subch_ioeventfd(EventNotifier *notifier, uint32_t sch_id,
+                                int vq, bool assign);
+void s390_crypto_reset(void);
+bool s390_get_squash_mcss(void);
 
 /* machine check interruption code */
 
-- 
2.9.4

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

* [Qemu-devel] [PATCH v1 for-2.11 08/10] s390x: avoid calling kvm_ functions outside of target/s390x/
  2017-08-17  9:22 [Qemu-devel] [PATCH v1 for-2.11 00/10] target/s390x: cleanup cpu.h David Hildenbrand
                   ` (6 preceding siblings ...)
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 07/10] target/s390x: move a couple of functions to cpu.c David Hildenbrand
@ 2017-08-17  9:22 ` David Hildenbrand
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 09/10] s390x/kvm: move KVM declarations and stubs to separate files David Hildenbrand
                   ` (3 subsequent siblings)
  11 siblings, 0 replies; 43+ messages in thread
From: David Hildenbrand @ 2017-08-17  9:22 UTC (permalink / raw)
  To: qemu-devel; +Cc: rth, Aurelien Jarno, thuth, cohuck, david, borntraeger

Let's just introduce an helper.

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: David Hildenbrand <david@redhat.com>
---
 hw/s390x/s390-virtio-ccw.c | 4 +---
 target/s390x/cpu.c         | 7 +++++++
 target/s390x/cpu.h         | 1 +
 3 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index 1c7af39..ac087ab 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -142,9 +142,7 @@ static void ccw_init(MachineState *machine)
     /* register hypercalls */
     virtio_ccw_register_hcalls();
 
-    if (kvm_enabled()) {
-        kvm_s390_enable_css_support(s390_cpu_addr2state(0));
-    }
+    s390_enable_css_support(s390_cpu_addr2state(0));
     /*
      * Non mcss-e enabled guests only see the devices from the default
      * css, which is determined by the value of the squash_mcss property.
diff --git a/target/s390x/cpu.c b/target/s390x/cpu.c
index 43c274d..0aeab06 100644
--- a/target/s390x/cpu.c
+++ b/target/s390x/cpu.c
@@ -471,6 +471,13 @@ bool s390_get_squash_mcss(void)
 
     return false;
 }
+
+void s390_enable_css_support(S390CPU *cpu)
+{
+    if (kvm_enabled()) {
+        kvm_s390_enable_css_support(cpu);
+    }
+}
 #endif
 
 static gchar *s390_gdb_arch_name(CPUState *cs)
diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
index 4318eb7..74d5b35 100644
--- a/target/s390x/cpu.h
+++ b/target/s390x/cpu.h
@@ -404,6 +404,7 @@ int cpu_s390x_signal_handler(int host_signum, void *pinfo,
 
 #ifndef CONFIG_USER_ONLY
 
+void s390_enable_css_support(S390CPU *cpu);
 int s390_virtio_hypercall(CPUS390XState *env);
 
 #ifdef CONFIG_KVM
-- 
2.9.4

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

* [Qemu-devel] [PATCH v1 for-2.11 09/10] s390x/kvm: move KVM declarations and stubs to separate files
  2017-08-17  9:22 [Qemu-devel] [PATCH v1 for-2.11 00/10] target/s390x: cleanup cpu.h David Hildenbrand
                   ` (7 preceding siblings ...)
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 08/10] s390x: avoid calling kvm_ functions outside of target/s390x/ David Hildenbrand
@ 2017-08-17  9:22 ` David Hildenbrand
       [not found]   ` <f2b025c6-bfd9-2b01-497c-d08f262bd0d5@amsat.org>
  2017-08-18  4:05   ` Richard Henderson
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 10/10] target/s390x: cleanup cpu.h David Hildenbrand
                   ` (2 subsequent siblings)
  11 siblings, 2 replies; 43+ messages in thread
From: David Hildenbrand @ 2017-08-17  9:22 UTC (permalink / raw)
  To: qemu-devel; +Cc: rth, Aurelien Jarno, thuth, cohuck, david, borntraeger

Let's do it just like the other architectures. Introduce kvm-stub.c
for stubs and kvm_s390x.h for the declarations.

Add a fake declaration of struct kvm_s390_irq so we don't need other
ugly CONFIG_KVM checks.

Change license to GPL2+ and keep copyright notice.

Suggested-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: David Hildenbrand <david@redhat.com>
---
 target/s390x/Makefile.objs |   1 +
 target/s390x/cpu.h         | 121 +--------------------------------------------
 target/s390x/kvm-stub.c    | 111 +++++++++++++++++++++++++++++++++++++++++
 target/s390x/kvm_s390x.h   |  51 +++++++++++++++++++
 4 files changed, 164 insertions(+), 120 deletions(-)
 create mode 100644 target/s390x/kvm-stub.c
 create mode 100644 target/s390x/kvm_s390x.h

diff --git a/target/s390x/Makefile.objs b/target/s390x/Makefile.objs
index f42cd1f..9615256 100644
--- a/target/s390x/Makefile.objs
+++ b/target/s390x/Makefile.objs
@@ -3,6 +3,7 @@ obj-$(CONFIG_TCG) += translate.o cc_helper.o excp_helper.o fpu_helper.o
 obj-$(CONFIG_TCG) += int_helper.o mem_helper.o misc_helper.o
 obj-$(CONFIG_SOFTMMU) += machine.o ioinst.o arch_dump.o mmu_helper.o diag.o
 obj-$(CONFIG_KVM) += kvm.o
+obj-$(call lnot,$(CONFIG_KVM)) += kvm-stub.o
 
 # build and run feature list generator
 feat-src = $(SRC_PATH)/target/$(TARGET_BASE_ARCH)/
diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
index 74d5b35..aeb730c 100644
--- a/target/s390x/cpu.h
+++ b/target/s390x/cpu.h
@@ -41,6 +41,7 @@
 #include "exec/cpu-all.h"
 
 #include "fpu/softfloat.h"
+#include "kvm_s390x.h"
 
 #define NB_MMU_MODES 3
 #define TARGET_INSN_START_EXTRA_WORDS 1
@@ -213,8 +214,6 @@ static inline S390CPU *s390_env_get_cpu(CPUS390XState *env)
 extern const struct VMStateDescription vmstate_s390_cpu;
 #endif
 
-#include "sysemu/kvm.h"
-
 /* distinguish between 24 bit and 31 bit addressing */
 #define HIGH_ORDER_BIT 0x80000000
 
@@ -407,39 +406,6 @@ int cpu_s390x_signal_handler(int host_signum, void *pinfo,
 void s390_enable_css_support(S390CPU *cpu);
 int s390_virtio_hypercall(CPUS390XState *env);
 
-#ifdef CONFIG_KVM
-void kvm_s390_service_interrupt(uint32_t parm);
-void kvm_s390_vcpu_interrupt(S390CPU *cpu, struct kvm_s390_irq *irq);
-void kvm_s390_floating_interrupt(struct kvm_s390_irq *irq);
-int kvm_s390_inject_flic(struct kvm_s390_irq *irq);
-void kvm_s390_access_exception(S390CPU *cpu, uint16_t code, uint64_t te_code);
-int kvm_s390_mem_op(S390CPU *cpu, vaddr addr, uint8_t ar, void *hostbuf,
-                    int len, bool is_write);
-int kvm_s390_get_clock(uint8_t *tod_high, uint64_t *tod_clock);
-int kvm_s390_set_clock(uint8_t *tod_high, uint64_t *tod_clock);
-#else
-static inline void kvm_s390_service_interrupt(uint32_t parm)
-{
-}
-static inline int kvm_s390_get_clock(uint8_t *tod_high, uint64_t *tod_low)
-{
-    return -ENOSYS;
-}
-static inline int kvm_s390_set_clock(uint8_t *tod_high, uint64_t *tod_low)
-{
-    return -ENOSYS;
-}
-static inline int kvm_s390_mem_op(S390CPU *cpu, vaddr addr, uint8_t ar,
-                                  void *hostbuf, int len, bool is_write)
-{
-    return -ENOSYS;
-}
-static inline void kvm_s390_access_exception(S390CPU *cpu, uint16_t code,
-                                             uint64_t te_code)
-{
-}
-#endif
-
 int s390_get_clock(uint8_t *tod_high, uint64_t *tod_low);
 int s390_set_clock(uint8_t *tod_high, uint64_t *tod_low);
 
@@ -706,91 +672,6 @@ int s390_cpu_virt_mem_rw(S390CPU *cpu, vaddr laddr, uint8_t ar, void *hostbuf,
 #define ILEN_AUTO                   0xff
 void program_interrupt(CPUS390XState *env, uint32_t code, int ilen);
 
-#ifdef CONFIG_KVM
-void kvm_s390_program_interrupt(S390CPU *cpu, uint16_t code);
-void kvm_s390_io_interrupt(uint16_t subchannel_id,
-                           uint16_t subchannel_nr, uint32_t io_int_parm,
-                           uint32_t io_int_word);
-void kvm_s390_crw_mchk(void);
-void kvm_s390_enable_css_support(S390CPU *cpu);
-int kvm_s390_assign_subch_ioeventfd(EventNotifier *notifier, uint32_t sch,
-                                    int vq, bool assign);
-int kvm_s390_cpu_restart(S390CPU *cpu);
-int kvm_s390_get_memslot_count(KVMState *s);
-int kvm_s390_cmma_active(void);
-void kvm_s390_cmma_reset(void);
-int kvm_s390_set_cpu_state(S390CPU *cpu, uint8_t cpu_state);
-void kvm_s390_reset_vcpu(S390CPU *cpu);
-int kvm_s390_set_mem_limit(KVMState *s, uint64_t new_limit, uint64_t *hw_limit);
-void kvm_s390_vcpu_interrupt_pre_save(S390CPU *cpu);
-int kvm_s390_vcpu_interrupt_post_load(S390CPU *cpu);
-int kvm_s390_get_ri(void);
-int kvm_s390_get_gs(void);
-void kvm_s390_crypto_reset(void);
-#else
-static inline void kvm_s390_program_interrupt(S390CPU *cpu, uint16_t code)
-{
-}
-static inline void kvm_s390_io_interrupt(uint16_t subchannel_id,
-                                        uint16_t subchannel_nr,
-                                        uint32_t io_int_parm,
-                                        uint32_t io_int_word)
-{
-}
-static inline void kvm_s390_crw_mchk(void)
-{
-}
-static inline void kvm_s390_enable_css_support(S390CPU *cpu)
-{
-}
-static inline int kvm_s390_assign_subch_ioeventfd(EventNotifier *notifier,
-                                                  uint32_t sch, int vq,
-                                                  bool assign)
-{
-    return -ENOSYS;
-}
-static inline int kvm_s390_cpu_restart(S390CPU *cpu)
-{
-    return -ENOSYS;
-}
-static inline void kvm_s390_cmma_reset(void)
-{
-}
-static inline int kvm_s390_get_memslot_count(KVMState *s)
-{
-  return MAX_AVAIL_SLOTS;
-}
-static inline int kvm_s390_set_cpu_state(S390CPU *cpu, uint8_t cpu_state)
-{
-    return -ENOSYS;
-}
-static inline void kvm_s390_reset_vcpu(S390CPU *cpu)
-{
-}
-static inline int kvm_s390_set_mem_limit(KVMState *s, uint64_t new_limit,
-                                         uint64_t *hw_limit)
-{
-    return 0;
-}
-static inline void kvm_s390_vcpu_interrupt_pre_save(S390CPU *cpu)
-{
-}
-static inline int kvm_s390_vcpu_interrupt_post_load(S390CPU *cpu)
-{
-    return 0;
-}
-static inline int kvm_s390_get_ri(void)
-{
-    return 0;
-}
-static inline int kvm_s390_get_gs(void)
-{
-    return 0;
-}
-static inline void kvm_s390_crypto_reset(void)
-{
-}
-#endif
 
 int s390_set_memory_limit(uint64_t new_limit, uint64_t *hw_limit);
 void s390_cmma_reset(void);
diff --git a/target/s390x/kvm-stub.c b/target/s390x/kvm-stub.c
new file mode 100644
index 0000000..29a89ba
--- /dev/null
+++ b/target/s390x/kvm-stub.c
@@ -0,0 +1,111 @@
+/*
+ * QEMU KVM support -- s390x specific function stubs.
+ *
+ * Copyright (c) 2009 Ulrich Hecht
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ */
+
+#include "qemu/osdep.h"
+#include "qemu-common.h"
+#include "cpu.h"
+#include "kvm_s390x.h"
+
+void kvm_s390_service_interrupt(uint32_t parm)
+{
+}
+
+void kvm_s390_access_exception(S390CPU *cpu, uint16_t code, uint64_t te_code)
+{
+}
+
+int kvm_s390_mem_op(S390CPU *cpu, vaddr addr, uint8_t ar, void *hostbuf,
+                    int len, bool is_write)
+{
+    return -ENOSYS;
+}
+
+void kvm_s390_program_interrupt(S390CPU *cpu, uint16_t code)
+{
+}
+
+void kvm_s390_io_interrupt(uint16_t subchannel_id, uint16_t subchannel_nr,
+                           uint32_t io_int_parm, uint32_t io_int_word)
+{
+}
+
+void kvm_s390_crw_mchk(void)
+{
+}
+
+int kvm_s390_set_cpu_state(S390CPU *cpu, uint8_t cpu_state)
+{
+    return -ENOSYS;
+}
+
+void kvm_s390_vcpu_interrupt_pre_save(S390CPU *cpu)
+{
+}
+
+int kvm_s390_vcpu_interrupt_post_load(S390CPU *cpu)
+{
+    return 0;
+}
+
+int kvm_s390_get_ri(void)
+{
+    return 0;
+}
+
+int kvm_s390_get_gs(void)
+{
+    return 0;
+}
+
+int kvm_s390_get_clock(uint8_t *tod_high, uint64_t *tod_low)
+{
+    return -ENOSYS;
+}
+
+int kvm_s390_set_clock(uint8_t *tod_high, uint64_t *tod_low)
+{
+    return -ENOSYS;
+}
+
+void kvm_s390_enable_css_support(S390CPU *cpu)
+{
+}
+
+int kvm_s390_assign_subch_ioeventfd(EventNotifier *notifier, uint32_t sch,
+                                    int vq, bool assign)
+{
+    return -ENOSYS;
+}
+
+int kvm_s390_cpu_restart(S390CPU *cpu)
+{
+    return -ENOSYS;
+}
+
+void kvm_s390_cmma_reset(void)
+{
+}
+
+int kvm_s390_get_memslot_count(KVMState *s)
+{
+  return MAX_AVAIL_SLOTS;
+}
+
+void kvm_s390_reset_vcpu(S390CPU *cpu)
+{
+}
+
+int kvm_s390_set_mem_limit(KVMState *s, uint64_t new_limit, uint64_t *hw_limit)
+{
+    return 0;
+}
+
+void kvm_s390_crypto_reset(void)
+{
+}
diff --git a/target/s390x/kvm_s390x.h b/target/s390x/kvm_s390x.h
new file mode 100644
index 0000000..35db28c
--- /dev/null
+++ b/target/s390x/kvm_s390x.h
@@ -0,0 +1,51 @@
+/*
+ * QEMU KVM support -- s390x specific functions.
+ *
+ * Copyright (c) 2009 Ulrich Hecht
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ */
+
+#ifndef KVM_S390X_H
+#define KVM_S390X_H
+
+#include "sysemu/kvm.h"
+
+#ifndef CONFIG_KVM
+struct kvm_s390_irq {};
+#endif /* CONFIG_KVM */
+
+void kvm_s390_floating_interrupt(struct kvm_s390_irq *irq);
+void kvm_s390_service_interrupt(uint32_t parm);
+void kvm_s390_vcpu_interrupt(S390CPU *cpu, struct kvm_s390_irq *irq);
+void kvm_s390_access_exception(S390CPU *cpu, uint16_t code, uint64_t te_code);
+int kvm_s390_mem_op(S390CPU *cpu, vaddr addr, uint8_t ar, void *hostbuf,
+                    int len, bool is_write);
+void kvm_s390_program_interrupt(S390CPU *cpu, uint16_t code);
+void kvm_s390_io_interrupt(uint16_t subchannel_id,
+                           uint16_t subchannel_nr, uint32_t io_int_parm,
+                           uint32_t io_int_word);
+void kvm_s390_crw_mchk(void);
+int kvm_s390_set_cpu_state(S390CPU *cpu, uint8_t cpu_state);
+void kvm_s390_vcpu_interrupt_pre_save(S390CPU *cpu);
+int kvm_s390_vcpu_interrupt_post_load(S390CPU *cpu);
+int kvm_s390_get_ri(void);
+int kvm_s390_get_gs(void);
+int kvm_s390_get_clock(uint8_t *tod_high, uint64_t *tod_clock);
+int kvm_s390_set_clock(uint8_t *tod_high, uint64_t *tod_clock);
+void kvm_s390_enable_css_support(S390CPU *cpu);
+int kvm_s390_assign_subch_ioeventfd(EventNotifier *notifier, uint32_t sch,
+                                    int vq, bool assign);
+int kvm_s390_cpu_restart(S390CPU *cpu);
+int kvm_s390_get_memslot_count(KVMState *s);
+int kvm_s390_cmma_active(void);
+void kvm_s390_cmma_reset(void);
+void kvm_s390_reset_vcpu(S390CPU *cpu);
+int kvm_s390_set_mem_limit(KVMState *s, uint64_t new_limit, uint64_t *hw_limit);
+void kvm_s390_crypto_reset(void);
+
+/* implemented outside of target/s390x/ */
+int kvm_s390_inject_flic(struct kvm_s390_irq *irq);
+
+#endif /* KVM_S390X_H */
-- 
2.9.4

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

* [Qemu-devel] [PATCH v1 for-2.11 10/10] target/s390x: cleanup cpu.h
  2017-08-17  9:22 [Qemu-devel] [PATCH v1 for-2.11 00/10] target/s390x: cleanup cpu.h David Hildenbrand
                   ` (8 preceding siblings ...)
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 09/10] s390x/kvm: move KVM declarations and stubs to separate files David Hildenbrand
@ 2017-08-17  9:22 ` David Hildenbrand
  2017-08-17 12:41   ` Thomas Huth
  2017-08-17 11:42 ` [Qemu-devel] [PATCH v1 for-2.11 00/10] " Philippe Mathieu-Daudé
  2017-08-17 13:11 ` Cornelia Huck
  11 siblings, 1 reply; 43+ messages in thread
From: David Hildenbrand @ 2017-08-17  9:22 UTC (permalink / raw)
  To: qemu-devel; +Cc: rth, Aurelien Jarno, thuth, cohuck, david, borntraeger

Let's reshuffle the function prototypes so we get a cleaner outline
of the files.

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: David Hildenbrand <david@redhat.com>
---
 target/s390x/cpu.h | 140 ++++++++++++++++++++++++++---------------------------
 1 file changed, 69 insertions(+), 71 deletions(-)

diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
index aeb730c..3650cfc 100644
--- a/target/s390x/cpu.h
+++ b/target/s390x/cpu.h
@@ -391,48 +391,6 @@ static inline void cpu_get_tb_cpu_state(CPUS390XState* env, target_ulong *pc,
 #define PER_CODE_EVENT_STORE_REAL      0x0800
 #define PER_CODE_EVENT_NULLIFICATION   0x0100
 
-S390CPU *cpu_s390x_init(const char *cpu_model);
-S390CPU *s390x_new_cpu(const char *cpu_model, int64_t id, Error **errp);
-
-/* you can call this signal handler from your SIGBUS and SIGSEGV
-   signal handlers to inform the virtual CPU of exceptions. non zero
-   is returned if the signal was handled by the virtual CPU.  */
-int cpu_s390x_signal_handler(int host_signum, void *pinfo,
-                           void *puc);
-
-
-#ifndef CONFIG_USER_ONLY
-
-void s390_enable_css_support(S390CPU *cpu);
-int s390_virtio_hypercall(CPUS390XState *env);
-
-int s390_get_clock(uint8_t *tod_high, uint64_t *tod_low);
-int s390_set_clock(uint8_t *tod_high, uint64_t *tod_low);
-
-S390CPU *s390_cpu_addr2state(uint16_t cpu_addr);
-unsigned int s390_cpu_set_state(uint8_t cpu_state, S390CPU *cpu);
-
-void gtod_save(QEMUFile *f, void *opaque);
-int gtod_load(QEMUFile *f, void *opaque, int version_id);
-
-/* service interrupts are floating therefore we must not pass an cpustate */
-void s390_sclp_extint(uint32_t parm);
-
-#else
-static inline unsigned int s390_cpu_set_state(uint8_t cpu_state, S390CPU *cpu)
-{
-    return 0;
-}
-#endif
-
-extern void subsystem_reset(void);
-
-#define cpu_init(model) CPU(cpu_s390x_init(model))
-#define cpu_signal_handler cpu_s390x_signal_handler
-
-void s390_cpu_list(FILE *f, fprintf_function cpu_fprintf);
-#define cpu_list s390_cpu_list
-
 #define EXCP_EXT 1 /* external interrupt */
 #define EXCP_SVC 2 /* supervisor call (syscall) */
 #define EXCP_PGM 3 /* program interruption */
@@ -652,39 +610,10 @@ struct sysib_322 {
 /* SIGP order code mask corresponding to bit positions 56-63 */
 #define SIGP_ORDER_MASK 0x000000ff
 
-int sclp_service_call(CPUS390XState *env, uint64_t sccb, uint32_t code);
-
-int s390_cpu_virt_mem_rw(S390CPU *cpu, vaddr laddr, uint8_t ar, void *hostbuf,
-                         int len, bool is_write);
-
-#define s390_cpu_virt_mem_read(cpu, laddr, ar, dest, len)    \
-        s390_cpu_virt_mem_rw(cpu, laddr, ar, dest, len, false)
-#define s390_cpu_virt_mem_write(cpu, laddr, ar, dest, len)       \
-        s390_cpu_virt_mem_rw(cpu, laddr, ar, dest, len, true)
-#define s390_cpu_virt_mem_check_write(cpu, laddr, ar, len)   \
-        s390_cpu_virt_mem_rw(cpu, laddr, ar, NULL, len, true)
-
 /* from s390-virtio-ccw */
 #define MEM_SECTION_SIZE             0x10000000UL
 #define MAX_AVAIL_SLOTS              32
 
-/* automatically detect the instruction length */
-#define ILEN_AUTO                   0xff
-void program_interrupt(CPUS390XState *env, uint32_t code, int ilen);
-
-
-int s390_set_memory_limit(uint64_t new_limit, uint64_t *hw_limit);
-void s390_cmma_reset(void);
-int s390_cpu_restart(S390CPU *cpu);
-int s390_get_memslot_count(KVMState *s);
-void s390_io_interrupt(uint16_t subchannel_id, uint16_t subchannel_nr,
-                       uint32_t io_int_parm, uint32_t io_int_word);
-void s390_crw_mchk(void);
-int s390_assign_subch_ioeventfd(EventNotifier *notifier, uint32_t sch_id,
-                                int vq, bool assign);
-void s390_crypto_reset(void);
-bool s390_get_squash_mcss(void);
-
 /* machine check interruption code */
 
 /* subclasses */
@@ -730,4 +659,73 @@ bool s390_get_squash_mcss(void);
 #define MCIC_VB_CT 0x0000000000020000ULL
 #define MCIC_VB_CC 0x0000000000010000ULL
 
+
+/* cpu.c */
+int s390_get_clock(uint8_t *tod_high, uint64_t *tod_low);
+int s390_set_clock(uint8_t *tod_high, uint64_t *tod_low);
+void s390_crypto_reset(void);
+bool s390_get_squash_mcss(void);
+int s390_get_memslot_count(KVMState *s);
+int s390_set_memory_limit(uint64_t new_limit, uint64_t *hw_limit);
+void s390_cmma_reset(void);
+int s390_cpu_restart(S390CPU *cpu);
+void s390_enable_css_support(S390CPU *cpu);
+int s390_assign_subch_ioeventfd(EventNotifier *notifier, uint32_t sch_id,
+                                int vq, bool assign);
+#ifndef CONFIG_USER_ONLY
+unsigned int s390_cpu_set_state(uint8_t cpu_state, S390CPU *cpu);
+#else
+static inline unsigned int s390_cpu_set_state(uint8_t cpu_state, S390CPU *cpu)
+{
+    return 0;
+}
+#endif /* CONFIG_USER_ONLY */
+
+
+/* cpu_models.c */
+void s390_cpu_list(FILE *f, fprintf_function cpu_fprintf);
+#define cpu_list s390_cpu_list
+
+
+/* helper.c */
+S390CPU *cpu_s390x_init(const char *cpu_model);
+#define cpu_init(model) CPU(cpu_s390x_init(model))
+S390CPU *s390x_new_cpu(const char *cpu_model, int64_t id, Error **errp);
+/* you can call this signal handler from your SIGBUS and SIGSEGV
+   signal handlers to inform the virtual CPU of exceptions. non zero
+   is returned if the signal was handled by the virtual CPU.  */
+int cpu_s390x_signal_handler(int host_signum, void *pinfo, void *puc);
+#define cpu_signal_handler cpu_s390x_signal_handler
+
+
+/* interrupt.c */
+void s390_crw_mchk(void);
+void s390_io_interrupt(uint16_t subchannel_id, uint16_t subchannel_nr,
+                       uint32_t io_int_parm, uint32_t io_int_word);
+/* automatically detect the instruction length */
+#define ILEN_AUTO                   0xff
+void program_interrupt(CPUS390XState *env, uint32_t code, int ilen);
+/* service interrupts are floating therefore we must not pass an cpustate */
+void s390_sclp_extint(uint32_t parm);
+
+
+/* mmu_helper.c */
+int s390_cpu_virt_mem_rw(S390CPU *cpu, vaddr laddr, uint8_t ar, void *hostbuf,
+                         int len, bool is_write);
+#define s390_cpu_virt_mem_read(cpu, laddr, ar, dest, len)    \
+        s390_cpu_virt_mem_rw(cpu, laddr, ar, dest, len, false)
+#define s390_cpu_virt_mem_write(cpu, laddr, ar, dest, len)       \
+        s390_cpu_virt_mem_rw(cpu, laddr, ar, dest, len, true)
+#define s390_cpu_virt_mem_check_write(cpu, laddr, ar, len)   \
+        s390_cpu_virt_mem_rw(cpu, laddr, ar, NULL, len, true)
+
+
+/* outside of target/s390x/ */
+S390CPU *s390_cpu_addr2state(uint16_t cpu_addr);
+extern void subsystem_reset(void);
+int sclp_service_call(CPUS390XState *env, uint64_t sccb, uint32_t code);
+int s390_virtio_hypercall(CPUS390XState *env);
+void gtod_save(QEMUFile *f, void *opaque);
+int gtod_load(QEMUFile *f, void *opaque, int version_id);
+
 #endif
-- 
2.9.4

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

* Re: [Qemu-devel] [PATCH v1 for-2.11 01/10] target/s390x: move cc_name() to cc_helper.c
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 01/10] target/s390x: move cc_name() to cc_helper.c David Hildenbrand
@ 2017-08-17 11:01   ` Thomas Huth
  2017-08-18  3:47   ` Richard Henderson
  2017-08-18  9:59   ` David Hildenbrand
  2 siblings, 0 replies; 43+ messages in thread
From: Thomas Huth @ 2017-08-17 11:01 UTC (permalink / raw)
  To: David Hildenbrand, qemu-devel; +Cc: rth, Aurelien Jarno, cohuck, borntraeger

On 17.08.2017 11:22, David Hildenbrand wrote:
> While at it, move the translations into the function.
> 
> Signed-off-by: David Hildenbrand <david@redhat.com>
> ---
>  target/s390x/cc_helper.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
>  target/s390x/cpu.h       | 48 +-----------------------------------------------
>  2 files changed, 49 insertions(+), 47 deletions(-)

Reviewed-by: Thomas Huth <thuth@redhat.com>

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

* Re: [Qemu-devel] [PATCH v1 for-2.11 02/10] target/s390x: move cpu_mmu_idx_to_asc() to excp_helper.c
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 02/10] target/s390x: move cpu_mmu_idx_to_asc() to excp_helper.c David Hildenbrand
@ 2017-08-17 11:03   ` Thomas Huth
  2017-08-18  3:52   ` Richard Henderson
  1 sibling, 0 replies; 43+ messages in thread
From: Thomas Huth @ 2017-08-17 11:03 UTC (permalink / raw)
  To: David Hildenbrand, qemu-devel; +Cc: rth, Aurelien Jarno, cohuck, borntraeger

On 17.08.2017 11:22, David Hildenbrand wrote:
> Only used in that file.
> 
> Signed-off-by: David Hildenbrand <david@redhat.com>
> ---
>  target/s390x/cpu.h         | 14 --------------
>  target/s390x/excp_helper.c | 14 ++++++++++++++
>  2 files changed, 14 insertions(+), 14 deletions(-)

Reviewed-by: Thomas Huth <thuth@redhat.com>

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

* Re: [Qemu-devel] [PATCH v1 for-2.11 03/10] target/s390x: move psw_key_valid() to mem_helper.c
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 03/10] target/s390x: move psw_key_valid() to mem_helper.c David Hildenbrand
@ 2017-08-17 11:04   ` Thomas Huth
  2017-08-18  3:54   ` Richard Henderson
  1 sibling, 0 replies; 43+ messages in thread
From: Thomas Huth @ 2017-08-17 11:04 UTC (permalink / raw)
  To: David Hildenbrand, qemu-devel; +Cc: rth, Aurelien Jarno, cohuck, borntraeger

On 17.08.2017 11:22, David Hildenbrand wrote:
> Only used in that file.
> 
> Signed-off-by: David Hildenbrand <david@redhat.com>
> ---
>  target/s390x/cpu.h        | 11 -----------
>  target/s390x/mem_helper.c | 11 +++++++++++
>  2 files changed, 11 insertions(+), 11 deletions(-)

Reviewed-by: Thomas Huth <thuth@redhat.com>

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

* Re: [Qemu-devel] [PATCH v1 for-2.11 04/10] target/s390x: move s390_do_cpu_reset() to diag.c
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 04/10] target/s390x: move s390_do_cpu_reset() to diag.c David Hildenbrand
@ 2017-08-17 11:05   ` Thomas Huth
  2017-08-18  3:55   ` Richard Henderson
  1 sibling, 0 replies; 43+ messages in thread
From: Thomas Huth @ 2017-08-17 11:05 UTC (permalink / raw)
  To: David Hildenbrand, qemu-devel; +Cc: rth, Aurelien Jarno, cohuck, borntraeger

On 17.08.2017 11:22, David Hildenbrand wrote:
> Only used in that file. Also drop the comment, not really needed.
> 
> Signed-off-by: David Hildenbrand <david@redhat.com>
> ---
>  target/s390x/cpu.h  | 7 -------
>  target/s390x/diag.c | 7 +++++++
>  2 files changed, 7 insertions(+), 7 deletions(-)

Reviewed-by: Thomas Huth <thuth@redhat.com>

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

* Re: [Qemu-devel] [PATCH v1 for-2.11 05/10] target/s390x: move get_per_in_range() to misc_helper.c
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 05/10] target/s390x: move get_per_in_range() to misc_helper.c David Hildenbrand
@ 2017-08-17 11:09   ` Thomas Huth
  2017-08-18  3:56   ` Richard Henderson
  1 sibling, 0 replies; 43+ messages in thread
From: Thomas Huth @ 2017-08-17 11:09 UTC (permalink / raw)
  To: David Hildenbrand, qemu-devel; +Cc: rth, Aurelien Jarno, cohuck, borntraeger

On 17.08.2017 11:22, David Hildenbrand wrote:
> Only used in that file.
> 
> Signed-off-by: David Hildenbrand <david@redhat.com>
> ---
>  target/s390x/cpu.h         | 11 -----------
>  target/s390x/misc_helper.c | 11 +++++++++++
>  2 files changed, 11 insertions(+), 11 deletions(-)

Reviewed-by: Thomas Huth <thuth@redhat.com>

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

* Re: [Qemu-devel] [PATCH v1 for-2.11 00/10] target/s390x: cleanup cpu.h
  2017-08-17  9:22 [Qemu-devel] [PATCH v1 for-2.11 00/10] target/s390x: cleanup cpu.h David Hildenbrand
                   ` (9 preceding siblings ...)
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 10/10] target/s390x: cleanup cpu.h David Hildenbrand
@ 2017-08-17 11:42 ` Philippe Mathieu-Daudé
  2017-08-17 13:11 ` Cornelia Huck
  11 siblings, 0 replies; 43+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-08-17 11:42 UTC (permalink / raw)
  To: David Hildenbrand, qemu-devel
  Cc: thuth, cohuck, borntraeger, Aurelien Jarno, rth

On 08/17/2017 06:22 AM, David Hildenbrand wrote:
> cpu.h is accessed outside of target/s390x. It should only contain
> what is expected to be accessed outside of this folder. Therefore, create
> internal.h and move a lot to that file. In addition, introduce
> kvm-stub.c and kvm_390x.h for kvm specific functions.
> 
> Let's see what compilers think about this version.
> 
> RFC -> v1:
> - (hopefully) fixed a compile error
> - move some functions from cpu.h to the only c file they are used in
> - move kvm function and stubs to kvm_s390x.h and kvm-stub.c
> - smaller requested style fixes
> 
> 
> David Hildenbrand (10):
>    target/s390x: move cc_name() to cc_helper.c
>    target/s390x: move cpu_mmu_idx_to_asc() to excp_helper.c
>    target/s390x: move psw_key_valid() to mem_helper.c
>    target/s390x: move s390_do_cpu_reset() to diag.c
>    target/s390x: move get_per_in_range() to misc_helper.c
>    target/s390x: introduce internal.h
>    target/s390x: move a couple of functions to cpu.c
>    s390x: avoid calling kvm_ functions outside of target/s390x/
>    s390x/kvm: move KVM declarations and stubs to separate files
>    target/s390x: cleanup cpu.h

for this series but 9 "move KVM declarations and stubs to separate files":

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

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

* Re: [Qemu-devel] [PATCH v1 for-2.11 06/10] target/s390x: introduce internal.h
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 06/10] target/s390x: introduce internal.h David Hildenbrand
@ 2017-08-17 11:59   ` Thomas Huth
  0 siblings, 0 replies; 43+ messages in thread
From: Thomas Huth @ 2017-08-17 11:59 UTC (permalink / raw)
  To: David Hildenbrand, qemu-devel; +Cc: rth, Aurelien Jarno, cohuck, borntraeger

On 17.08.2017 11:22, David Hildenbrand wrote:
> cpu.h should only contain what really has to be accessed outside of
> target/s390x/. Add internal.h which can only be used inside target/s390x/.
> 
> Move everything that isn't fast enough to run away and restructure it
> right away. We'll move all kvm_* stuff later.
> 
> Minor style fixes to avoid checkpatch warning to:
> - struct Lowcore: "{" goes into same line as typedef
> - struct LowCore: add spaces around "-" in array length calculations
> - time2tod() and tod2time(): move "{" to separate line
> - get_per_atmid(): add space between ")" and "?". Move cases by one char.
> - get_per_atmid(): drop extra paremthesis around (1 << 6)
> 
> Change license of new file to GPL2+ and keep copyright notice.
> 
> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
> Signed-off-by: David Hildenbrand <david@redhat.com>
> ---
>  target/s390x/arch_dump.c   |   1 +
>  target/s390x/cc_helper.c   |   1 +
>  target/s390x/cpu.c         |   1 +
>  target/s390x/cpu.h         | 343 ---------------------------------------
>  target/s390x/cpu_models.c  |   1 +
>  target/s390x/diag.c        |   1 +
>  target/s390x/excp_helper.c |   1 +
>  target/s390x/fpu_helper.c  |   1 +
>  target/s390x/gdbstub.c     |   1 +
>  target/s390x/helper.c      |   1 +
>  target/s390x/int_helper.c  |   1 +
>  target/s390x/internal.h    | 391 +++++++++++++++++++++++++++++++++++++++++++++
>  target/s390x/interrupt.c   |   1 +
>  target/s390x/ioinst.c      |   1 +
>  target/s390x/kvm.c         |   1 +
>  target/s390x/machine.c     |   1 +
>  target/s390x/mem_helper.c  |   1 +
>  target/s390x/misc_helper.c |   1 +
>  target/s390x/mmu_helper.c  |   1 +
>  target/s390x/translate.c   |   1 +
>  20 files changed, 409 insertions(+), 343 deletions(-)
>  create mode 100644 target/s390x/internal.h

Reviewed-by: Thomas Huth <thuth@redhat.com>

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

* Re: [Qemu-devel] [PATCH v1 for-2.11 09/10] s390x/kvm: move KVM declarations and stubs to separate files
       [not found]   ` <f2b025c6-bfd9-2b01-497c-d08f262bd0d5@amsat.org>
@ 2017-08-17 12:21     ` David Hildenbrand
  2017-08-17 12:35     ` Thomas Huth
  1 sibling, 0 replies; 43+ messages in thread
From: David Hildenbrand @ 2017-08-17 12:21 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: thuth, cohuck, borntraeger, Aurelien Jarno, rth


>> +#include "qemu/osdep.h"
>> +#include "qemu-common.h"
>> +#include "cpu.h"
>> +#include "kvm_s390x.h"
> 
> here goes the:
> 
> struct kvm_s390_irq {};

As we don't have a stub using kvm_s390_irq, I guess I can just drop this
for now.
[...]

> 
> change by
> 
> typedef struct kvm_s390_irq kvm_s390_irq_t;
> 
>> +
>> +void kvm_s390_floating_interrupt(struct kvm_s390_irq *irq);
>> +void kvm_s390_service_interrupt(uint32_t parm);
>> +void kvm_s390_vcpu_interrupt(S390CPU *cpu, struct kvm_s390_irq *irq);
> 
> change these to use 'kvm_s390_irq_t *irq' arg
> 
>> +void kvm_s390_access_exception(S390CPU *cpu, uint16_t code, uint64_t te_code);
>> +int kvm_s390_mem_op(S390CPU *cpu, vaddr addr, uint8_t ar, void *hostbuf,
>> +                    int len, bool is_write);
>> +void kvm_s390_program_interrupt(S390CPU *cpu, uint16_t code);
>> +void kvm_s390_io_interrupt(uint16_t subchannel_id,
>> +                           uint16_t subchannel_nr, uint32_t io_int_parm,
>> +                           uint32_t io_int_word);
>> +void kvm_s390_crw_mchk(void);
>> +int kvm_s390_set_cpu_state(S390CPU *cpu, uint8_t cpu_state);
>> +void kvm_s390_vcpu_interrupt_pre_save(S390CPU *cpu);
>> +int kvm_s390_vcpu_interrupt_post_load(S390CPU *cpu);
>> +int kvm_s390_get_ri(void);
>> +int kvm_s390_get_gs(void);
>> +int kvm_s390_get_clock(uint8_t *tod_high, uint64_t *tod_clock);
>> +int kvm_s390_set_clock(uint8_t *tod_high, uint64_t *tod_clock);
>> +void kvm_s390_enable_css_support(S390CPU *cpu);
>> +int kvm_s390_assign_subch_ioeventfd(EventNotifier *notifier, uint32_t sch,
>> +                                    int vq, bool assign);
>> +int kvm_s390_cpu_restart(S390CPU *cpu);
>> +int kvm_s390_get_memslot_count(KVMState *s);
>> +int kvm_s390_cmma_active(void);
>> +void kvm_s390_cmma_reset(void);
>> +void kvm_s390_reset_vcpu(S390CPU *cpu);
>> +int kvm_s390_set_mem_limit(KVMState *s, uint64_t new_limit, uint64_t *hw_limit);
>> +void kvm_s390_crypto_reset(void);
>> +
>> +/* implemented outside of target/s390x/ */
>> +int kvm_s390_inject_flic(struct kvm_s390_irq *irq);
> 
> also change this to use 'kvm_s390_irq_t *irq' arg here and in hw/intc/
> 

Yes, this seems to compile!


-- 

Thanks,

David

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

* Re: [Qemu-devel] [PATCH v1 for-2.11 09/10] s390x/kvm: move KVM declarations and stubs to separate files
       [not found]   ` <f2b025c6-bfd9-2b01-497c-d08f262bd0d5@amsat.org>
  2017-08-17 12:21     ` David Hildenbrand
@ 2017-08-17 12:35     ` Thomas Huth
  2017-08-17 12:45       ` Philippe Mathieu-Daudé
                         ` (2 more replies)
  1 sibling, 3 replies; 43+ messages in thread
From: Thomas Huth @ 2017-08-17 12:35 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, David Hildenbrand, qemu-devel
  Cc: cohuck, borntraeger, Aurelien Jarno, rth

On 17.08.2017 13:40, Philippe Mathieu-Daudé wrote:
> Hi David,
> 
> On 08/17/2017 06:22 AM, David Hildenbrand wrote:
>> Let's do it just like the other architectures. Introduce kvm-stub.c
>> for stubs and kvm_s390x.h for the declarations.
>>
>> Add a fake declaration of struct kvm_s390_irq so we don't need other
>> ugly CONFIG_KVM checks.
> 
> You can use an opaque pointer to avoid that ("bridge" design pattern).
> 
> It involves few more changes but looks safer.

There is maybe even a simpler solution than that, see below ...

[...]
>>   feat-src = $(SRC_PATH)/target/$(TARGET_BASE_ARCH)/
>> diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
>> index 74d5b35..aeb730c 100644
>> --- a/target/s390x/cpu.h
>> +++ b/target/s390x/cpu.h
>> @@ -41,6 +41,7 @@
>>   #include "exec/cpu-all.h"
>>     #include "fpu/softfloat.h"
>> +#include "kvm_s390x.h"

Do we still need that? cpu.h should theoretically be independent from
kvm now, shouldn't it? And for the .c files, it's likely better to
include kvm_s390x.h directly there if they require it.

[...]
>> diff --git a/target/s390x/kvm_s390x.h b/target/s390x/kvm_s390x.h
>> new file mode 100644
>> index 0000000..35db28c
>> --- /dev/null
>> +++ b/target/s390x/kvm_s390x.h
>> @@ -0,0 +1,51 @@
>> +/*
>> + * QEMU KVM support -- s390x specific functions.
>> + *
>> + * Copyright (c) 2009 Ulrich Hecht
>> + *
>> + * This work is licensed under the terms of the GNU GPL, version 2 or
>> later.
>> + * See the COPYING file in the top-level directory.
>> + */
>> +
>> +#ifndef KVM_S390X_H
>> +#define KVM_S390X_H
>> +
>> +#include "sysemu/kvm.h"
>> +
>> +#ifndef CONFIG_KVM
>> +struct kvm_s390_irq {};
>> +#endif /* CONFIG_KVM */
> 
> change by
> 
> typedef struct kvm_s390_irq kvm_s390_irq_t;

May I suggest to simply use this instead:

struct kvm_s390_irq;

No need to switch for a typedef here, you can simply use this anonymous
struct declaration, I think.

 Thomas

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

* Re: [Qemu-devel] [PATCH v1 for-2.11 10/10] target/s390x: cleanup cpu.h
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 10/10] target/s390x: cleanup cpu.h David Hildenbrand
@ 2017-08-17 12:41   ` Thomas Huth
  2017-08-17 13:09     ` Cornelia Huck
  0 siblings, 1 reply; 43+ messages in thread
From: Thomas Huth @ 2017-08-17 12:41 UTC (permalink / raw)
  To: David Hildenbrand, qemu-devel; +Cc: rth, Aurelien Jarno, cohuck, borntraeger

On 17.08.2017 11:22, David Hildenbrand wrote:
> Let's reshuffle the function prototypes so we get a cleaner outline
> of the files.
> 
> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
> Signed-off-by: David Hildenbrand <david@redhat.com>
> ---
>  target/s390x/cpu.h | 140 ++++++++++++++++++++++++++---------------------------
>  1 file changed, 69 insertions(+), 71 deletions(-)

Not sure whether this code churn here is really worth the effort ... I'd
prefer to introduce file-specific headers for the prototypes instead,
e.g. helper.h, mmu_helper.h, etc. ... but that's just my 0.02 € ... I
also won't object if this patch gets included as is.

 Thomas

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

* Re: [Qemu-devel] [PATCH v1 for-2.11 09/10] s390x/kvm: move KVM declarations and stubs to separate files
  2017-08-17 12:35     ` Thomas Huth
@ 2017-08-17 12:45       ` Philippe Mathieu-Daudé
  2017-08-17 12:48       ` Cornelia Huck
  2017-08-17 12:55       ` David Hildenbrand
  2 siblings, 0 replies; 43+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-08-17 12:45 UTC (permalink / raw)
  To: Thomas Huth, David Hildenbrand, qemu-devel
  Cc: borntraeger, cohuck, Aurelien Jarno, rth

On 08/17/2017 09:35 AM, Thomas Huth wrote:
> On 17.08.2017 13:40, Philippe Mathieu-Daudé wrote:
>> Hi David,
>>
>> On 08/17/2017 06:22 AM, David Hildenbrand wrote:
>>> Let's do it just like the other architectures. Introduce kvm-stub.c
>>> for stubs and kvm_s390x.h for the declarations.
>>>
>>> Add a fake declaration of struct kvm_s390_irq so we don't need other
>>> ugly CONFIG_KVM checks.
>>
>> You can use an opaque pointer to avoid that ("bridge" design pattern).
>>
>> It involves few more changes but looks safer.
> 
> There is maybe even a simpler solution than that, see below ...
> 
> [...]
>>>    feat-src = $(SRC_PATH)/target/$(TARGET_BASE_ARCH)/
>>> diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
>>> index 74d5b35..aeb730c 100644
>>> --- a/target/s390x/cpu.h
>>> +++ b/target/s390x/cpu.h
>>> @@ -41,6 +41,7 @@
>>>    #include "exec/cpu-all.h"
>>>      #include "fpu/softfloat.h"
>>> +#include "kvm_s390x.h"
> 
> Do we still need that? cpu.h should theoretically be independent from
> kvm now, shouldn't it? And for the .c files, it's likely better to
> include kvm_s390x.h directly there if they require it.

Oh you totally right, I missed this include.

[...]
>>> +#ifndef KVM_S390X_H
>>> +#define KVM_S390X_H
>>> +
>>> +#include "sysemu/kvm.h"
>>> +
>>> +#ifndef CONFIG_KVM
>>> +struct kvm_s390_irq {};
>>> +#endif /* CONFIG_KVM */
>>
>> change by
>>
>> typedef struct kvm_s390_irq kvm_s390_irq_t;
> 
> May I suggest to simply use this instead:
> 
> struct kvm_s390_irq;
> 
> No need to switch for a typedef here, you can simply use this anonymous
> struct declaration, I think.

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

* Re: [Qemu-devel] [PATCH v1 for-2.11 09/10] s390x/kvm: move KVM declarations and stubs to separate files
  2017-08-17 12:35     ` Thomas Huth
  2017-08-17 12:45       ` Philippe Mathieu-Daudé
@ 2017-08-17 12:48       ` Cornelia Huck
  2017-08-17 12:53         ` David Hildenbrand
  2017-08-17 12:55       ` David Hildenbrand
  2 siblings, 1 reply; 43+ messages in thread
From: Cornelia Huck @ 2017-08-17 12:48 UTC (permalink / raw)
  To: Thomas Huth
  Cc: Philippe Mathieu-Daudé,
	David Hildenbrand, qemu-devel, borntraeger, Aurelien Jarno, rth

On Thu, 17 Aug 2017 14:35:53 +0200
Thomas Huth <thuth@redhat.com> wrote:

> On 17.08.2017 13:40, Philippe Mathieu-Daudé wrote:
> > Hi David,
> > 
> > On 08/17/2017 06:22 AM, David Hildenbrand wrote:  
> >> Let's do it just like the other architectures. Introduce kvm-stub.c
> >> for stubs and kvm_s390x.h for the declarations.
> >>
> >> Add a fake declaration of struct kvm_s390_irq so we don't need other
> >> ugly CONFIG_KVM checks.  
> > 
> > You can use an opaque pointer to avoid that ("bridge" design pattern).
> > 
> > It involves few more changes but looks safer.  
> 
> There is maybe even a simpler solution than that, see below ...
>
> >> diff --git a/target/s390x/kvm_s390x.h b/target/s390x/kvm_s390x.h
> >> new file mode 100644
> >> index 0000000..35db28c
> >> --- /dev/null
> >> +++ b/target/s390x/kvm_s390x.h
> >> @@ -0,0 +1,51 @@
> >> +/*
> >> + * QEMU KVM support -- s390x specific functions.
> >> + *
> >> + * Copyright (c) 2009 Ulrich Hecht
> >> + *
> >> + * This work is licensed under the terms of the GNU GPL, version 2 or
> >> later.
> >> + * See the COPYING file in the top-level directory.
> >> + */
> >> +
> >> +#ifndef KVM_S390X_H
> >> +#define KVM_S390X_H
> >> +
> >> +#include "sysemu/kvm.h"
> >> +
> >> +#ifndef CONFIG_KVM
> >> +struct kvm_s390_irq {};
> >> +#endif /* CONFIG_KVM */  
> > 
> > change by
> > 
> > typedef struct kvm_s390_irq kvm_s390_irq_t;  
> 
> May I suggest to simply use this instead:
> 
> struct kvm_s390_irq;
> 
> No need to switch for a typedef here, you can simply use this anonymous
> struct declaration, I think.

Yes, I think so.

I'm wondering if there are more cleanup opportunities...

We currently have the flic which is supposed to deal with floating
interrupts (in hw/intc/). It comes in a kvm (backed by a kvm device)
and a non-kvm flavour. Recent changes have introduced some adapter
interrupt handling in both the kvm device backing and in the non-kvm
flic.

Creation/injection of floating interrupts (like I/O interrupts) is
currently a bit scattered around the code, and the tcg code (which
predates the flic) does not have much in common with the kvm code. Can
we enhance the flic with one or more injection methods, move the tcg
interrupt creation into the non-kvm flic, and get rid of
kvm_s390_inject_flic()? Not sure how doable that is.

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

* Re: [Qemu-devel] [PATCH v1 for-2.11 09/10] s390x/kvm: move KVM declarations and stubs to separate files
  2017-08-17 12:48       ` Cornelia Huck
@ 2017-08-17 12:53         ` David Hildenbrand
  2017-08-17 13:04           ` Cornelia Huck
  0 siblings, 1 reply; 43+ messages in thread
From: David Hildenbrand @ 2017-08-17 12:53 UTC (permalink / raw)
  To: Cornelia Huck, Thomas Huth
  Cc: Philippe Mathieu-Daudé,
	qemu-devel, borntraeger, Aurelien Jarno, rth

On 17.08.2017 14:48, Cornelia Huck wrote:
> On Thu, 17 Aug 2017 14:35:53 +0200
> Thomas Huth <thuth@redhat.com> wrote:
> 
>> On 17.08.2017 13:40, Philippe Mathieu-Daudé wrote:
>>> Hi David,
>>>
>>> On 08/17/2017 06:22 AM, David Hildenbrand wrote:  
>>>> Let's do it just like the other architectures. Introduce kvm-stub.c
>>>> for stubs and kvm_s390x.h for the declarations.
>>>>
>>>> Add a fake declaration of struct kvm_s390_irq so we don't need other
>>>> ugly CONFIG_KVM checks.  
>>>
>>> You can use an opaque pointer to avoid that ("bridge" design pattern).
>>>
>>> It involves few more changes but looks safer.  
>>
>> There is maybe even a simpler solution than that, see below ...
>>
>>>> diff --git a/target/s390x/kvm_s390x.h b/target/s390x/kvm_s390x.h
>>>> new file mode 100644
>>>> index 0000000..35db28c
>>>> --- /dev/null
>>>> +++ b/target/s390x/kvm_s390x.h
>>>> @@ -0,0 +1,51 @@
>>>> +/*
>>>> + * QEMU KVM support -- s390x specific functions.
>>>> + *
>>>> + * Copyright (c) 2009 Ulrich Hecht
>>>> + *
>>>> + * This work is licensed under the terms of the GNU GPL, version 2 or
>>>> later.
>>>> + * See the COPYING file in the top-level directory.
>>>> + */
>>>> +
>>>> +#ifndef KVM_S390X_H
>>>> +#define KVM_S390X_H
>>>> +
>>>> +#include "sysemu/kvm.h"
>>>> +
>>>> +#ifndef CONFIG_KVM
>>>> +struct kvm_s390_irq {};
>>>> +#endif /* CONFIG_KVM */  
>>>
>>> change by
>>>
>>> typedef struct kvm_s390_irq kvm_s390_irq_t;  
>>
>> May I suggest to simply use this instead:
>>
>> struct kvm_s390_irq;
>>
>> No need to switch for a typedef here, you can simply use this anonymous
>> struct declaration, I think.
> 
> Yes, I think so.
> 
> I'm wondering if there are more cleanup opportunities...
> 
> We currently have the flic which is supposed to deal with floating
> interrupts (in hw/intc/). It comes in a kvm (backed by a kvm device)
> and a non-kvm flavour. Recent changes have introduced some adapter
> interrupt handling in both the kvm device backing and in the non-kvm
> flic.
> 
> Creation/injection of floating interrupts (like I/O interrupts) is
> currently a bit scattered around the code, and the tcg code (which
> predates the flic) does not have much in common with the kvm code. Can
> we enhance the flic with one or more injection methods, move the tcg
> interrupt creation into the non-kvm flic, and get rid of
> kvm_s390_inject_flic()? Not sure how doable that is.
> 

There are many more possible cleanups, let's limit the scope of this
series. (it all started by wanting to move one function to cpu.h ...)

Thanks!

-- 

Thanks,

David

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

* Re: [Qemu-devel] [PATCH v1 for-2.11 09/10] s390x/kvm: move KVM declarations and stubs to separate files
  2017-08-17 12:35     ` Thomas Huth
  2017-08-17 12:45       ` Philippe Mathieu-Daudé
  2017-08-17 12:48       ` Cornelia Huck
@ 2017-08-17 12:55       ` David Hildenbrand
  2017-08-17 13:06         ` Thomas Huth
  2 siblings, 1 reply; 43+ messages in thread
From: David Hildenbrand @ 2017-08-17 12:55 UTC (permalink / raw)
  To: Thomas Huth, Philippe Mathieu-Daudé, qemu-devel
  Cc: cohuck, borntraeger, Aurelien Jarno, rth

On 17.08.2017 14:35, Thomas Huth wrote:
> On 17.08.2017 13:40, Philippe Mathieu-Daudé wrote:
>> Hi David,
>>
>> On 08/17/2017 06:22 AM, David Hildenbrand wrote:
>>> Let's do it just like the other architectures. Introduce kvm-stub.c
>>> for stubs and kvm_s390x.h for the declarations.
>>>
>>> Add a fake declaration of struct kvm_s390_irq so we don't need other
>>> ugly CONFIG_KVM checks.
>>
>> You can use an opaque pointer to avoid that ("bridge" design pattern).
>>
>> It involves few more changes but looks safer.
> 
> There is maybe even a simpler solution than that, see below ...
> 
> [...]
>>>   feat-src = $(SRC_PATH)/target/$(TARGET_BASE_ARCH)/
>>> diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
>>> index 74d5b35..aeb730c 100644
>>> --- a/target/s390x/cpu.h
>>> +++ b/target/s390x/cpu.h
>>> @@ -41,6 +41,7 @@
>>>   #include "exec/cpu-all.h"
>>>     #include "fpu/softfloat.h"
>>> +#include "kvm_s390x.h"
> 
> Do we still need that? cpu.h should theoretically be independent from
> kvm now, shouldn't it? And for the .c files, it's likely better to
> include kvm_s390x.h directly there if they require it.

It should work if:

a) we include "sysemu/kvm.h" in hw/s390x/s390-virtio-ccw.c
b) we include "target/s390x/kvm_s390x.h" in hw/intc/s390_flic_kvm.c
c) we include "kvm_s390x.h" in "internal.h"
d) we drop the "KVMState" parameter from kvm_s390_get_memslot_count()
(separate patch)

> 
> May I suggest to simply use this instead:
> 
> struct kvm_s390_irq;

That also seems to compile just fine.

> 
> No need to switch for a typedef here, you can simply use this anonymous
> struct declaration, I think.
> 
>  Thomas
> 


-- 

Thanks,

David

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

* Re: [Qemu-devel] [PATCH v1 for-2.11 09/10] s390x/kvm: move KVM declarations and stubs to separate files
  2017-08-17 12:53         ` David Hildenbrand
@ 2017-08-17 13:04           ` Cornelia Huck
  0 siblings, 0 replies; 43+ messages in thread
From: Cornelia Huck @ 2017-08-17 13:04 UTC (permalink / raw)
  To: David Hildenbrand
  Cc: Thomas Huth, Philippe Mathieu-Daudé,
	qemu-devel, borntraeger, Aurelien Jarno, rth

On Thu, 17 Aug 2017 14:53:08 +0200
David Hildenbrand <david@redhat.com> wrote:

> On 17.08.2017 14:48, Cornelia Huck wrote:
> > On Thu, 17 Aug 2017 14:35:53 +0200
> > Thomas Huth <thuth@redhat.com> wrote:
> >   
> >> On 17.08.2017 13:40, Philippe Mathieu-Daudé wrote:  
> >>> Hi David,
> >>>
> >>> On 08/17/2017 06:22 AM, David Hildenbrand wrote:    
> >>>> Let's do it just like the other architectures. Introduce kvm-stub.c
> >>>> for stubs and kvm_s390x.h for the declarations.
> >>>>
> >>>> Add a fake declaration of struct kvm_s390_irq so we don't need other
> >>>> ugly CONFIG_KVM checks.    
> >>>
> >>> You can use an opaque pointer to avoid that ("bridge" design pattern).
> >>>
> >>> It involves few more changes but looks safer.    
> >>
> >> There is maybe even a simpler solution than that, see below ...
> >>  
> >>>> diff --git a/target/s390x/kvm_s390x.h b/target/s390x/kvm_s390x.h
> >>>> new file mode 100644
> >>>> index 0000000..35db28c
> >>>> --- /dev/null
> >>>> +++ b/target/s390x/kvm_s390x.h
> >>>> @@ -0,0 +1,51 @@
> >>>> +/*
> >>>> + * QEMU KVM support -- s390x specific functions.
> >>>> + *
> >>>> + * Copyright (c) 2009 Ulrich Hecht
> >>>> + *
> >>>> + * This work is licensed under the terms of the GNU GPL, version 2 or
> >>>> later.
> >>>> + * See the COPYING file in the top-level directory.
> >>>> + */
> >>>> +
> >>>> +#ifndef KVM_S390X_H
> >>>> +#define KVM_S390X_H
> >>>> +
> >>>> +#include "sysemu/kvm.h"
> >>>> +
> >>>> +#ifndef CONFIG_KVM
> >>>> +struct kvm_s390_irq {};
> >>>> +#endif /* CONFIG_KVM */    
> >>>
> >>> change by
> >>>
> >>> typedef struct kvm_s390_irq kvm_s390_irq_t;    
> >>
> >> May I suggest to simply use this instead:
> >>
> >> struct kvm_s390_irq;
> >>
> >> No need to switch for a typedef here, you can simply use this anonymous
> >> struct declaration, I think.  
> > 
> > Yes, I think so.
> > 
> > I'm wondering if there are more cleanup opportunities...
> > 
> > We currently have the flic which is supposed to deal with floating
> > interrupts (in hw/intc/). It comes in a kvm (backed by a kvm device)
> > and a non-kvm flavour. Recent changes have introduced some adapter
> > interrupt handling in both the kvm device backing and in the non-kvm
> > flic.
> > 
> > Creation/injection of floating interrupts (like I/O interrupts) is
> > currently a bit scattered around the code, and the tcg code (which
> > predates the flic) does not have much in common with the kvm code. Can
> > we enhance the flic with one or more injection methods, move the tcg
> > interrupt creation into the non-kvm flic, and get rid of
> > kvm_s390_inject_flic()? Not sure how doable that is.
> >   
> 
> There are many more possible cleanups, let's limit the scope of this
> series. (it all started by wanting to move one function to cpu.h ...)

What, you don't want to rewrite everything? :)

No, that was just an idea for the future, no need to expand your series
further.

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

* Re: [Qemu-devel] [PATCH v1 for-2.11 09/10] s390x/kvm: move KVM declarations and stubs to separate files
  2017-08-17 12:55       ` David Hildenbrand
@ 2017-08-17 13:06         ` Thomas Huth
  2017-08-17 13:07           ` Cornelia Huck
  2017-08-17 13:30           ` Philippe Mathieu-Daudé
  0 siblings, 2 replies; 43+ messages in thread
From: Thomas Huth @ 2017-08-17 13:06 UTC (permalink / raw)
  To: David Hildenbrand, Philippe Mathieu-Daudé, qemu-devel
  Cc: cohuck, borntraeger, Aurelien Jarno, rth

On 17.08.2017 14:55, David Hildenbrand wrote:
> On 17.08.2017 14:35, Thomas Huth wrote:
>> On 17.08.2017 13:40, Philippe Mathieu-Daudé wrote:
>>> On 08/17/2017 06:22 AM, David Hildenbrand wrote:
[...]
>>>>   feat-src = $(SRC_PATH)/target/$(TARGET_BASE_ARCH)/
>>>> diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
>>>> index 74d5b35..aeb730c 100644
>>>> --- a/target/s390x/cpu.h
>>>> +++ b/target/s390x/cpu.h
>>>> @@ -41,6 +41,7 @@
>>>>   #include "exec/cpu-all.h"
>>>>     #include "fpu/softfloat.h"
>>>> +#include "kvm_s390x.h"
>>
>> Do we still need that? cpu.h should theoretically be independent from
>> kvm now, shouldn't it? And for the .c files, it's likely better to
>> include kvm_s390x.h directly there if they require it.
> 
> It should work if:
> 
> a) we include "sysemu/kvm.h" in hw/s390x/s390-virtio-ccw.c
> b) we include "target/s390x/kvm_s390x.h" in hw/intc/s390_flic_kvm.c
> c) we include "kvm_s390x.h" in "internal.h"
> d) we drop the "KVMState" parameter from kvm_s390_get_memslot_count()
> (separate patch)

Ok, that's rather a lot of changes already. Maybe that's rather
something for a later patch instead, so I'm also fine if you keep in
#include "kvm_s390x.h" in cpu.h here.

 Thomas

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

* Re: [Qemu-devel] [PATCH v1 for-2.11 09/10] s390x/kvm: move KVM declarations and stubs to separate files
  2017-08-17 13:06         ` Thomas Huth
@ 2017-08-17 13:07           ` Cornelia Huck
  2017-08-17 13:10             ` David Hildenbrand
  2017-08-17 13:30           ` Philippe Mathieu-Daudé
  1 sibling, 1 reply; 43+ messages in thread
From: Cornelia Huck @ 2017-08-17 13:07 UTC (permalink / raw)
  To: Thomas Huth
  Cc: David Hildenbrand, Philippe Mathieu-Daudé,
	qemu-devel, borntraeger, Aurelien Jarno, rth

On Thu, 17 Aug 2017 15:06:10 +0200
Thomas Huth <thuth@redhat.com> wrote:

> On 17.08.2017 14:55, David Hildenbrand wrote:
> > On 17.08.2017 14:35, Thomas Huth wrote:  
> >> On 17.08.2017 13:40, Philippe Mathieu-Daudé wrote:  
> >>> On 08/17/2017 06:22 AM, David Hildenbrand wrote:  
> [...]
> >>>>   feat-src = $(SRC_PATH)/target/$(TARGET_BASE_ARCH)/
> >>>> diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
> >>>> index 74d5b35..aeb730c 100644
> >>>> --- a/target/s390x/cpu.h
> >>>> +++ b/target/s390x/cpu.h
> >>>> @@ -41,6 +41,7 @@
> >>>>   #include "exec/cpu-all.h"
> >>>>     #include "fpu/softfloat.h"
> >>>> +#include "kvm_s390x.h"  
> >>
> >> Do we still need that? cpu.h should theoretically be independent from
> >> kvm now, shouldn't it? And for the .c files, it's likely better to
> >> include kvm_s390x.h directly there if they require it.  
> > 
> > It should work if:
> > 
> > a) we include "sysemu/kvm.h" in hw/s390x/s390-virtio-ccw.c
> > b) we include "target/s390x/kvm_s390x.h" in hw/intc/s390_flic_kvm.c
> > c) we include "kvm_s390x.h" in "internal.h"
> > d) we drop the "KVMState" parameter from kvm_s390_get_memslot_count()
> > (separate patch)  
> 
> Ok, that's rather a lot of changes already. Maybe that's rather
> something for a later patch instead, so I'm also fine if you keep in
> #include "kvm_s390x.h" in cpu.h here.

Yup, let's defer it. It's not like that is the last series that will
ever go in.

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

* Re: [Qemu-devel] [PATCH v1 for-2.11 10/10] target/s390x: cleanup cpu.h
  2017-08-17 12:41   ` Thomas Huth
@ 2017-08-17 13:09     ` Cornelia Huck
  0 siblings, 0 replies; 43+ messages in thread
From: Cornelia Huck @ 2017-08-17 13:09 UTC (permalink / raw)
  To: Thomas Huth
  Cc: David Hildenbrand, qemu-devel, rth, Aurelien Jarno, borntraeger

On Thu, 17 Aug 2017 14:41:34 +0200
Thomas Huth <thuth@redhat.com> wrote:

> On 17.08.2017 11:22, David Hildenbrand wrote:
> > Let's reshuffle the function prototypes so we get a cleaner outline
> > of the files.
> > 
> > Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
> > Signed-off-by: David Hildenbrand <david@redhat.com>
> > ---
> >  target/s390x/cpu.h | 140 ++++++++++++++++++++++++++---------------------------
> >  1 file changed, 69 insertions(+), 71 deletions(-)  
> 
> Not sure whether this code churn here is really worth the effort ... I'd
> prefer to introduce file-specific headers for the prototypes instead,
> e.g. helper.h, mmu_helper.h, etc. ... but that's just my 0.02 € ... I
> also won't object if this patch gets included as is.

I'll stare a bit more at it to decide whether this is worthwile...

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

* Re: [Qemu-devel] [PATCH v1 for-2.11 09/10] s390x/kvm: move KVM declarations and stubs to separate files
  2017-08-17 13:07           ` Cornelia Huck
@ 2017-08-17 13:10             ` David Hildenbrand
  2017-08-17 13:14               ` David Hildenbrand
  0 siblings, 1 reply; 43+ messages in thread
From: David Hildenbrand @ 2017-08-17 13:10 UTC (permalink / raw)
  To: Cornelia Huck, Thomas Huth
  Cc: Philippe Mathieu-Daudé,
	qemu-devel, borntraeger, Aurelien Jarno, rth

On 17.08.2017 15:07, Cornelia Huck wrote:
> On Thu, 17 Aug 2017 15:06:10 +0200
> Thomas Huth <thuth@redhat.com> wrote:
> 
>> On 17.08.2017 14:55, David Hildenbrand wrote:
>>> On 17.08.2017 14:35, Thomas Huth wrote:  
>>>> On 17.08.2017 13:40, Philippe Mathieu-Daudé wrote:  
>>>>> On 08/17/2017 06:22 AM, David Hildenbrand wrote:  
>> [...]
>>>>>>   feat-src = $(SRC_PATH)/target/$(TARGET_BASE_ARCH)/
>>>>>> diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
>>>>>> index 74d5b35..aeb730c 100644
>>>>>> --- a/target/s390x/cpu.h
>>>>>> +++ b/target/s390x/cpu.h
>>>>>> @@ -41,6 +41,7 @@
>>>>>>   #include "exec/cpu-all.h"
>>>>>>     #include "fpu/softfloat.h"
>>>>>> +#include "kvm_s390x.h"  
>>>>
>>>> Do we still need that? cpu.h should theoretically be independent from
>>>> kvm now, shouldn't it? And for the .c files, it's likely better to
>>>> include kvm_s390x.h directly there if they require it.  
>>>
>>> It should work if:
>>>
>>> a) we include "sysemu/kvm.h" in hw/s390x/s390-virtio-ccw.c
>>> b) we include "target/s390x/kvm_s390x.h" in hw/intc/s390_flic_kvm.c
>>> c) we include "kvm_s390x.h" in "internal.h"
>>> d) we drop the "KVMState" parameter from kvm_s390_get_memslot_count()
>>> (separate patch)  
>>
>> Ok, that's rather a lot of changes already. Maybe that's rather
>> something for a later patch instead, so I'm also fine if you keep in
>> #include "kvm_s390x.h" in cpu.h here.
> 
> Yup, let's defer it. It's not like that is the last series that will
> ever go in.
> 

Sorry guys, already creating patches :)

-- 

Thanks,

David

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

* Re: [Qemu-devel] [PATCH v1 for-2.11 00/10] target/s390x: cleanup cpu.h
  2017-08-17  9:22 [Qemu-devel] [PATCH v1 for-2.11 00/10] target/s390x: cleanup cpu.h David Hildenbrand
                   ` (10 preceding siblings ...)
  2017-08-17 11:42 ` [Qemu-devel] [PATCH v1 for-2.11 00/10] " Philippe Mathieu-Daudé
@ 2017-08-17 13:11 ` Cornelia Huck
  2017-08-17 13:12   ` David Hildenbrand
  11 siblings, 1 reply; 43+ messages in thread
From: Cornelia Huck @ 2017-08-17 13:11 UTC (permalink / raw)
  To: David Hildenbrand; +Cc: qemu-devel, rth, Aurelien Jarno, thuth, borntraeger

On Thu, 17 Aug 2017 11:22:15 +0200
David Hildenbrand <david@redhat.com> wrote:

> cpu.h is accessed outside of target/s390x. It should only contain
> what is expected to be accessed outside of this folder. Therefore, create
> internal.h and move a lot to that file. In addition, introduce
> kvm-stub.c and kvm_390x.h for kvm specific functions.
> 
> Let's see what compilers think about this version.

It seems they like it :)

> 
> RFC -> v1:
> - (hopefully) fixed a compile error
> - move some functions from cpu.h to the only c file they are used in
> - move kvm function and stubs to kvm_s390x.h and kvm-stub.c
> - smaller requested style fixes
> 
> 
> David Hildenbrand (10):
>   target/s390x: move cc_name() to cc_helper.c
>   target/s390x: move cpu_mmu_idx_to_asc() to excp_helper.c
>   target/s390x: move psw_key_valid() to mem_helper.c
>   target/s390x: move s390_do_cpu_reset() to diag.c
>   target/s390x: move get_per_in_range() to misc_helper.c
>   target/s390x: introduce internal.h
>   target/s390x: move a couple of functions to cpu.c
>   s390x: avoid calling kvm_ functions outside of target/s390x/
>   s390x/kvm: move KVM declarations and stubs to separate files
>   target/s390x: cleanup cpu.h

Generally, this looks good. I'll probably apply patches 1-8. For patch
9, I'll wait for an update (no need to resend the whole series). Still
undecided about patch 10.

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

* Re: [Qemu-devel] [PATCH v1 for-2.11 00/10] target/s390x: cleanup cpu.h
  2017-08-17 13:11 ` Cornelia Huck
@ 2017-08-17 13:12   ` David Hildenbrand
  0 siblings, 0 replies; 43+ messages in thread
From: David Hildenbrand @ 2017-08-17 13:12 UTC (permalink / raw)
  To: Cornelia Huck; +Cc: qemu-devel, rth, Aurelien Jarno, thuth, borntraeger

On 17.08.2017 15:11, Cornelia Huck wrote:
> On Thu, 17 Aug 2017 11:22:15 +0200
> David Hildenbrand <david@redhat.com> wrote:
> 
>> cpu.h is accessed outside of target/s390x. It should only contain
>> what is expected to be accessed outside of this folder. Therefore, create
>> internal.h and move a lot to that file. In addition, introduce
>> kvm-stub.c and kvm_390x.h for kvm specific functions.
>>
>> Let's see what compilers think about this version.
> 
> It seems they like it :)
> 
>>
>> RFC -> v1:
>> - (hopefully) fixed a compile error
>> - move some functions from cpu.h to the only c file they are used in
>> - move kvm function and stubs to kvm_s390x.h and kvm-stub.c
>> - smaller requested style fixes
>>
>>
>> David Hildenbrand (10):
>>   target/s390x: move cc_name() to cc_helper.c
>>   target/s390x: move cpu_mmu_idx_to_asc() to excp_helper.c
>>   target/s390x: move psw_key_valid() to mem_helper.c
>>   target/s390x: move s390_do_cpu_reset() to diag.c
>>   target/s390x: move get_per_in_range() to misc_helper.c
>>   target/s390x: introduce internal.h
>>   target/s390x: move a couple of functions to cpu.c
>>   s390x: avoid calling kvm_ functions outside of target/s390x/
>>   s390x/kvm: move KVM declarations and stubs to separate files
>>   target/s390x: cleanup cpu.h
> 
> Generally, this looks good. I'll probably apply patches 1-8. For patch
> 9, I'll wait for an update (no need to resend the whole series). Still
> undecided about patch 10.
> 

I'll do another complete resend, cleaned up KVM_STATE parameter from two
functions which resulted in some conflicts when moving this stuff.

-- 

Thanks,

David

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

* Re: [Qemu-devel] [PATCH v1 for-2.11 09/10] s390x/kvm: move KVM declarations and stubs to separate files
  2017-08-17 13:10             ` David Hildenbrand
@ 2017-08-17 13:14               ` David Hildenbrand
  0 siblings, 0 replies; 43+ messages in thread
From: David Hildenbrand @ 2017-08-17 13:14 UTC (permalink / raw)
  To: Cornelia Huck, Thomas Huth
  Cc: Philippe Mathieu-Daudé,
	qemu-devel, borntraeger, Aurelien Jarno, rth

On 17.08.2017 15:10, David Hildenbrand wrote:
> On 17.08.2017 15:07, Cornelia Huck wrote:
>> On Thu, 17 Aug 2017 15:06:10 +0200
>> Thomas Huth <thuth@redhat.com> wrote:
>>
>>> On 17.08.2017 14:55, David Hildenbrand wrote:
>>>> On 17.08.2017 14:35, Thomas Huth wrote:  
>>>>> On 17.08.2017 13:40, Philippe Mathieu-Daudé wrote:  
>>>>>> On 08/17/2017 06:22 AM, David Hildenbrand wrote:  
>>> [...]
>>>>>>>   feat-src = $(SRC_PATH)/target/$(TARGET_BASE_ARCH)/
>>>>>>> diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
>>>>>>> index 74d5b35..aeb730c 100644
>>>>>>> --- a/target/s390x/cpu.h
>>>>>>> +++ b/target/s390x/cpu.h
>>>>>>> @@ -41,6 +41,7 @@
>>>>>>>   #include "exec/cpu-all.h"
>>>>>>>     #include "fpu/softfloat.h"
>>>>>>> +#include "kvm_s390x.h"  
>>>>>
>>>>> Do we still need that? cpu.h should theoretically be independent from
>>>>> kvm now, shouldn't it? And for the .c files, it's likely better to
>>>>> include kvm_s390x.h directly there if they require it.  
>>>>
>>>> It should work if:
>>>>
>>>> a) we include "sysemu/kvm.h" in hw/s390x/s390-virtio-ccw.c
>>>> b) we include "target/s390x/kvm_s390x.h" in hw/intc/s390_flic_kvm.c
>>>> c) we include "kvm_s390x.h" in "internal.h"
>>>> d) we drop the "KVMState" parameter from kvm_s390_get_memslot_count()
>>>> (separate patch)  
>>>
>>> Ok, that's rather a lot of changes already. Maybe that's rather
>>> something for a later patch instead, so I'm also fine if you keep in
>>> #include "kvm_s390x.h" in cpu.h here.
>>
>> Yup, let's defer it. It's not like that is the last series that will
>> ever go in.
>>
> 
> Sorry guys, already creating patches :)
> 

s/guys/folks/ ;)

-- 

Thanks,

David

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

* Re: [Qemu-devel] [PATCH v1 for-2.11 09/10] s390x/kvm: move KVM declarations and stubs to separate files
  2017-08-17 13:06         ` Thomas Huth
  2017-08-17 13:07           ` Cornelia Huck
@ 2017-08-17 13:30           ` Philippe Mathieu-Daudé
  1 sibling, 0 replies; 43+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-08-17 13:30 UTC (permalink / raw)
  To: Thomas Huth, David Hildenbrand, qemu-devel
  Cc: cohuck, borntraeger, Aurelien Jarno, rth

On 08/17/2017 10:06 AM, Thomas Huth wrote:
> On 17.08.2017 14:55, David Hildenbrand wrote:
>> On 17.08.2017 14:35, Thomas Huth wrote:
>>> On 17.08.2017 13:40, Philippe Mathieu-Daudé wrote:
>>>> On 08/17/2017 06:22 AM, David Hildenbrand wrote:
> [...]
>>>>>    feat-src = $(SRC_PATH)/target/$(TARGET_BASE_ARCH)/
>>>>> diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
>>>>> index 74d5b35..aeb730c 100644
>>>>> --- a/target/s390x/cpu.h
>>>>> +++ b/target/s390x/cpu.h
>>>>> @@ -41,6 +41,7 @@
>>>>>    #include "exec/cpu-all.h"
>>>>>      #include "fpu/softfloat.h"
>>>>> +#include "kvm_s390x.h"
>>>
>>> Do we still need that? cpu.h should theoretically be independent from
>>> kvm now, shouldn't it? And for the .c files, it's likely better to
>>> include kvm_s390x.h directly there if they require it.
>>
>> It should work if:
>>
>> a) we include "sysemu/kvm.h" in hw/s390x/s390-virtio-ccw.c
>> b) we include "target/s390x/kvm_s390x.h" in hw/intc/s390_flic_kvm.c

that sounds odd... but git grep gives:

hw/i386/kvm/apic.c:19:#include "target/i386/kvm_i386.h"
hw/ppc/spapr_cpu_core.c:17:#include "target/ppc/kvm_ppc.h"

>> c) we include "kvm_s390x.h" in "internal.h"
>> d) we drop the "KVMState" parameter from kvm_s390_get_memslot_count()
>> (separate patch)
> 
> Ok, that's rather a lot of changes already. Maybe that's rather
> something for a later patch instead, so I'm also fine if you keep in
> #include "kvm_s390x.h" in cpu.h here.

there is still time until 2.11 :)

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

* Re: [Qemu-devel] [PATCH v1 for-2.11 01/10] target/s390x: move cc_name() to cc_helper.c
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 01/10] target/s390x: move cc_name() to cc_helper.c David Hildenbrand
  2017-08-17 11:01   ` Thomas Huth
@ 2017-08-18  3:47   ` Richard Henderson
  2017-08-18  9:59   ` David Hildenbrand
  2 siblings, 0 replies; 43+ messages in thread
From: Richard Henderson @ 2017-08-18  3:47 UTC (permalink / raw)
  To: David Hildenbrand, qemu-devel
  Cc: thuth, cohuck, borntraeger, Aurelien Jarno, rth

On 08/17/2017 02:22 AM, David Hildenbrand wrote:
> +const char *cc_name(int cc_op)

While we're changing things up a tich, enum cc_op?

> +{
> +    static const char *cc_names[] = {

static const char * const cc_names[]

Otherwise,
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>


r~

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

* Re: [Qemu-devel] [PATCH v1 for-2.11 02/10] target/s390x: move cpu_mmu_idx_to_asc() to excp_helper.c
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 02/10] target/s390x: move cpu_mmu_idx_to_asc() to excp_helper.c David Hildenbrand
  2017-08-17 11:03   ` Thomas Huth
@ 2017-08-18  3:52   ` Richard Henderson
  1 sibling, 0 replies; 43+ messages in thread
From: Richard Henderson @ 2017-08-18  3:52 UTC (permalink / raw)
  To: David Hildenbrand, qemu-devel
  Cc: thuth, cohuck, borntraeger, Aurelien Jarno, rth

On 08/17/2017 02:22 AM, David Hildenbrand wrote:
> Only used in that file.
> 
> Signed-off-by: David Hildenbrand <david@redhat.com>
> ---
>  target/s390x/cpu.h         | 14 --------------
>  target/s390x/excp_helper.c | 14 ++++++++++++++
>  2 files changed, 14 insertions(+), 14 deletions(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>


r~

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

* Re: [Qemu-devel] [PATCH v1 for-2.11 03/10] target/s390x: move psw_key_valid() to mem_helper.c
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 03/10] target/s390x: move psw_key_valid() to mem_helper.c David Hildenbrand
  2017-08-17 11:04   ` Thomas Huth
@ 2017-08-18  3:54   ` Richard Henderson
  1 sibling, 0 replies; 43+ messages in thread
From: Richard Henderson @ 2017-08-18  3:54 UTC (permalink / raw)
  To: David Hildenbrand, qemu-devel
  Cc: thuth, cohuck, borntraeger, Aurelien Jarno, rth

On 08/17/2017 02:22 AM, David Hildenbrand wrote:
> Only used in that file.
> 
> Signed-off-by: David Hildenbrand <david@redhat.com>
> ---
>  target/s390x/cpu.h        | 11 -----------
>  target/s390x/mem_helper.c | 11 +++++++++++
>  2 files changed, 11 insertions(+), 11 deletions(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>


r~

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

* Re: [Qemu-devel] [PATCH v1 for-2.11 04/10] target/s390x: move s390_do_cpu_reset() to diag.c
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 04/10] target/s390x: move s390_do_cpu_reset() to diag.c David Hildenbrand
  2017-08-17 11:05   ` Thomas Huth
@ 2017-08-18  3:55   ` Richard Henderson
  1 sibling, 0 replies; 43+ messages in thread
From: Richard Henderson @ 2017-08-18  3:55 UTC (permalink / raw)
  To: David Hildenbrand, qemu-devel
  Cc: thuth, cohuck, borntraeger, Aurelien Jarno, rth

On 08/17/2017 02:22 AM, David Hildenbrand wrote:
> Only used in that file. Also drop the comment, not really needed.
> 
> Signed-off-by: David Hildenbrand <david@redhat.com>
> ---
>  target/s390x/cpu.h  | 7 -------
>  target/s390x/diag.c | 7 +++++++
>  2 files changed, 7 insertions(+), 7 deletions(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>


r~

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

* Re: [Qemu-devel] [PATCH v1 for-2.11 05/10] target/s390x: move get_per_in_range() to misc_helper.c
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 05/10] target/s390x: move get_per_in_range() to misc_helper.c David Hildenbrand
  2017-08-17 11:09   ` Thomas Huth
@ 2017-08-18  3:56   ` Richard Henderson
  1 sibling, 0 replies; 43+ messages in thread
From: Richard Henderson @ 2017-08-18  3:56 UTC (permalink / raw)
  To: David Hildenbrand, qemu-devel
  Cc: thuth, cohuck, borntraeger, Aurelien Jarno, rth

On 08/17/2017 02:22 AM, David Hildenbrand wrote:
> Only used in that file.
> 
> Signed-off-by: David Hildenbrand <david@redhat.com>
> ---
>  target/s390x/cpu.h         | 11 -----------
>  target/s390x/misc_helper.c | 11 +++++++++++
>  2 files changed, 11 insertions(+), 11 deletions(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>


r~

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

* Re: [Qemu-devel] [PATCH v1 for-2.11 09/10] s390x/kvm: move KVM declarations and stubs to separate files
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 09/10] s390x/kvm: move KVM declarations and stubs to separate files David Hildenbrand
       [not found]   ` <f2b025c6-bfd9-2b01-497c-d08f262bd0d5@amsat.org>
@ 2017-08-18  4:05   ` Richard Henderson
  1 sibling, 0 replies; 43+ messages in thread
From: Richard Henderson @ 2017-08-18  4:05 UTC (permalink / raw)
  To: David Hildenbrand, qemu-devel
  Cc: thuth, cohuck, borntraeger, Aurelien Jarno, rth

On 08/17/2017 02:22 AM, David Hildenbrand wrote:
> Let's do it just like the other architectures. Introduce kvm-stub.c
> for stubs and kvm_s390x.h for the declarations.
> 
> Add a fake declaration of struct kvm_s390_irq so we don't need other
> ugly CONFIG_KVM checks.
> 
> Change license to GPL2+ and keep copyright notice.
> 
> Suggested-by: Thomas Huth <thuth@redhat.com>
> Signed-off-by: David Hildenbrand <david@redhat.com>
> ---
>  target/s390x/Makefile.objs |   1 +
>  target/s390x/cpu.h         | 121 +--------------------------------------------
>  target/s390x/kvm-stub.c    | 111 +++++++++++++++++++++++++++++++++++++++++
>  target/s390x/kvm_s390x.h   |  51 +++++++++++++++++++
>  4 files changed, 164 insertions(+), 120 deletions(-)
>  create mode 100644 target/s390x/kvm-stub.c
>  create mode 100644 target/s390x/kvm_s390x.h

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>


r~

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

* Re: [Qemu-devel] [PATCH v1 for-2.11 01/10] target/s390x: move cc_name() to cc_helper.c
  2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 01/10] target/s390x: move cc_name() to cc_helper.c David Hildenbrand
  2017-08-17 11:01   ` Thomas Huth
  2017-08-18  3:47   ` Richard Henderson
@ 2017-08-18  9:59   ` David Hildenbrand
  2017-08-18 10:04     ` Thomas Huth
  2 siblings, 1 reply; 43+ messages in thread
From: David Hildenbrand @ 2017-08-18  9:59 UTC (permalink / raw)
  To: qemu-devel; +Cc: rth, Aurelien Jarno, thuth, cohuck, borntraeger

On 17.08.2017 11:22, David Hildenbrand wrote:
> While at it, move the translations into the function.
> 
> Signed-off-by: David Hildenbrand <david@redhat.com>
> ---
>  target/s390x/cc_helper.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
>  target/s390x/cpu.h       | 48 +-----------------------------------------------
>  2 files changed, 49 insertions(+), 47 deletions(-)
> 
> diff --git a/target/s390x/cc_helper.c b/target/s390x/cc_helper.c
> index 1cf8551..a4562e5 100644
> --- a/target/s390x/cc_helper.c
> +++ b/target/s390x/cc_helper.c
> @@ -31,6 +31,54 @@
>  #define HELPER_LOG(x...)
>  #endif
>  
> +const char *cc_name(int cc_op)
> +{
> +    static const char *cc_names[] = {
> +        [CC_OP_CONST0]    = "CC_OP_CONST0",
> +        [CC_OP_CONST1]    = "CC_OP_CONST1",
> +        [CC_OP_CONST2]    = "CC_OP_CONST2",
> +        [CC_OP_CONST3]    = "CC_OP_CONST3",
> +        [CC_OP_DYNAMIC]   = "CC_OP_DYNAMIC",
> +        [CC_OP_STATIC]    = "CC_OP_STATIC",
> +        [CC_OP_NZ]        = "CC_OP_NZ",
> +        [CC_OP_LTGT_32]   = "CC_OP_LTGT_32",
> +        [CC_OP_LTGT_64]   = "CC_OP_LTGT_64",
> +        [CC_OP_LTUGTU_32] = "CC_OP_LTUGTU_32",
> +        [CC_OP_LTUGTU_64] = "CC_OP_LTUGTU_64",
> +        [CC_OP_LTGT0_32]  = "CC_OP_LTGT0_32",
> +        [CC_OP_LTGT0_64]  = "CC_OP_LTGT0_64",
> +        [CC_OP_ADD_64]    = "CC_OP_ADD_64",
> +        [CC_OP_ADDU_64]   = "CC_OP_ADDU_64",
> +        [CC_OP_ADDC_64]   = "CC_OP_ADDC_64",
> +        [CC_OP_SUB_64]    = "CC_OP_SUB_64",
> +        [CC_OP_SUBU_64]   = "CC_OP_SUBU_64",
> +        [CC_OP_SUBB_64]   = "CC_OP_SUBB_64",
> +        [CC_OP_ABS_64]    = "CC_OP_ABS_64",
> +        [CC_OP_NABS_64]   = "CC_OP_NABS_64",
> +        [CC_OP_ADD_32]    = "CC_OP_ADD_32",
> +        [CC_OP_ADDU_32]   = "CC_OP_ADDU_32",
> +        [CC_OP_ADDC_32]   = "CC_OP_ADDC_32",
> +        [CC_OP_SUB_32]    = "CC_OP_SUB_32",
> +        [CC_OP_SUBU_32]   = "CC_OP_SUBU_32",
> +        [CC_OP_SUBB_32]   = "CC_OP_SUBB_32",
> +        [CC_OP_ABS_32]    = "CC_OP_ABS_32",
> +        [CC_OP_NABS_32]   = "CC_OP_NABS_32",
> +        [CC_OP_COMP_32]   = "CC_OP_COMP_32",
> +        [CC_OP_COMP_64]   = "CC_OP_COMP_64",
> +        [CC_OP_TM_32]     = "CC_OP_TM_32",
> +        [CC_OP_TM_64]     = "CC_OP_TM_64",
> +        [CC_OP_NZ_F32]    = "CC_OP_NZ_F32",
> +        [CC_OP_NZ_F64]    = "CC_OP_NZ_F64",
> +        [CC_OP_NZ_F128]   = "CC_OP_NZ_F128",
> +        [CC_OP_ICM]       = "CC_OP_ICM",
> +        [CC_OP_SLA_32]    = "CC_OP_SLA_32",
> +        [CC_OP_SLA_64]    = "CC_OP_SLA_64",
> +        [CC_OP_FLOGR]     = "CC_OP_FLOGR",
> +    };
> +
> +    return cc_names[cc_op];
> +}
> +
>  static uint32_t cc_calc_ltgt_32(int32_t src, int32_t dst)
>  {
>      if (src == dst) {
> diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
> index 29fdd5d..3e798ef 100644
> --- a/target/s390x/cpu.h
> +++ b/target/s390x/cpu.h
> @@ -744,53 +744,7 @@ enum cc_op {
>      CC_OP_MAX
>  };
>  
> -static const char *cc_names[] = {
> -    [CC_OP_CONST0]    = "CC_OP_CONST0",
> -    [CC_OP_CONST1]    = "CC_OP_CONST1",
> -    [CC_OP_CONST2]    = "CC_OP_CONST2",
> -    [CC_OP_CONST3]    = "CC_OP_CONST3",
> -    [CC_OP_DYNAMIC]   = "CC_OP_DYNAMIC",
> -    [CC_OP_STATIC]    = "CC_OP_STATIC",
> -    [CC_OP_NZ]        = "CC_OP_NZ",
> -    [CC_OP_LTGT_32]   = "CC_OP_LTGT_32",
> -    [CC_OP_LTGT_64]   = "CC_OP_LTGT_64",
> -    [CC_OP_LTUGTU_32] = "CC_OP_LTUGTU_32",
> -    [CC_OP_LTUGTU_64] = "CC_OP_LTUGTU_64",
> -    [CC_OP_LTGT0_32]  = "CC_OP_LTGT0_32",
> -    [CC_OP_LTGT0_64]  = "CC_OP_LTGT0_64",
> -    [CC_OP_ADD_64]    = "CC_OP_ADD_64",
> -    [CC_OP_ADDU_64]   = "CC_OP_ADDU_64",
> -    [CC_OP_ADDC_64]   = "CC_OP_ADDC_64",
> -    [CC_OP_SUB_64]    = "CC_OP_SUB_64",
> -    [CC_OP_SUBU_64]   = "CC_OP_SUBU_64",
> -    [CC_OP_SUBB_64]   = "CC_OP_SUBB_64",
> -    [CC_OP_ABS_64]    = "CC_OP_ABS_64",
> -    [CC_OP_NABS_64]   = "CC_OP_NABS_64",
> -    [CC_OP_ADD_32]    = "CC_OP_ADD_32",
> -    [CC_OP_ADDU_32]   = "CC_OP_ADDU_32",
> -    [CC_OP_ADDC_32]   = "CC_OP_ADDC_32",
> -    [CC_OP_SUB_32]    = "CC_OP_SUB_32",
> -    [CC_OP_SUBU_32]   = "CC_OP_SUBU_32",
> -    [CC_OP_SUBB_32]   = "CC_OP_SUBB_32",
> -    [CC_OP_ABS_32]    = "CC_OP_ABS_32",
> -    [CC_OP_NABS_32]   = "CC_OP_NABS_32",
> -    [CC_OP_COMP_32]   = "CC_OP_COMP_32",
> -    [CC_OP_COMP_64]   = "CC_OP_COMP_64",
> -    [CC_OP_TM_32]     = "CC_OP_TM_32",
> -    [CC_OP_TM_64]     = "CC_OP_TM_64",
> -    [CC_OP_NZ_F32]    = "CC_OP_NZ_F32",
> -    [CC_OP_NZ_F64]    = "CC_OP_NZ_F64",
> -    [CC_OP_NZ_F128]   = "CC_OP_NZ_F128",
> -    [CC_OP_ICM]       = "CC_OP_ICM",
> -    [CC_OP_SLA_32]    = "CC_OP_SLA_32",
> -    [CC_OP_SLA_64]    = "CC_OP_SLA_64",
> -    [CC_OP_FLOGR]     = "CC_OP_FLOGR",
> -};
> -
> -static inline const char *cc_name(int cc_op)
> -{
> -    return cc_names[cc_op];
> -}
> +const char *cc_name(int cc_op);
>  
>  static inline void setcc(S390CPU *cpu, uint64_t cc)
>  {
> 

Just compiled with --disable-tcg

s390_cpu_dump_state() needs cc_name. I suggest moving it to helper.c
instead. Opinions?

-- 

Thanks,

David

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

* Re: [Qemu-devel] [PATCH v1 for-2.11 01/10] target/s390x: move cc_name() to cc_helper.c
  2017-08-18  9:59   ` David Hildenbrand
@ 2017-08-18 10:04     ` Thomas Huth
  2017-08-18 10:50       ` Cornelia Huck
  0 siblings, 1 reply; 43+ messages in thread
From: Thomas Huth @ 2017-08-18 10:04 UTC (permalink / raw)
  To: David Hildenbrand, qemu-devel; +Cc: rth, Aurelien Jarno, cohuck, borntraeger

On 18.08.2017 11:59, David Hildenbrand wrote:
> On 17.08.2017 11:22, David Hildenbrand wrote:
>> While at it, move the translations into the function.
>>
>> Signed-off-by: David Hildenbrand <david@redhat.com>
>> ---
>>  target/s390x/cc_helper.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
>>  target/s390x/cpu.h       | 48 +-----------------------------------------------
>>  2 files changed, 49 insertions(+), 47 deletions(-)
[...]
> Just compiled with --disable-tcg
> 
> s390_cpu_dump_state() needs cc_name. I suggest moving it to helper.c
> instead. Opinions?

Sounds fine to me, too.

 Thomas

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

* Re: [Qemu-devel] [PATCH v1 for-2.11 01/10] target/s390x: move cc_name() to cc_helper.c
  2017-08-18 10:04     ` Thomas Huth
@ 2017-08-18 10:50       ` Cornelia Huck
  0 siblings, 0 replies; 43+ messages in thread
From: Cornelia Huck @ 2017-08-18 10:50 UTC (permalink / raw)
  To: Thomas Huth
  Cc: David Hildenbrand, qemu-devel, rth, Aurelien Jarno, borntraeger

On Fri, 18 Aug 2017 12:04:14 +0200
Thomas Huth <thuth@redhat.com> wrote:

> On 18.08.2017 11:59, David Hildenbrand wrote:
> > On 17.08.2017 11:22, David Hildenbrand wrote:  
> >> While at it, move the translations into the function.
> >>
> >> Signed-off-by: David Hildenbrand <david@redhat.com>
> >> ---
> >>  target/s390x/cc_helper.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
> >>  target/s390x/cpu.h       | 48 +-----------------------------------------------
> >>  2 files changed, 49 insertions(+), 47 deletions(-)  
> [...]
> > Just compiled with --disable-tcg
> > 
> > s390_cpu_dump_state() needs cc_name. I suggest moving it to helper.c
> > instead. Opinions?  
> 
> Sounds fine to me, too.
> 
>  Thomas
> 
> 

Agreed.

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

end of thread, other threads:[~2017-08-18 10:50 UTC | newest]

Thread overview: 43+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-08-17  9:22 [Qemu-devel] [PATCH v1 for-2.11 00/10] target/s390x: cleanup cpu.h David Hildenbrand
2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 01/10] target/s390x: move cc_name() to cc_helper.c David Hildenbrand
2017-08-17 11:01   ` Thomas Huth
2017-08-18  3:47   ` Richard Henderson
2017-08-18  9:59   ` David Hildenbrand
2017-08-18 10:04     ` Thomas Huth
2017-08-18 10:50       ` Cornelia Huck
2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 02/10] target/s390x: move cpu_mmu_idx_to_asc() to excp_helper.c David Hildenbrand
2017-08-17 11:03   ` Thomas Huth
2017-08-18  3:52   ` Richard Henderson
2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 03/10] target/s390x: move psw_key_valid() to mem_helper.c David Hildenbrand
2017-08-17 11:04   ` Thomas Huth
2017-08-18  3:54   ` Richard Henderson
2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 04/10] target/s390x: move s390_do_cpu_reset() to diag.c David Hildenbrand
2017-08-17 11:05   ` Thomas Huth
2017-08-18  3:55   ` Richard Henderson
2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 05/10] target/s390x: move get_per_in_range() to misc_helper.c David Hildenbrand
2017-08-17 11:09   ` Thomas Huth
2017-08-18  3:56   ` Richard Henderson
2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 06/10] target/s390x: introduce internal.h David Hildenbrand
2017-08-17 11:59   ` Thomas Huth
2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 07/10] target/s390x: move a couple of functions to cpu.c David Hildenbrand
2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 08/10] s390x: avoid calling kvm_ functions outside of target/s390x/ David Hildenbrand
2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 09/10] s390x/kvm: move KVM declarations and stubs to separate files David Hildenbrand
     [not found]   ` <f2b025c6-bfd9-2b01-497c-d08f262bd0d5@amsat.org>
2017-08-17 12:21     ` David Hildenbrand
2017-08-17 12:35     ` Thomas Huth
2017-08-17 12:45       ` Philippe Mathieu-Daudé
2017-08-17 12:48       ` Cornelia Huck
2017-08-17 12:53         ` David Hildenbrand
2017-08-17 13:04           ` Cornelia Huck
2017-08-17 12:55       ` David Hildenbrand
2017-08-17 13:06         ` Thomas Huth
2017-08-17 13:07           ` Cornelia Huck
2017-08-17 13:10             ` David Hildenbrand
2017-08-17 13:14               ` David Hildenbrand
2017-08-17 13:30           ` Philippe Mathieu-Daudé
2017-08-18  4:05   ` Richard Henderson
2017-08-17  9:22 ` [Qemu-devel] [PATCH v1 for-2.11 10/10] target/s390x: cleanup cpu.h David Hildenbrand
2017-08-17 12:41   ` Thomas Huth
2017-08-17 13:09     ` Cornelia Huck
2017-08-17 11:42 ` [Qemu-devel] [PATCH v1 for-2.11 00/10] " Philippe Mathieu-Daudé
2017-08-17 13:11 ` Cornelia Huck
2017-08-17 13:12   ` David Hildenbrand

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.