public inbox for linux-s390@vger.kernel.org
 help / color / mirror / Atom feed
* [kvm-unit-tests PATCH v1 0/4] lib: s390x: Refactor and rename vm.[ch]
@ 2022-03-30 14:43 Claudio Imbrenda
  2022-03-30 14:43 ` [kvm-unit-tests PATCH v1 1/4] s390x: remove spurious includes Claudio Imbrenda
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: Claudio Imbrenda @ 2022-03-30 14:43 UTC (permalink / raw)
  To: kvm
  Cc: linux-s390, frankja, scgl, borntraeger, pmorel, pasic, nrb, thuth,
	david

Refactor and rename vm.[ch] to hardware.[ch]

* Remove some uneeded #includes for vm.h
* Rename vm.[ch] to hardware.[ch]
* Move host_is_zvm6 to the library (was in a testcase)
* Consolidate all detection functions into detect_host, which returns
  what host system the test is running on
* Rename vm_is_* functions to host_is_*, which are then just wrappers
  around detect_host
* Move machine type macros from arch_def.h to hardware.h, add machine
  types for all known machines
* Add machine_is_* functions
* Refactor and rename get_machine_id to be a simple wrapper for stidp
* Add back get_machine_id using the stidp wrapper

Claudio Imbrenda (4):
  s390x: remove spurious includes
  lib: s390: rename and refactor vm.[ch]
  lib: s390x: functions for machine models
  lib: s390x: stidp wrapper and move get_machine_id

 s390x/Makefile           |   2 +-
 lib/s390x/asm/arch_def.h |   7 +-
 lib/s390x/hardware.h     | 134 +++++++++++++++++++++++++++++++++++++++
 lib/s390x/vm.h           |  15 -----
 lib/s390x/hardware.c     |  86 +++++++++++++++++++++++++
 lib/s390x/vm.c           |  92 ---------------------------
 s390x/cpumodel.c         |   4 +-
 s390x/mvpg-sie.c         |   1 -
 s390x/mvpg.c             |   4 +-
 s390x/pv-diags.c         |   1 -
 s390x/skey.c             |  28 +-------
 s390x/spec_ex-sie.c      |   1 -
 s390x/uv-host.c          |   4 +-
 13 files changed, 230 insertions(+), 149 deletions(-)
 create mode 100644 lib/s390x/hardware.h
 delete mode 100644 lib/s390x/vm.h
 create mode 100644 lib/s390x/hardware.c
 delete mode 100644 lib/s390x/vm.c

-- 
2.34.1


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

* [kvm-unit-tests PATCH v1 1/4] s390x: remove spurious includes
  2022-03-30 14:43 [kvm-unit-tests PATCH v1 0/4] lib: s390x: Refactor and rename vm.[ch] Claudio Imbrenda
@ 2022-03-30 14:43 ` Claudio Imbrenda
  2022-03-31 15:04   ` Janosch Frank
  2022-03-30 14:43 ` [kvm-unit-tests PATCH v1 2/4] lib: s390: rename and refactor vm.[ch] Claudio Imbrenda
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 9+ messages in thread
From: Claudio Imbrenda @ 2022-03-30 14:43 UTC (permalink / raw)
  To: kvm
  Cc: linux-s390, frankja, scgl, borntraeger, pmorel, pasic, nrb, thuth,
	david

Remove unused includes of vm.h

Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
---
 s390x/mvpg-sie.c    | 1 -
 s390x/pv-diags.c    | 1 -
 s390x/spec_ex-sie.c | 1 -
 3 files changed, 3 deletions(-)

diff --git a/s390x/mvpg-sie.c b/s390x/mvpg-sie.c
index 8ae9a52a..46a2edb6 100644
--- a/s390x/mvpg-sie.c
+++ b/s390x/mvpg-sie.c
@@ -16,7 +16,6 @@
 #include <asm/facility.h>
 #include <asm/mem.h>
 #include <alloc_page.h>
-#include <vm.h>
 #include <sclp.h>
 #include <sie.h>
 #include <snippet.h>
diff --git a/s390x/pv-diags.c b/s390x/pv-diags.c
index 110547ad..6899b859 100644
--- a/s390x/pv-diags.c
+++ b/s390x/pv-diags.c
@@ -19,7 +19,6 @@
 #include <asm/sigp.h>
 #include <smp.h>
 #include <alloc_page.h>
-#include <vm.h>
 #include <vmalloc.h>
 #include <sclp.h>
 #include <snippet.h>
diff --git a/s390x/spec_ex-sie.c b/s390x/spec_ex-sie.c
index 5dea4115..d8e25e75 100644
--- a/s390x/spec_ex-sie.c
+++ b/s390x/spec_ex-sie.c
@@ -11,7 +11,6 @@
 #include <asm/page.h>
 #include <asm/arch_def.h>
 #include <alloc_page.h>
-#include <vm.h>
 #include <sie.h>
 #include <snippet.h>
 
-- 
2.34.1


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

* [kvm-unit-tests PATCH v1 2/4] lib: s390: rename and refactor vm.[ch]
  2022-03-30 14:43 [kvm-unit-tests PATCH v1 0/4] lib: s390x: Refactor and rename vm.[ch] Claudio Imbrenda
  2022-03-30 14:43 ` [kvm-unit-tests PATCH v1 1/4] s390x: remove spurious includes Claudio Imbrenda
@ 2022-03-30 14:43 ` Claudio Imbrenda
  2022-03-31 15:15   ` Janosch Frank
  2022-03-30 14:43 ` [kvm-unit-tests PATCH v1 3/4] lib: s390x: functions for machine models Claudio Imbrenda
  2022-03-30 14:43 ` [kvm-unit-tests PATCH v1 4/4] lib: s390x: stidp wrapper and move get_machine_id Claudio Imbrenda
  3 siblings, 1 reply; 9+ messages in thread
From: Claudio Imbrenda @ 2022-03-30 14:43 UTC (permalink / raw)
  To: kvm
  Cc: linux-s390, frankja, scgl, borntraeger, pmorel, pasic, nrb, thuth,
	david

Refactor and rename vm.[ch] to hardware.[ch]

* Rename vm.[ch] to hardware.[ch]
* Consolidate all detection functions into detect_host, which returns
  what host system the test is running on
* Move host_is_zvm6 to the library (was in a testcase)
* Rename vm_is_* functions to host_is_*, which are then just wrappers
  around detect_host

Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
---
 s390x/Makefile       |  2 +-
 lib/s390x/hardware.h | 47 ++++++++++++++++++++++
 lib/s390x/vm.h       | 15 --------
 lib/s390x/hardware.c | 86 +++++++++++++++++++++++++++++++++++++++++
 lib/s390x/vm.c       | 92 --------------------------------------------
 s390x/cpumodel.c     |  4 +-
 s390x/mvpg.c         |  4 +-
 s390x/skey.c         | 28 +-------------
 8 files changed, 140 insertions(+), 138 deletions(-)
 create mode 100644 lib/s390x/hardware.h
 delete mode 100644 lib/s390x/vm.h
 create mode 100644 lib/s390x/hardware.c
 delete mode 100644 lib/s390x/vm.c

diff --git a/s390x/Makefile b/s390x/Makefile
index 53b0fe04..9d3a1fd7 100644
--- a/s390x/Makefile
+++ b/s390x/Makefile
@@ -78,7 +78,7 @@ cflatobjs += lib/s390x/sclp-console.o
 cflatobjs += lib/s390x/interrupt.o
 cflatobjs += lib/s390x/mmu.o
 cflatobjs += lib/s390x/smp.o
-cflatobjs += lib/s390x/vm.o
+cflatobjs += lib/s390x/hardware.o
 cflatobjs += lib/s390x/css_dump.o
 cflatobjs += lib/s390x/css_lib.o
 cflatobjs += lib/s390x/malloc_io.o
diff --git a/lib/s390x/hardware.h b/lib/s390x/hardware.h
new file mode 100644
index 00000000..93f817ca
--- /dev/null
+++ b/lib/s390x/hardware.h
@@ -0,0 +1,47 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * Functions to retrieve information about the host system.
+ *
+ * Copyright (c) 2020 Red Hat Inc
+ * Copyright 2022 IBM Corp.
+ *
+ * Authors:
+ *  Claudio Imbrenda <imbrenda@linux.ibm.com>
+ */
+
+#ifndef _S390X_HARDWARE_H_
+#define _S390X_HARDWARE_H_
+#include <asm/arch_def.h>
+
+enum s390_host {
+	HOST_IS_UNKNOWN,
+	HOST_IS_LPAR,
+	HOST_IS_ZVM6,
+	HOST_IS_ZVM,
+	HOST_IS_KVM,
+	HOST_IS_TCG
+};
+
+enum s390_host detect_host(void);
+
+static inline bool host_is_tcg(void)
+{
+	return detect_host() == HOST_IS_TCG;
+}
+
+static inline bool host_is_kvm(void)
+{
+	return detect_host() == HOST_IS_KVM;
+}
+
+static inline bool host_is_lpar(void)
+{
+	return detect_host() == HOST_IS_LPAR;
+}
+
+static inline bool host_is_zvm6(void)
+{
+	return detect_host() == HOST_IS_ZVM6;
+}
+
+#endif  /* _S390X_HARDWARE_H_ */
diff --git a/lib/s390x/vm.h b/lib/s390x/vm.h
deleted file mode 100644
index 4456b48c..00000000
--- a/lib/s390x/vm.h
+++ /dev/null
@@ -1,15 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-/*
- * Functions to retrieve VM-specific information
- *
- * Copyright (c) 2020 Red Hat Inc
- */
-
-#ifndef _S390X_VM_H_
-#define _S390X_VM_H_
-
-bool vm_is_tcg(void);
-bool vm_is_kvm(void);
-bool vm_is_lpar(void);
-
-#endif  /* _S390X_VM_H_ */
diff --git a/lib/s390x/hardware.c b/lib/s390x/hardware.c
new file mode 100644
index 00000000..b3f44746
--- /dev/null
+++ b/lib/s390x/hardware.c
@@ -0,0 +1,86 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * Functions to retrieve information about the host system.
+ *
+ * Copyright (c) 2020 Red Hat Inc
+ * Copyright 2022 IBM Corp.
+ *
+ * Authors:
+ *  Thomas Huth <thuth@redhat.com>
+ *  Claudio Imbrenda <imbrenda@linux.ibm.com>
+ */
+
+#include <libcflat.h>
+#include <alloc_page.h>
+#include <asm/arch_def.h>
+#include "hardware.h"
+#include "stsi.h"
+
+/* The string "QEMU" in EBCDIC */
+static const uint8_t qemu_ebcdic[] = { 0xd8, 0xc5, 0xd4, 0xe4 };
+/* The string "KVM/" in EBCDIC */
+static const uint8_t kvm_ebcdic[] = { 0xd2, 0xe5, 0xd4, 0x61 };
+/* The string "z/VM    6" in EBCDIC */
+static const uint8_t zvm6[] = { 0xa9, 0x61, 0xe5, 0xd4, 0x40, 0x40, 0x40, 0x40, 0xf6 };
+
+/* Returns true if we are running under z/VM 6.x */
+static bool check_for_zvm6(uint8_t *buf)
+{
+	int dcbt = buf[31] & 0xf;	/* descriptor block count */
+	int nr;
+
+	for (nr = 0; nr < dcbt; nr++) {
+		if (!memcmp(&buf[32 + nr * 64 + 24], zvm6, sizeof(zvm6)))
+			return true;
+	}
+	return false;
+}
+
+static enum s390_host do_detect_host(void *buf)
+{
+	struct sysinfo_3_2_2 *stsi_322 = buf;
+
+	if (stsi_get_fc() == 2)
+		return HOST_IS_LPAR;
+
+	if (stsi_get_fc() != 3)
+		return HOST_IS_UNKNOWN;
+
+	if (!stsi(buf, 1, 1, 1)) {
+		/*
+		 * If the manufacturer string is "QEMU" in EBCDIC, then we
+		 * are on TCG (otherwise the string is "IBM" in EBCDIC)
+		 */
+		if (!memcmp((char *)buf + 32, qemu_ebcdic, sizeof(qemu_ebcdic)))
+			return HOST_IS_TCG;
+	}
+
+	if (!stsi(buf, 3, 2, 2)) {
+		/*
+		 * If the manufacturer string is "KVM/" in EBCDIC, then we
+		 * are on KVM.
+		 */
+		if (!memcmp(&stsi_322->vm[0].cpi, kvm_ebcdic, sizeof(kvm_ebcdic)))
+			return HOST_IS_KVM;
+		if (check_for_zvm6(buf))
+			return HOST_IS_ZVM6;
+	}
+
+	return HOST_IS_UNKNOWN;
+}
+
+enum s390_host detect_host(void)
+{
+	static enum s390_host host = HOST_IS_UNKNOWN;
+	static bool initialized = false;
+	void *buf;
+
+	if (initialized)
+		return host;
+
+	buf = alloc_page();
+	host = do_detect_host(buf);
+	free_page(buf);
+	initialized = true;
+	return host;
+}
diff --git a/lib/s390x/vm.c b/lib/s390x/vm.c
deleted file mode 100644
index 33fb1c45..00000000
--- a/lib/s390x/vm.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-/*
- * Functions to retrieve VM-specific information
- *
- * Copyright (c) 2020 Red Hat Inc
- *
- * Authors:
- *  Thomas Huth <thuth@redhat.com>
- */
-
-#include <libcflat.h>
-#include <alloc_page.h>
-#include <asm/arch_def.h>
-#include "vm.h"
-#include "stsi.h"
-
-/**
- * Detect whether we are running with TCG (instead of KVM)
- */
-bool vm_is_tcg(void)
-{
-	const char qemu_ebcdic[] = { 0xd8, 0xc5, 0xd4, 0xe4 };
-	static bool initialized = false;
-	static bool is_tcg = false;
-	uint8_t *buf;
-
-	if (initialized)
-		return is_tcg;
-
-	if (stsi_get_fc() != 3) {
-		initialized = true;
-		return is_tcg;
-	}
-
-	buf = alloc_page();
-	assert(buf);
-
-	if (stsi(buf, 1, 1, 1))
-		goto out;
-
-	/*
-	 * If the manufacturer string is "QEMU" in EBCDIC, then we
-	 * are on TCG (otherwise the string is "IBM" in EBCDIC)
-	 */
-	is_tcg = !memcmp(&buf[32], qemu_ebcdic, sizeof(qemu_ebcdic));
-	initialized = true;
-out:
-	free_page(buf);
-	return is_tcg;
-}
-
-/**
- * Detect whether we are running with KVM
- */
-bool vm_is_kvm(void)
-{
-	/* EBCDIC for "KVM/" */
-	const uint8_t kvm_ebcdic[] = { 0xd2, 0xe5, 0xd4, 0x61 };
-	static bool initialized;
-	static bool is_kvm;
-	struct sysinfo_3_2_2 *stsi_322;
-
-	if (initialized)
-		return is_kvm;
-
-	if (stsi_get_fc() != 3 || vm_is_tcg()) {
-		initialized = true;
-		return is_kvm;
-	}
-
-	stsi_322 = alloc_page();
-	assert(stsi_322);
-
-	if (stsi(stsi_322, 3, 2, 2))
-		goto out;
-
-	/*
-	 * If the manufacturer string is "KVM/" in EBCDIC, then we
-	 * are on KVM.
-	 */
-	is_kvm = !memcmp(&stsi_322->vm[0].cpi, kvm_ebcdic, sizeof(kvm_ebcdic));
-	initialized = true;
-out:
-	free_page(stsi_322);
-	return is_kvm;
-}
-
-bool vm_is_lpar(void)
-{
-	return stsi_get_fc() == 2;
-}
-
diff --git a/s390x/cpumodel.c b/s390x/cpumodel.c
index 23ccf842..5c0b73e0 100644
--- a/s390x/cpumodel.c
+++ b/s390x/cpumodel.c
@@ -10,7 +10,7 @@
  */
 
 #include <asm/facility.h>
-#include <vm.h>
+#include <hardware.h>
 #include <sclp.h>
 #include <uv.h>
 #include <asm/uv.h>
@@ -118,7 +118,7 @@ int main(void)
 	for (i = 0; i < ARRAY_SIZE(dep); i++) {
 		report_prefix_pushf("%d implies %d", dep[i].facility, dep[i].implied);
 		if (test_facility(dep[i].facility)) {
-			report_xfail(dep[i].expected_tcg_fail && vm_is_tcg(),
+			report_xfail(dep[i].expected_tcg_fail && host_is_tcg(),
 				     test_facility(dep[i].implied),
 				     "implication not correct");
 		} else {
diff --git a/s390x/mvpg.c b/s390x/mvpg.c
index 2b7c6cc9..62f0fc5a 100644
--- a/s390x/mvpg.c
+++ b/s390x/mvpg.c
@@ -20,7 +20,7 @@
 #include <smp.h>
 #include <alloc_page.h>
 #include <bitops.h>
-#include <vm.h>
+#include <hardware.h>
 
 /* Used to build the appropriate test values for register 0 */
 #define KFC(x) ((x) << 10)
@@ -251,7 +251,7 @@ static void test_mmu_prot(void)
 	fresh += PAGE_SIZE;
 
 	/* Known issue in TCG: CCO flag is not honoured */
-	if (vm_is_tcg()) {
+	if (host_is_tcg()) {
 		report_prefix_push("TCG");
 		report_skip("destination invalid");
 		report_skip("source invalid");
diff --git a/s390x/skey.c b/s390x/skey.c
index 58a55436..bee9fc36 100644
--- a/s390x/skey.c
+++ b/s390x/skey.c
@@ -13,7 +13,7 @@
 #include <asm/page.h>
 #include <asm/facility.h>
 #include <asm/mem.h>
-
+#include <hardware.h>
 
 static uint8_t pagebuf[PAGE_SIZE * 2] __attribute__((aligned(PAGE_SIZE * 2)));
 
@@ -65,33 +65,9 @@ static void test_set(void)
 	       "set key test");
 }
 
-/* Returns true if we are running under z/VM 6.x */
-static bool check_for_zvm6(void)
-{
-	int dcbt;	/* Descriptor block count */
-	int nr;
-	static const unsigned char zvm6[] = {
-		/* This is "z/VM    6" in EBCDIC */
-		0xa9, 0x61, 0xe5, 0xd4, 0x40, 0x40, 0x40, 0x40, 0xf6
-	};
-
-	if (stsi(pagebuf, 3, 2, 2))
-		return false;
-
-	dcbt = pagebuf[31] & 0xf;
-
-	for (nr = 0; nr < dcbt; nr++) {
-		if (!memcmp(&pagebuf[32 + nr * 64 + 24], zvm6, sizeof(zvm6)))
-			return true;
-	}
-
-	return false;
-}
-
 static void test_priv(void)
 {
 	union skey skey;
-	bool is_zvm6 = check_for_zvm6();
 
 	memset(pagebuf, 0, PAGE_SIZE * 2);
 	report_prefix_push("privileged");
@@ -106,7 +82,7 @@ static void test_priv(void)
 	report(skey.str.acc != 3, "skey did not change on exception");
 
 	report_prefix_push("iske");
-	if (is_zvm6) {
+	if (host_is_zvm6()) {
 		/* There is a known bug with z/VM 6, so skip the test there */
 		report_skip("not working on z/VM 6");
 	} else {
-- 
2.34.1


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

* [kvm-unit-tests PATCH v1 3/4] lib: s390x: functions for machine models
  2022-03-30 14:43 [kvm-unit-tests PATCH v1 0/4] lib: s390x: Refactor and rename vm.[ch] Claudio Imbrenda
  2022-03-30 14:43 ` [kvm-unit-tests PATCH v1 1/4] s390x: remove spurious includes Claudio Imbrenda
  2022-03-30 14:43 ` [kvm-unit-tests PATCH v1 2/4] lib: s390: rename and refactor vm.[ch] Claudio Imbrenda
@ 2022-03-30 14:43 ` Claudio Imbrenda
  2022-03-31 15:21   ` Janosch Frank
  2022-03-30 14:43 ` [kvm-unit-tests PATCH v1 4/4] lib: s390x: stidp wrapper and move get_machine_id Claudio Imbrenda
  3 siblings, 1 reply; 9+ messages in thread
From: Claudio Imbrenda @ 2022-03-30 14:43 UTC (permalink / raw)
  To: kvm
  Cc: linux-s390, frankja, scgl, borntraeger, pmorel, pasic, nrb, thuth,
	david

* move existing macros for machine models to hardware.h
* add macros for all known machine models
* add machine_is_* functions
---
 lib/s390x/asm/arch_def.h |  3 --
 lib/s390x/hardware.h     | 82 ++++++++++++++++++++++++++++++++++++++++
 s390x/uv-host.c          |  4 +-
 3 files changed, 84 insertions(+), 5 deletions(-)

diff --git a/lib/s390x/asm/arch_def.h b/lib/s390x/asm/arch_def.h
index 40626d72..8d860ccf 100644
--- a/lib/s390x/asm/arch_def.h
+++ b/lib/s390x/asm/arch_def.h
@@ -219,9 +219,6 @@ static inline unsigned short stap(void)
 	return cpu_address;
 }
 
-#define MACHINE_Z15A	0x8561
-#define MACHINE_Z15B	0x8562
-
 static inline uint16_t get_machine_id(void)
 {
 	uint64_t cpuid;
diff --git a/lib/s390x/hardware.h b/lib/s390x/hardware.h
index 93f817ca..fb6565ad 100644
--- a/lib/s390x/hardware.h
+++ b/lib/s390x/hardware.h
@@ -13,6 +13,25 @@
 #define _S390X_HARDWARE_H_
 #include <asm/arch_def.h>
 
+#define MACHINE_Z900	0x2064
+#define MACHINE_Z800	0x2066
+#define MACHINE_Z990	0x2084
+#define MACHINE_Z890	0x2086
+#define MACHINE_Z9EC	0x2094
+#define MACHINE_Z9BC	0x2096
+#define MACHINE_Z10EC	0x2097
+#define MACHINE_Z10BC	0x2098
+#define MACHINE_Z196	0x2817
+#define MACHINE_Z114	0x2818
+#define MACHINE_ZEC12	0x2827
+#define MACHINE_ZBC12	0x2828
+#define MACHINE_Z13	0x2964
+#define MACHINE_Z13S	0x2965
+#define MACHINE_Z14	0x3906
+#define MACHINE_Z14ZR1	0x3907
+#define MACHINE_Z15	0x8561
+#define MACHINE_Z15T02	0x8562
+
 enum s390_host {
 	HOST_IS_UNKNOWN,
 	HOST_IS_LPAR,
@@ -44,4 +63,67 @@ static inline bool host_is_zvm6(void)
 	return detect_host() == HOST_IS_ZVM6;
 }
 
+static inline bool machine_is_z900(void)
+{
+	uint16_t machine = get_machine_id();
+
+	return machine == MACHINE_Z900 || machine == MACHINE_Z800;
+}
+
+static inline bool machine_is_z990(void)
+{
+	uint16_t machine = get_machine_id();
+
+	return machine == MACHINE_Z990 || machine == MACHINE_Z890;
+}
+
+static inline bool machine_is_z9(void)
+{
+	uint16_t machine = get_machine_id();
+
+	return machine == MACHINE_Z9EC || machine == MACHINE_Z9BC;
+}
+
+static inline bool machine_is_z10(void)
+{
+	uint16_t machine = get_machine_id();
+
+	return machine == MACHINE_Z10EC || machine == MACHINE_Z10BC;
+}
+
+static inline bool machine_is_z1xx(void)
+{
+	uint16_t machine = get_machine_id();
+
+	return machine == MACHINE_Z196 || machine == MACHINE_Z114;
+}
+
+static inline bool machine_is_z12(void)
+{
+	uint16_t machine = get_machine_id();
+
+	return machine == MACHINE_ZEC12 || machine == MACHINE_ZBC12;
+}
+
+static inline bool machine_is_z13(void)
+{
+	uint16_t machine = get_machine_id();
+
+	return machine == MACHINE_Z13 || machine == MACHINE_Z13S;
+}
+
+static inline bool machine_is_z14(void)
+{
+	uint16_t machine = get_machine_id();
+
+	return machine == MACHINE_Z14 || machine == MACHINE_Z14ZR1;
+}
+
+static inline bool machine_is_z15(void)
+{
+	uint16_t machine = get_machine_id();
+
+	return machine == MACHINE_Z15 || machine == MACHINE_Z15T02;
+}
+
 #endif  /* _S390X_HARDWARE_H_ */
diff --git a/s390x/uv-host.c b/s390x/uv-host.c
index de2e4850..d3018e3c 100644
--- a/s390x/uv-host.c
+++ b/s390x/uv-host.c
@@ -9,6 +9,7 @@
  */
 
 #include <libcflat.h>
+#include <hardware.h>
 #include <alloc.h>
 #include <vmalloc.h>
 #include <sclp.h>
@@ -111,7 +112,6 @@ static void test_config_destroy(void)
 static void test_cpu_destroy(void)
 {
 	int rc;
-	uint16_t machineid = get_machine_id();
 	struct uv_cb_nodata uvcb = {
 		.header.len = sizeof(uvcb),
 		.header.cmd = UVC_CMD_DESTROY_SEC_CPU,
@@ -126,7 +126,7 @@ static void test_cpu_destroy(void)
 	       "hdr invalid length");
 	uvcb.header.len += 8;
 
-	if (machineid != MACHINE_Z15A && machineid != MACHINE_Z15B) {
+	if (!machine_is_z15()) {
 		uvcb.handle += 1;
 		rc = uv_call(0, (uint64_t)&uvcb);
 		report(rc == 1 && uvcb.header.rc == UVC_RC_INV_CHANDLE, "invalid handle");
-- 
2.34.1


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

* [kvm-unit-tests PATCH v1 4/4] lib: s390x: stidp wrapper and move get_machine_id
  2022-03-30 14:43 [kvm-unit-tests PATCH v1 0/4] lib: s390x: Refactor and rename vm.[ch] Claudio Imbrenda
                   ` (2 preceding siblings ...)
  2022-03-30 14:43 ` [kvm-unit-tests PATCH v1 3/4] lib: s390x: functions for machine models Claudio Imbrenda
@ 2022-03-30 14:43 ` Claudio Imbrenda
  2022-03-31 15:24   ` Janosch Frank
  3 siblings, 1 reply; 9+ messages in thread
From: Claudio Imbrenda @ 2022-03-30 14:43 UTC (permalink / raw)
  To: kvm
  Cc: linux-s390, frankja, scgl, borntraeger, pmorel, pasic, nrb, thuth,
	david

Refactor get_machine_id in arch_def.h into a simple wrapper around
stidp, add back get_machine_id in hardware.h using the stidp wrapper.

Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
---
 lib/s390x/asm/arch_def.h | 4 +---
 lib/s390x/hardware.h     | 5 +++++
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/lib/s390x/asm/arch_def.h b/lib/s390x/asm/arch_def.h
index 8d860ccf..bab3c374 100644
--- a/lib/s390x/asm/arch_def.h
+++ b/lib/s390x/asm/arch_def.h
@@ -219,13 +219,11 @@ static inline unsigned short stap(void)
 	return cpu_address;
 }
 
-static inline uint16_t get_machine_id(void)
+static inline uint64_t stidp(void)
 {
 	uint64_t cpuid;
 
 	asm volatile("stidp %0" : "=Q" (cpuid));
-	cpuid = cpuid >> 16;
-	cpuid &= 0xffff;
 
 	return cpuid;
 }
diff --git a/lib/s390x/hardware.h b/lib/s390x/hardware.h
index fb6565ad..8783ae9c 100644
--- a/lib/s390x/hardware.h
+++ b/lib/s390x/hardware.h
@@ -43,6 +43,11 @@ enum s390_host {
 
 enum s390_host detect_host(void);
 
+static inline uint16_t get_machine_id(void)
+{
+	return stidp() >> 16;
+}
+
 static inline bool host_is_tcg(void)
 {
 	return detect_host() == HOST_IS_TCG;
-- 
2.34.1


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

* Re: [kvm-unit-tests PATCH v1 1/4] s390x: remove spurious includes
  2022-03-30 14:43 ` [kvm-unit-tests PATCH v1 1/4] s390x: remove spurious includes Claudio Imbrenda
@ 2022-03-31 15:04   ` Janosch Frank
  0 siblings, 0 replies; 9+ messages in thread
From: Janosch Frank @ 2022-03-31 15:04 UTC (permalink / raw)
  To: Claudio Imbrenda, kvm
  Cc: linux-s390, scgl, borntraeger, pmorel, pasic, nrb, thuth, david

On 3/30/22 16:43, Claudio Imbrenda wrote:
> Remove unused includes of vm.h

Reviewed-by: Janosch Frank <frankja@linux.ibm.com>

> 
> Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
> ---
>   s390x/mvpg-sie.c    | 1 -
>   s390x/pv-diags.c    | 1 -

I think there are more unused includes in pv-diags.c. I need to take 
another look at that.

>   s390x/spec_ex-sie.c | 1 -
>   3 files changed, 3 deletions(-)
> 
> diff --git a/s390x/mvpg-sie.c b/s390x/mvpg-sie.c
> index 8ae9a52a..46a2edb6 100644
> --- a/s390x/mvpg-sie.c
> +++ b/s390x/mvpg-sie.c
> @@ -16,7 +16,6 @@
>   #include <asm/facility.h>
>   #include <asm/mem.h>
>   #include <alloc_page.h>
> -#include <vm.h>
>   #include <sclp.h>
>   #include <sie.h>
>   #include <snippet.h>
> diff --git a/s390x/pv-diags.c b/s390x/pv-diags.c
> index 110547ad..6899b859 100644
> --- a/s390x/pv-diags.c
> +++ b/s390x/pv-diags.c
> @@ -19,7 +19,6 @@
>   #include <asm/sigp.h>
>   #include <smp.h>
>   #include <alloc_page.h>
> -#include <vm.h>
>   #include <vmalloc.h>
>   #include <sclp.h>
>   #include <snippet.h>
> diff --git a/s390x/spec_ex-sie.c b/s390x/spec_ex-sie.c
> index 5dea4115..d8e25e75 100644
> --- a/s390x/spec_ex-sie.c
> +++ b/s390x/spec_ex-sie.c
> @@ -11,7 +11,6 @@
>   #include <asm/page.h>
>   #include <asm/arch_def.h>
>   #include <alloc_page.h>
> -#include <vm.h>
>   #include <sie.h>
>   #include <snippet.h>
>   


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

* Re: [kvm-unit-tests PATCH v1 2/4] lib: s390: rename and refactor vm.[ch]
  2022-03-30 14:43 ` [kvm-unit-tests PATCH v1 2/4] lib: s390: rename and refactor vm.[ch] Claudio Imbrenda
@ 2022-03-31 15:15   ` Janosch Frank
  0 siblings, 0 replies; 9+ messages in thread
From: Janosch Frank @ 2022-03-31 15:15 UTC (permalink / raw)
  To: Claudio Imbrenda, kvm
  Cc: linux-s390, scgl, borntraeger, pmorel, pasic, nrb, thuth, david

On 3/30/22 16:43, Claudio Imbrenda wrote:
> Refactor and rename vm.[ch] to hardware.[ch]
> 
> * Rename vm.[ch] to hardware.[ch]
> * Consolidate all detection functions into detect_host, which returns
>    what host system the test is running on
> * Move host_is_zvm6 to the library (was in a testcase)

We can drop that function, we don't need to fence this anymore.

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

* Re: [kvm-unit-tests PATCH v1 3/4] lib: s390x: functions for machine models
  2022-03-30 14:43 ` [kvm-unit-tests PATCH v1 3/4] lib: s390x: functions for machine models Claudio Imbrenda
@ 2022-03-31 15:21   ` Janosch Frank
  0 siblings, 0 replies; 9+ messages in thread
From: Janosch Frank @ 2022-03-31 15:21 UTC (permalink / raw)
  To: Claudio Imbrenda, kvm
  Cc: linux-s390, scgl, borntraeger, pmorel, pasic, nrb, thuth, david

On 3/30/22 16:43, Claudio Imbrenda wrote:
> * move existing macros for machine models to hardware.h
> * add macros for all known machine models
> * add machine_is_* functions

While I appreciate the effort that you put into this I question the need 
to check for anything below z13 right now.

I'd suggest we cut down this patch to the move of the z15 defines and be 
done with it for now.

> ---
>   lib/s390x/asm/arch_def.h |  3 --
>   lib/s390x/hardware.h     | 82 ++++++++++++++++++++++++++++++++++++++++
>   s390x/uv-host.c          |  4 +-
>   3 files changed, 84 insertions(+), 5 deletions(-)
> 
> diff --git a/lib/s390x/asm/arch_def.h b/lib/s390x/asm/arch_def.h
> index 40626d72..8d860ccf 100644
> --- a/lib/s390x/asm/arch_def.h
> +++ b/lib/s390x/asm/arch_def.h
> @@ -219,9 +219,6 @@ static inline unsigned short stap(void)
>   	return cpu_address;
>   }
>   
> -#define MACHINE_Z15A	0x8561
> -#define MACHINE_Z15B	0x8562
> -
>   static inline uint16_t get_machine_id(void)
>   {
>   	uint64_t cpuid;
> diff --git a/lib/s390x/hardware.h b/lib/s390x/hardware.h
> index 93f817ca..fb6565ad 100644
> --- a/lib/s390x/hardware.h
> +++ b/lib/s390x/hardware.h
> @@ -13,6 +13,25 @@
>   #define _S390X_HARDWARE_H_
>   #include <asm/arch_def.h>
>   
> +#define MACHINE_Z900	0x2064
> +#define MACHINE_Z800	0x2066
> +#define MACHINE_Z990	0x2084
> +#define MACHINE_Z890	0x2086
> +#define MACHINE_Z9EC	0x2094
> +#define MACHINE_Z9BC	0x2096
> +#define MACHINE_Z10EC	0x2097
> +#define MACHINE_Z10BC	0x2098
> +#define MACHINE_Z196	0x2817
> +#define MACHINE_Z114	0x2818
> +#define MACHINE_ZEC12	0x2827
> +#define MACHINE_ZBC12	0x2828
> +#define MACHINE_Z13	0x2964
> +#define MACHINE_Z13S	0x2965
> +#define MACHINE_Z14	0x3906
> +#define MACHINE_Z14ZR1	0x3907
> +#define MACHINE_Z15	0x8561
> +#define MACHINE_Z15T02	0x8562
> +
>   enum s390_host {
>   	HOST_IS_UNKNOWN,
>   	HOST_IS_LPAR,
> @@ -44,4 +63,67 @@ static inline bool host_is_zvm6(void)
>   	return detect_host() == HOST_IS_ZVM6;
>   }
>   
> +static inline bool machine_is_z900(void)
> +{
> +	uint16_t machine = get_machine_id();
> +
> +	return machine == MACHINE_Z900 || machine == MACHINE_Z800;
> +}
> +
> +static inline bool machine_is_z990(void)
> +{
> +	uint16_t machine = get_machine_id();
> +
> +	return machine == MACHINE_Z990 || machine == MACHINE_Z890;
> +}
> +
> +static inline bool machine_is_z9(void)
> +{
> +	uint16_t machine = get_machine_id();
> +
> +	return machine == MACHINE_Z9EC || machine == MACHINE_Z9BC;
> +}
> +
> +static inline bool machine_is_z10(void)
> +{
> +	uint16_t machine = get_machine_id();
> +
> +	return machine == MACHINE_Z10EC || machine == MACHINE_Z10BC;
> +}
> +
> +static inline bool machine_is_z1xx(void)
> +{
> +	uint16_t machine = get_machine_id();
> +
> +	return machine == MACHINE_Z196 || machine == MACHINE_Z114;
> +}
> +
> +static inline bool machine_is_z12(void)
> +{
> +	uint16_t machine = get_machine_id();
> +
> +	return machine == MACHINE_ZEC12 || machine == MACHINE_ZBC12;
> +}
> +
> +static inline bool machine_is_z13(void)
> +{
> +	uint16_t machine = get_machine_id();
> +
> +	return machine == MACHINE_Z13 || machine == MACHINE_Z13S;
> +}
> +
> +static inline bool machine_is_z14(void)
> +{
> +	uint16_t machine = get_machine_id();
> +
> +	return machine == MACHINE_Z14 || machine == MACHINE_Z14ZR1;
> +}
> +
> +static inline bool machine_is_z15(void)
> +{
> +	uint16_t machine = get_machine_id();
> +
> +	return machine == MACHINE_Z15 || machine == MACHINE_Z15T02;
> +}
> +
>   #endif  /* _S390X_HARDWARE_H_ */
> diff --git a/s390x/uv-host.c b/s390x/uv-host.c
> index de2e4850..d3018e3c 100644
> --- a/s390x/uv-host.c
> +++ b/s390x/uv-host.c
> @@ -9,6 +9,7 @@
>    */
>   
>   #include <libcflat.h>
> +#include <hardware.h>
>   #include <alloc.h>
>   #include <vmalloc.h>
>   #include <sclp.h>
> @@ -111,7 +112,6 @@ static void test_config_destroy(void)
>   static void test_cpu_destroy(void)
>   {
>   	int rc;
> -	uint16_t machineid = get_machine_id();
>   	struct uv_cb_nodata uvcb = {
>   		.header.len = sizeof(uvcb),
>   		.header.cmd = UVC_CMD_DESTROY_SEC_CPU,
> @@ -126,7 +126,7 @@ static void test_cpu_destroy(void)
>   	       "hdr invalid length");
>   	uvcb.header.len += 8;
>   
> -	if (machineid != MACHINE_Z15A && machineid != MACHINE_Z15B) {
> +	if (!machine_is_z15()) {
>   		uvcb.handle += 1;
>   		rc = uv_call(0, (uint64_t)&uvcb);
>   		report(rc == 1 && uvcb.header.rc == UVC_RC_INV_CHANDLE, "invalid handle");


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

* Re: [kvm-unit-tests PATCH v1 4/4] lib: s390x: stidp wrapper and move get_machine_id
  2022-03-30 14:43 ` [kvm-unit-tests PATCH v1 4/4] lib: s390x: stidp wrapper and move get_machine_id Claudio Imbrenda
@ 2022-03-31 15:24   ` Janosch Frank
  0 siblings, 0 replies; 9+ messages in thread
From: Janosch Frank @ 2022-03-31 15:24 UTC (permalink / raw)
  To: Claudio Imbrenda, kvm
  Cc: linux-s390, scgl, borntraeger, pmorel, pasic, nrb, thuth, david

On 3/30/22 16:43, Claudio Imbrenda wrote:
> Refactor get_machine_id in arch_def.h into a simple wrapper around
> stidp, add back get_machine_id in hardware.h using the stidp wrapper.
> 
> Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>

Reviewed-by: Janosch Frank <frankja@linux.ibm.com>

> ---
>   lib/s390x/asm/arch_def.h | 4 +---
>   lib/s390x/hardware.h     | 5 +++++
>   2 files changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/lib/s390x/asm/arch_def.h b/lib/s390x/asm/arch_def.h
> index 8d860ccf..bab3c374 100644
> --- a/lib/s390x/asm/arch_def.h
> +++ b/lib/s390x/asm/arch_def.h
> @@ -219,13 +219,11 @@ static inline unsigned short stap(void)
>   	return cpu_address;
>   }
>   
> -static inline uint16_t get_machine_id(void)
> +static inline uint64_t stidp(void)
>   {
>   	uint64_t cpuid;
>   
>   	asm volatile("stidp %0" : "=Q" (cpuid));
> -	cpuid = cpuid >> 16;
> -	cpuid &= 0xffff;
>   
>   	return cpuid;
>   }
> diff --git a/lib/s390x/hardware.h b/lib/s390x/hardware.h
> index fb6565ad..8783ae9c 100644
> --- a/lib/s390x/hardware.h
> +++ b/lib/s390x/hardware.h
> @@ -43,6 +43,11 @@ enum s390_host {
>   
>   enum s390_host detect_host(void);
>   
> +static inline uint16_t get_machine_id(void)
> +{
> +	return stidp() >> 16;
> +}
> +
>   static inline bool host_is_tcg(void)
>   {
>   	return detect_host() == HOST_IS_TCG;


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

end of thread, other threads:[~2022-03-31 15:24 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-03-30 14:43 [kvm-unit-tests PATCH v1 0/4] lib: s390x: Refactor and rename vm.[ch] Claudio Imbrenda
2022-03-30 14:43 ` [kvm-unit-tests PATCH v1 1/4] s390x: remove spurious includes Claudio Imbrenda
2022-03-31 15:04   ` Janosch Frank
2022-03-30 14:43 ` [kvm-unit-tests PATCH v1 2/4] lib: s390: rename and refactor vm.[ch] Claudio Imbrenda
2022-03-31 15:15   ` Janosch Frank
2022-03-30 14:43 ` [kvm-unit-tests PATCH v1 3/4] lib: s390x: functions for machine models Claudio Imbrenda
2022-03-31 15:21   ` Janosch Frank
2022-03-30 14:43 ` [kvm-unit-tests PATCH v1 4/4] lib: s390x: stidp wrapper and move get_machine_id Claudio Imbrenda
2022-03-31 15:24   ` Janosch Frank

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox