Skip to content

Commit 79b1e56

Browse files
committed
Merge tag 'kvm-s390-next-5.14-1' of git://git.kernel.org/pub/scm/linux/kernel/git/kvms390/linux into HEAD
KVM: s390: Features for 5.14 - new HW facilities for guests - make inline assembly more robust with KASAN and co
2 parents a01b45e + 1f703d2 commit 79b1e56

2 files changed

Lines changed: 17 additions & 9 deletions

File tree

arch/s390/kvm/kvm-s390.c

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -349,31 +349,31 @@ static void allow_cpu_feat(unsigned long nr)
349349

350350
static inline int plo_test_bit(unsigned char nr)
351351
{
352-
register unsigned long r0 asm("0") = (unsigned long) nr | 0x100;
352+
unsigned long function = (unsigned long)nr | 0x100;
353353
int cc;
354354

355355
asm volatile(
356+
" lgr 0,%[function]\n"
356357
/* Parameter registers are ignored for "test bit" */
357358
" plo 0,0,0,0(0)\n"
358359
" ipm %0\n"
359360
" srl %0,28\n"
360361
: "=d" (cc)
361-
: "d" (r0)
362-
: "cc");
362+
: [function] "d" (function)
363+
: "cc", "0");
363364
return cc == 0;
364365
}
365366

366367
static __always_inline void __insn32_query(unsigned int opcode, u8 *query)
367368
{
368-
register unsigned long r0 asm("0") = 0; /* query function */
369-
register unsigned long r1 asm("1") = (unsigned long) query;
370-
371369
asm volatile(
372-
/* Parameter regs are ignored */
370+
" lghi 0,0\n"
371+
" lgr 1,%[query]\n"
372+
/* Parameter registers are ignored */
373373
" .insn rrf,%[opc] << 16,2,4,6,0\n"
374374
:
375-
: "d" (r0), "a" (r1), [opc] "i" (opcode)
376-
: "cc", "memory");
375+
: [query] "d" ((unsigned long)query), [opc] "i" (opcode)
376+
: "cc", "memory", "0", "1");
377377
}
378378

379379
#define INSN_SORTL 0xb938
@@ -733,6 +733,10 @@ int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap)
733733
set_kvm_facility(kvm->arch.model.fac_mask, 152);
734734
set_kvm_facility(kvm->arch.model.fac_list, 152);
735735
}
736+
if (test_facility(192)) {
737+
set_kvm_facility(kvm->arch.model.fac_mask, 192);
738+
set_kvm_facility(kvm->arch.model.fac_list, 192);
739+
}
736740
r = 0;
737741
} else
738742
r = -EINVAL;

arch/s390/tools/gen_facilities.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,10 @@ static struct facility_def facility_defs[] = {
115115
12, /* AP Query Configuration Information */
116116
15, /* AP Facilities Test */
117117
156, /* etoken facility */
118+
165, /* nnpa facility */
119+
193, /* bear enhancement facility */
120+
194, /* rdp enhancement facility */
121+
196, /* processor activity instrumentation facility */
118122
-1 /* END */
119123
}
120124
},

0 commit comments

Comments
 (0)