KVM: s390: provide query function for instructions returning 32 byte
authorChristian Borntraeger <borntraeger@de.ibm.com>
Wed, 20 Feb 2019 08:04:07 +0000 (03:04 -0500)
committerChristian Borntraeger <borntraeger@de.ibm.com>
Thu, 18 Apr 2019 10:57:53 +0000 (12:57 +0200)
Some of the new features have a 32byte response for the query function.
Provide a new wrapper similar to __cpacf_query. We might want to factor
this out if other users come up, as of today there is none. So let us
keep the function within KVM.

Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Reviewed-by: Collin Walling <walling@linux.ibm.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
arch/s390/kvm/kvm-s390.c

index 0dad61ccde3d6535a52e1c5c93d87a47102cbf23..336e591d94ebe9afbe32cc27f274ef75960c6609 100644 (file)
@@ -321,6 +321,19 @@ static inline int plo_test_bit(unsigned char nr)
        return cc == 0;
 }
 
+static inline void __insn32_query(unsigned int opcode, u8 query[32])
+{
+       register unsigned long r0 asm("0") = 0; /* query function */
+       register unsigned long r1 asm("1") = (unsigned long) query;
+
+       asm volatile(
+               /* Parameter regs are ignored */
+               "       .insn   rrf,%[opc] << 16,2,4,6,0\n"
+               : "=m" (*query)
+               : "d" (r0), "a" (r1), [opc] "i" (opcode)
+               : "cc");
+}
+
 static void kvm_s390_cpu_feat_init(void)
 {
        int i;