[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[qemu-s390x] [PULL 13/29] s390x: fix size + content of STSI blocks
From: |
Cornelia Huck |
Subject: |
[qemu-s390x] [PULL 13/29] s390x: fix size + content of STSI blocks |
Date: |
Fri, 9 Feb 2018 10:25:08 +0100 |
From: David Hildenbrand <address@hidden>
All blocks are 4k in size, which is only true for two of them right now.
Also some reserved fields were wrong, fix it and convert all reserved
fields to u8.
This also fixes the LPAR part output in /proc/sysinfo under TCG. (for
now, everything was indicated as 0)
While at it, introduce typedefs for these structs and use them in TCG/KVM
code.
Reviewed-by: Thomas Huth <address@hidden>
Signed-off-by: David Hildenbrand <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Cornelia Huck <address@hidden>
---
target/s390x/cpu.h | 46 ++++++++++++++++++++++++++--------------------
target/s390x/kvm.c | 2 +-
target/s390x/misc_helper.c | 12 ++++++------
3 files changed, 33 insertions(+), 27 deletions(-)
diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
index 76c31d970f..1475d705a4 100644
--- a/target/s390x/cpu.h
+++ b/target/s390x/cpu.h
@@ -437,29 +437,31 @@ static inline void setcc(S390CPU *cpu, uint64_t cc)
#define STSI_R1_SEL2_MASK 0x000000000000ffffULL
/* Basic Machine Configuration */
-struct sysib_111 {
- uint32_t res1[8];
+typedef struct SysIB_111 {
+ uint8_t res1[32];
uint8_t manuf[16];
uint8_t type[4];
uint8_t res2[12];
uint8_t model[16];
uint8_t sequence[16];
uint8_t plant[4];
- uint8_t res3[156];
-};
+ uint8_t res3[3996];
+} SysIB_111;
+QEMU_BUILD_BUG_ON(sizeof(SysIB_111) != 4096);
/* Basic Machine CPU */
-struct sysib_121 {
- uint32_t res1[80];
+typedef struct SysIB_121 {
+ uint8_t res1[80];
uint8_t sequence[16];
uint8_t plant[4];
uint8_t res2[2];
uint16_t cpu_addr;
- uint8_t res3[152];
-};
+ uint8_t res3[3992];
+} SysIB_121;
+QEMU_BUILD_BUG_ON(sizeof(SysIB_121) != 4096);
/* Basic Machine CPUs */
-struct sysib_122 {
+typedef struct SysIB_122 {
uint8_t res1[32];
uint32_t capability;
uint16_t total_cpus;
@@ -467,21 +469,23 @@ struct sysib_122 {
uint16_t standby_cpus;
uint16_t reserved_cpus;
uint16_t adjustments[2026];
-};
+} SysIB_122;
+QEMU_BUILD_BUG_ON(sizeof(SysIB_122) != 4096);
/* LPAR CPU */
-struct sysib_221 {
- uint32_t res1[80];
+typedef struct SysIB_221 {
+ uint8_t res1[80];
uint8_t sequence[16];
uint8_t plant[4];
uint16_t cpu_id;
uint16_t cpu_addr;
- uint8_t res3[152];
-};
+ uint8_t res3[3992];
+} SysIB_221;
+QEMU_BUILD_BUG_ON(sizeof(SysIB_221) != 4096);
/* LPAR CPUs */
-struct sysib_222 {
- uint32_t res1[32];
+typedef struct SysIB_222 {
+ uint8_t res1[32];
uint16_t lpar_num;
uint8_t res2;
uint8_t lcpuc;
@@ -494,11 +498,12 @@ struct sysib_222 {
uint8_t res3[16];
uint16_t dedicated_cpus;
uint16_t shared_cpus;
- uint8_t res4[180];
-};
+ uint8_t res4[4020];
+} SysIB_222;
+QEMU_BUILD_BUG_ON(sizeof(SysIB_222) != 4096);
/* VM CPUs */
-struct sysib_322 {
+typedef struct SysIB_322 {
uint8_t res1[31];
uint8_t count;
struct {
@@ -517,7 +522,8 @@ struct sysib_322 {
} vm[8];
uint8_t res4[1504];
uint8_t ext_names[8][256];
-};
+} SysIB_322;
+QEMU_BUILD_BUG_ON(sizeof(SysIB_322) != 4096);
/* MMU defines */
#define _ASCE_ORIGIN ~0xfffULL /* segment table origin
*/
diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c
index db5fe084ff..bfd14723f1 100644
--- a/target/s390x/kvm.c
+++ b/target/s390x/kvm.c
@@ -1675,7 +1675,7 @@ static int handle_tsch(S390CPU *cpu)
static void insert_stsi_3_2_2(S390CPU *cpu, __u64 addr, uint8_t ar)
{
- struct sysib_322 sysib;
+ SysIB_322 sysib;
int del;
if (s390_cpu_virt_mem_read(cpu, addr, ar, &sysib, sizeof(sysib))) {
diff --git a/target/s390x/misc_helper.c b/target/s390x/misc_helper.c
index 6ee7e8a64a..466231de0b 100644
--- a/target/s390x/misc_helper.c
+++ b/target/s390x/misc_helper.c
@@ -217,7 +217,7 @@ uint32_t HELPER(stsi)(CPUS390XState *env, uint64_t a0,
case STSI_LEVEL_1:
if ((sel1 == 1) && (sel2 == 1)) {
/* Basic Machine Configuration */
- struct sysib_111 sysib;
+ SysIB_111 sysib;
char type[5] = {};
memset(&sysib, 0, sizeof(sysib));
@@ -232,7 +232,7 @@ uint32_t HELPER(stsi)(CPUS390XState *env, uint64_t a0,
cpu_physical_memory_write(a0, &sysib, sizeof(sysib));
} else if ((sel1 == 2) && (sel2 == 1)) {
/* Basic Machine CPU */
- struct sysib_121 sysib;
+ SysIB_121 sysib;
memset(&sysib, 0, sizeof(sysib));
/* XXX make different for different CPUs? */
@@ -242,7 +242,7 @@ uint32_t HELPER(stsi)(CPUS390XState *env, uint64_t a0,
cpu_physical_memory_write(a0, &sysib, sizeof(sysib));
} else if ((sel1 == 2) && (sel2 == 2)) {
/* Basic Machine CPUs */
- struct sysib_122 sysib;
+ SysIB_122 sysib;
memset(&sysib, 0, sizeof(sysib));
stl_p(&sysib.capability, 0x443afc29);
@@ -260,7 +260,7 @@ uint32_t HELPER(stsi)(CPUS390XState *env, uint64_t a0,
{
if ((sel1 == 2) && (sel2 == 1)) {
/* LPAR CPU */
- struct sysib_221 sysib;
+ SysIB_221 sysib;
memset(&sysib, 0, sizeof(sysib));
/* XXX make different for different CPUs? */
@@ -271,7 +271,7 @@ uint32_t HELPER(stsi)(CPUS390XState *env, uint64_t a0,
cpu_physical_memory_write(a0, &sysib, sizeof(sysib));
} else if ((sel1 == 2) && (sel2 == 2)) {
/* LPAR CPUs */
- struct sysib_222 sysib;
+ SysIB_222 sysib;
memset(&sysib, 0, sizeof(sysib));
stw_p(&sysib.lpar_num, 0);
@@ -295,7 +295,7 @@ uint32_t HELPER(stsi)(CPUS390XState *env, uint64_t a0,
{
if ((sel1 == 2) && (sel2 == 2)) {
/* VM CPUs */
- struct sysib_322 sysib;
+ SysIB_322 sysib;
memset(&sysib, 0, sizeof(sysib));
sysib.count = 1;
--
2.13.6
- [qemu-s390x] [PULL 02/29] s390x/tcg: deliver multiple interrupts in a row, (continued)
- [qemu-s390x] [PULL 02/29] s390x/tcg: deliver multiple interrupts in a row, Cornelia Huck, 2018/02/09
- [qemu-s390x] [PULL 04/29] s390x/tcg: simplify lookup of flic, Cornelia Huck, 2018/02/09
- [qemu-s390x] [PULL 08/29] s390x/tcg: tolerate wrong wakeups due to floating interrupts, Cornelia Huck, 2018/02/09
- [qemu-s390x] [PULL 07/29] s390x/flic: no need to call s390_io_interrupt() from flic, Cornelia Huck, 2018/02/09
- [qemu-s390x] [PULL 06/29] s390x/flic: factor out injection of floating interrupts, Cornelia Huck, 2018/02/09
- [qemu-s390x] [PULL 11/29] s390x/flic: implement qemu_s390_clear_io_flic(), Cornelia Huck, 2018/02/09
- [qemu-s390x] [PULL 05/29] s390x/tcg: simplify machine check handling, Cornelia Huck, 2018/02/09
- [qemu-s390x] [PULL 10/29] s390x/tcg: implement TEST PENDING INTERRUPTION, Cornelia Huck, 2018/02/09
- [qemu-s390x] [PULL 12/29] s390x/flic: optimize CPU wakeup for TCG, Cornelia Huck, 2018/02/09
- [qemu-s390x] [PULL 09/29] s390x/flic: make floating interrupts on TCG actually floating, Cornelia Huck, 2018/02/09
- [qemu-s390x] [PULL 13/29] s390x: fix size + content of STSI blocks,
Cornelia Huck <=
- [qemu-s390x] [PULL 14/29] s390x/tcg: STSI overhaul, Cornelia Huck, 2018/02/09
- [qemu-s390x] [PULL 18/29] s390x/kvm: cache the kvm flic in a central function, Cornelia Huck, 2018/02/09
- [qemu-s390x] [PULL 17/29] s390x/tcg: cache the qemu flic in a central function, Cornelia Huck, 2018/02/09
- [qemu-s390x] [PULL 16/29] configure: s390x supports mttcg now, Cornelia Huck, 2018/02/09
- [qemu-s390x] [PULL 15/29] s390x/tcg: remove SMP warning, Cornelia Huck, 2018/02/09
- [qemu-s390x] [PULL 20/29] s390x/sclp: fix event mask handling, Cornelia Huck, 2018/02/09
- [qemu-s390x] [PULL 21/29] s390x/tcg: wire up pci instructions, Cornelia Huck, 2018/02/09
- [qemu-s390x] [PULL 22/29] s390x/cpumodel: allow zpci features in qemu model, Cornelia Huck, 2018/02/09
- [qemu-s390x] [PULL 23/29] s390x/cpumodel: model PTFF subfunctions for Multiple-epoch facility, Cornelia Huck, 2018/02/09
- [qemu-s390x] [PULL 24/29] s390x/pci: fixup the code walking IOMMU tables, Cornelia Huck, 2018/02/09