Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cf9bdd35 authored by Paolo Bonzini's avatar Paolo Bonzini
Browse files

Merge tag 'kvm-s390-next-4.12-3' of...

Merge tag 'kvm-s390-next-4.12-3' of git://git.kernel.org/pub/scm/linux/kernel/git/kvms390/linux into HEAD

KVM: s390: MSA8 feature for guests

- Detect all function codes for KMA and export the features
  for use in the cpu model
parents e891a32e e000b8e0
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -140,7 +140,8 @@ struct kvm_s390_vm_cpu_subfunc {
       u8 kmo[16];           # valid with Message-Security-Assist-Extension 4
       u8 pcc[16];           # valid with Message-Security-Assist-Extension 4
       u8 ppno[16];          # valid with Message-Security-Assist-Extension 5
       u8 reserved[1824];    # reserved for future instructions
       u8 kma[16];           # valid with Message-Security-Assist-Extension 8
       u8 reserved[1808];    # reserved for future instructions
};

Parameters: address of a buffer to load the subfunction blocks from.
+3 −2
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@
#define CPACF_PCC		0xb92c		/* MSA4 */
#define CPACF_KMCTR		0xb92d		/* MSA4 */
#define CPACF_PPNO		0xb93c		/* MSA5 */
#define CPACF_KMA		0xb929		/* MSA8 */

/*
 * En/decryption modifier bits
@@ -149,8 +150,8 @@ static inline void __cpacf_query(unsigned int opcode, cpacf_mask_t *mask)

	asm volatile(
		"	spm 0\n" /* pckmo doesn't change the cc */
		/* Parameter registers are ignored, but may not be 0 */
		"0:	.insn	rrf,%[opc] << 16,2,2,2,0\n"
		/* Parameter regs are ignored, but must be nonzero and unique */
		"0:	.insn	rrf,%[opc] << 16,2,4,6,0\n"
		"	brc	1,0b\n"	/* handle partial completion */
		: "=m" (*mask)
		: [fc] "d" (r0), [pba] "a" (r1), [opc] "i" (opcode)
+2 −1
Original line number Diff line number Diff line
@@ -141,7 +141,8 @@ struct kvm_s390_vm_cpu_subfunc {
	__u8 kmo[16];		/* with MSA4 */
	__u8 pcc[16];		/* with MSA4 */
	__u8 ppno[16];		/* with MSA5 */
	__u8 reserved[1824];
	__u8 kma[16];		/* with MSA8 */
	__u8 reserved[1808];
};

/* kvm attributes for crypto */
+4 −0
Original line number Diff line number Diff line
@@ -276,6 +276,10 @@ static void kvm_s390_cpu_feat_init(void)
		__cpacf_query(CPACF_PPNO, (cpacf_mask_t *)
			      kvm_s390_available_subfunc.ppno);

	if (test_facility(146)) /* MSA8 */
		__cpacf_query(CPACF_KMA, (cpacf_mask_t *)
			      kvm_s390_available_subfunc.kma);

	if (MACHINE_HAS_ESOP)
		allow_cpu_feat(KVM_S390_VM_CPU_FEAT_ESOP);
	/*
+1 −0
Original line number Diff line number Diff line
@@ -82,6 +82,7 @@ static struct facility_def facility_defs[] = {
			78, /* enhanced-DAT 2 */
			130, /* instruction-execution-protection */
			131, /* enhanced-SOP 2 and side-effect */
			146, /* msa extension 8 */
			-1  /* END */
		}
	},
Loading