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

KVM: s390: add concurrent-function facility to cpu model

Adding support for concurrent-functions facility which provides
additional subfunctions.

Signed-off-by: Hendrik Brueckner <brueckner@linux.ibm.com>
Reviewed-by: Christian Borntraeger <borntraeger@linux.ibm.com>
Link: https://lore.kernel.org/r/20241107152319.77816-2-brueckner@linux.ibm.com
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
Message-ID: <20241107152319.77816-2-brueckner@linux.ibm.com>

authored by

Hendrik Brueckner and committed by
Janosch Frank
66ff6bf5 b6380944

+25 -1
+2 -1
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
+22
arch/s390/kvm/kvm-s390.c
··· 348 348 return cc == 0; 349 349 } 350 350 351 + static __always_inline void pfcr_query(u8 (*query)[16]) 352 + { 353 + asm volatile( 354 + " lghi 0,0\n" 355 + " .insn rsy,0xeb0000000016,0,0,%[query]\n" 356 + : [query] "=QS" (*query) 357 + : 358 + : "cc", "0"); 359 + } 360 + 351 361 static __always_inline void __sortl_query(u8 (*query)[32]) 352 362 { 353 363 asm volatile( ··· 438 428 439 429 if (test_facility(151)) /* DFLTCC */ 440 430 __dfltcc_query(&kvm_s390_available_subfunc.dfltcc); 431 + 432 + if (test_facility(201)) /* PFCR */ 433 + pfcr_query(&kvm_s390_available_subfunc.pfcr); 441 434 442 435 if (MACHINE_HAS_ESOP) 443 436 allow_cpu_feat(KVM_S390_VM_CPU_FEAT_ESOP); ··· 1556 1543 ((unsigned long *) &kvm->arch.model.subfuncs.dfltcc)[1], 1557 1544 ((unsigned long *) &kvm->arch.model.subfuncs.dfltcc)[2], 1558 1545 ((unsigned long *) &kvm->arch.model.subfuncs.dfltcc)[3]); 1546 + VM_EVENT(kvm, 3, "GET: guest PFCR subfunc 0x%16.16lx.%16.16lx", 1547 + ((unsigned long *) &kvm_s390_available_subfunc.pfcr)[0], 1548 + ((unsigned long *) &kvm_s390_available_subfunc.pfcr)[1]); 1559 1549 1560 1550 return 0; 1561 1551 } ··· 1773 1757 ((unsigned long *) &kvm->arch.model.subfuncs.dfltcc)[1], 1774 1758 ((unsigned long *) &kvm->arch.model.subfuncs.dfltcc)[2], 1775 1759 ((unsigned long *) &kvm->arch.model.subfuncs.dfltcc)[3]); 1760 + VM_EVENT(kvm, 3, "GET: guest PFCR subfunc 0x%16.16lx.%16.16lx", 1761 + ((unsigned long *) &kvm_s390_available_subfunc.pfcr)[0], 1762 + ((unsigned long *) &kvm_s390_available_subfunc.pfcr)[1]); 1776 1763 1777 1764 return 0; 1778 1765 } ··· 1844 1825 ((unsigned long *) &kvm_s390_available_subfunc.dfltcc)[1], 1845 1826 ((unsigned long *) &kvm_s390_available_subfunc.dfltcc)[2], 1846 1827 ((unsigned long *) &kvm_s390_available_subfunc.dfltcc)[3]); 1828 + VM_EVENT(kvm, 3, "GET: host PFCR subfunc 0x%16.16lx.%16.16lx", 1829 + ((unsigned long *) &kvm_s390_available_subfunc.pfcr)[0], 1830 + ((unsigned long *) &kvm_s390_available_subfunc.pfcr)[1]); 1847 1831 1848 1832 return 0; 1849 1833 }
+1
arch/s390/tools/gen_facilities.c
··· 113 113 194, /* rdp enhancement facility */ 114 114 196, /* processor activity instrumentation facility */ 115 115 197, /* processor activity instrumentation extension 1 */ 116 + 201, /* concurrent-functions facility */ 116 117 -1 /* END */ 117 118 } 118 119 },