Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

KVM: s390: selftests: Add regression tests for PFCR subfunctions

Check if the PFCR query reported in userspace coincides with the
kernel reported function list. Right now we don't mask the functions
in the kernel so they have to be the same.

Signed-off-by: Hendrik Brueckner <brueckner@linux.ibm.com>
Reviewed-by: Hariharan Mari <hari55@linux.ibm.com>
Link: https://lore.kernel.org/r/20241107152319.77816-5-brueckner@linux.ibm.com
[frankja@linux.ibm.com: Added commit description]
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
Message-ID: <20241107152319.77816-5-brueckner@linux.ibm.com>

authored by

Hendrik Brueckner and committed by
Janosch Frank
7a1f3143 85a9e680

+17 -1
+2 -1
tools/arch/s390/include/uapi/asm/kvm.h
··· 469 469 __u8 kdsa[16]; /* with MSA9 */ 470 470 __u8 sortl[32]; /* with STFLE.150 */ 471 471 __u8 dfltcc[32]; /* with STFLE.151 */ 472 - __u8 reserved[1728]; 472 + __u8 pfcr[16]; /* with STFLE.201 */ 473 + __u8 reserved[1712]; 473 474 }; 474 475 475 476 #define KVM_S390_VM_CPU_PROCESSOR_UV_FEAT_GUEST 6
+15
tools/testing/selftests/kvm/s390x/cpumodel_subfuncs_test.c
··· 214 214 : "cc", "0", "1"); 215 215 } 216 216 217 + /* 218 + * Testing Perform Function with Concurrent Results (PFCR) 219 + * CPU subfunctions's ASM block 220 + */ 221 + static void test_pfcr_asm_block(u8 (*query)[16]) 222 + { 223 + asm volatile(" lghi 0,0\n" 224 + " .insn rsy,0xeb0000000016,0,0,%[query]\n" 225 + : [query] "=QS" (*query) 226 + : 227 + : "cc", "0"); 228 + } 229 + 217 230 typedef void (*testfunc_t)(u8 (*array)[]); 218 231 219 232 struct testdef { ··· 262 249 { "SORTL", cpu_subfunc.sortl, sizeof(cpu_subfunc.sortl), test_sortl_asm_block, 150 }, 263 250 /* DFLTCC - Facility bit 151 */ 264 251 { "DFLTCC", cpu_subfunc.dfltcc, sizeof(cpu_subfunc.dfltcc), test_dfltcc_asm_block, 151 }, 252 + /* Concurrent-function facility - Facility bit 201 */ 253 + { "PFCR", cpu_subfunc.pfcr, sizeof(cpu_subfunc.pfcr), test_pfcr_asm_block, 201 }, 265 254 }; 266 255 267 256 int main(int argc, char *argv[])