diff mbox series

[kvm-unit-tests,v1,3/4] lib: s390x: functions for machine models

Message ID 20220330144339.261419-4-imbrenda@linux.ibm.com (mailing list archive)
State New, archived
Headers show
Series lib: s390x: Refactor and rename vm.[ch] | expand

Commit Message

Claudio Imbrenda March 30, 2022, 2:43 p.m. UTC
* 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(-)

Comments

Janosch Frank March 31, 2022, 3:21 p.m. UTC | #1
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");
diff mbox series

Patch

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");