KVM: selftests: sync_regs test for diag318
authorCollin Walling <walling@linux.ibm.com>
Mon, 7 Dec 2020 15:41:25 +0000 (10:41 -0500)
committerChristian Borntraeger <borntraeger@de.ibm.com>
Thu, 10 Dec 2020 12:36:05 +0000 (13:36 +0100)
commitefaa83a3736d392c61499ee3aad8690a142675cd
tree8014cee4063fca83650727d0e23ed438921dbdba
parent0cd2a787cffb5750ba2e7b5de39a6f3d1dfc17e9
KVM: selftests: sync_regs test for diag318

The DIAGNOSE 0x0318 instruction, unique to s390x, is a privileged call
that must be intercepted via SIE, handled in userspace, and the
information set by the instruction is communicated back to KVM.

To test the instruction interception, an ad-hoc handler is defined which
simply has a VM execute the instruction and then userspace will extract
the necessary info. The handler is defined such that the instruction
invocation occurs only once. It is up to the caller to determine how the
info returned by this handler should be used.

The diag318 info is communicated from userspace to KVM via a sync_regs
call. This is tested during a sync_regs test, where the diag318 info is
requested via the handler, then the info is stored in the appropriate
register in KVM via a sync registers call.

If KVM does not support diag318, then the tests will print a message
stating that diag318 was skipped, and the asserts will simply test
against a value of 0.

Signed-off-by: Collin Walling <walling@linux.ibm.com>
Link: https://lore.kernel.org/r/20201207154125.10322-1-walling@linux.ibm.com
Acked-by: Janosch Frank <frankja@linux.ibm.com>
Acked-by: Cornelia Huck <cohuck@redhat.com>
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
tools/testing/selftests/kvm/Makefile
tools/testing/selftests/kvm/include/s390x/diag318_test_handler.h [new file with mode: 0644]
tools/testing/selftests/kvm/lib/s390x/diag318_test_handler.c [new file with mode: 0644]
tools/testing/selftests/kvm/s390x/sync_regs_test.c