1
0
Fork 0
mirror of synced 2025-03-06 20:59:54 +01:00
linux/tools/testing/selftests/kvm/include/s390x/processor.h
Christoph Schlameuss 0185fbc6a2 KVM: s390: selftests: Add uc_skey VM test case
Add a test case manipulating s390 storage keys from within the ucontrol
VM.

Storage key instruction (ISKE, SSKE and RRBE) intercepts and
Keyless-subset facility are disabled on first use, where the skeys are
setup by KVM in non ucontrol VMs.

Signed-off-by: Christoph Schlameuss <schlameuss@linux.ibm.com>
Link: https://lore.kernel.org/r/20241108091620.289406-1-schlameuss@linux.ibm.com
Acked-by: Janosch Frank <frankja@linux.ibm.com>
[frankja@linux.ibm.com: Fixed patch prefix]
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
Message-ID: <20241108091620.289406-1-schlameuss@linux.ibm.com>
2024-11-11 12:05:48 +00:00

41 lines
1.2 KiB
C

/* SPDX-License-Identifier: GPL-2.0-only */
/*
* s390x processor specific defines
*/
#ifndef SELFTEST_KVM_PROCESSOR_H
#define SELFTEST_KVM_PROCESSOR_H
#include <linux/compiler.h>
/* Bits in the region/segment table entry */
#define REGION_ENTRY_ORIGIN ~0xfffUL /* region/segment table origin */
#define REGION_ENTRY_PROTECT 0x200 /* region protection bit */
#define REGION_ENTRY_NOEXEC 0x100 /* region no-execute bit */
#define REGION_ENTRY_OFFSET 0xc0 /* region table offset */
#define REGION_ENTRY_INVALID 0x20 /* invalid region table entry */
#define REGION_ENTRY_TYPE 0x0c /* region/segment table type mask */
#define REGION_ENTRY_LENGTH 0x03 /* region third length */
/* Bits in the page table entry */
#define PAGE_INVALID 0x400 /* HW invalid bit */
#define PAGE_PROTECT 0x200 /* HW read-only bit */
#define PAGE_NOEXEC 0x100 /* HW no-execute bit */
/* Page size definitions */
#define PAGE_SHIFT 12
#define PAGE_SIZE BIT_ULL(PAGE_SHIFT)
#define PAGE_MASK (~(PAGE_SIZE - 1))
/* Is there a portable way to do this? */
static inline void cpu_relax(void)
{
barrier();
}
/* Get the instruction length */
static inline int insn_length(unsigned char code)
{
return ((((int)code + 64) >> 7) + 1) << 1;
}
#endif