Re: [kvm-unit-tests PATCH] s390x: Add specification exception interception test

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 06/07/2021 13.57, Janis Schoetterl-Glausch wrote:
Check that specification exceptions cause intercepts when
specification exception interpretation is off.
Check that specification exceptions caused by program new PSWs
cause interceptions.
We cannot assert that non program new PSW specification exceptions
are interpreted because whether interpretation occurs or not is
configuration dependent.

Signed-off-by: Janis Schoetterl-Glausch <scgl@xxxxxxxxxxxxx>
---
The patch is based on the following patch sets by Janosch:
[kvm-unit-tests PATCH 0/5] s390x: sie and uv cleanups
[kvm-unit-tests PATCH v2 0/3] s390x: Add snippet support

  s390x/Makefile             |  2 +
  lib/s390x/sie.h            |  1 +
  s390x/snippets/c/spec_ex.c | 13 ++++++
  s390x/spec_ex-sie.c        | 91 ++++++++++++++++++++++++++++++++++++++
  s390x/unittests.cfg        |  3 ++
  5 files changed, 110 insertions(+)
  create mode 100644 s390x/snippets/c/spec_ex.c
  create mode 100644 s390x/spec_ex-sie.c

diff --git a/s390x/Makefile b/s390x/Makefile
index 07af26d..b1b6536 100644
--- a/s390x/Makefile
+++ b/s390x/Makefile
@@ -24,6 +24,7 @@ tests += $(TEST_DIR)/mvpg.elf
  tests += $(TEST_DIR)/uv-host.elf
  tests += $(TEST_DIR)/edat.elf
  tests += $(TEST_DIR)/mvpg-sie.elf
+tests += $(TEST_DIR)/spec_ex-sie.elf
tests_binary = $(patsubst %.elf,%.bin,$(tests))
  ifneq ($(HOST_KEY_DOCUMENT),)
@@ -84,6 +85,7 @@ snippet_asmlib = $(SNIPPET_DIR)/c/cstart.o
  # perquisites (=guests) for the snippet hosts.
  # $(TEST_DIR)/<snippet-host>.elf: snippets = $(SNIPPET_DIR)/<c/asm>/<snippet>.gbin
  $(TEST_DIR)/mvpg-sie.elf: snippets = $(SNIPPET_DIR)/c/mvpg-snippet.gbin
+$(TEST_DIR)/spec_ex-sie.elf: snippets = $(SNIPPET_DIR)/c/spec_ex.gbin
$(SNIPPET_DIR)/asm/%.gbin: $(SNIPPET_DIR)/asm/%.o $(FLATLIBS)
  	$(OBJCOPY) -O binary $(patsubst %.gbin,%.o,$@) $@
diff --git a/lib/s390x/sie.h b/lib/s390x/sie.h
index 6ba858a..a3b8623 100644
--- a/lib/s390x/sie.h
+++ b/lib/s390x/sie.h
@@ -98,6 +98,7 @@ struct kvm_s390_sie_block {
  	uint8_t		fpf;			/* 0x0060 */
  #define ECB_GS		0x40
  #define ECB_TE		0x10
+#define ECB_SPECI	0x08
  #define ECB_SRSI	0x04
  #define ECB_HOSTPROTINT	0x02
  	uint8_t		ecb;			/* 0x0061 */
diff --git a/s390x/snippets/c/spec_ex.c b/s390x/snippets/c/spec_ex.c
new file mode 100644
index 0000000..f2daab5
--- /dev/null
+++ b/s390x/snippets/c/spec_ex.c

Please add a short header comment with the basic idea here + license information (e.g. SPDX identifier). Also in the other new file that you introduce in this patch.

@@ -0,0 +1,13 @@
+#include <stdint.h>
+#include <asm/arch_def.h>
+
+__attribute__((section(".text"))) int main(void)
+{
+	uint64_t bad_psw = 0;
+	struct psw *pgm_new = (struct psw *)464;

Is it possible to use the lib/s390x/asm/arch_def.h in snippets? If so, I'd vote for using &lowcore->pgm_new_psw instead of the magic number 464.

+	pgm_new->mask = 1UL << (63 - 12); //invalid program new PSW

Please add a space after the //
(also in the other spots in this patch)

+	pgm_new->addr = 0xdeadbeef;

Are we testing the mask or the addr here? If we're testing the mask, I'd rather use an even addr here to make sure that we do not trap because of the uneven address. Or do we just don't care?

+	asm volatile ("lpsw %0" :: "Q"(bad_psw));
+	return 0;
+}

 Thomas




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux