OSDN Git Service

KVM: s390: set host program identifier
authorCollin Walling <walling@linux.ibm.com>
Fri, 31 Aug 2018 16:51:19 +0000 (12:51 -0400)
committerChristian Borntraeger <borntraeger@de.ibm.com>
Mon, 1 Oct 2018 06:51:42 +0000 (08:51 +0200)
A host program identifier (HPID) provides information regarding the
underlying host environment. A level-2 (VM) guest will have an HPID
denoting Linux/KVM, which is set during VCPU setup. A level-3 (VM on a
VM) and beyond guest will have an HPID denoting KVM vSIE, which is set
for all shadow control blocks, overriding the original value of the
HPID.

Signed-off-by: Collin Walling <walling@linux.ibm.com>
Reviewed-by: Janosch Frank <frankja@linux.ibm.com>
Message-Id: <1535734279-10204-4-git-send-email-walling@linux.ibm.com>
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
arch/s390/include/asm/kvm_host.h
arch/s390/kvm/kvm-s390.c
arch/s390/kvm/vsie.c

index 29c940b..47a5a25 100644 (file)
@@ -237,7 +237,11 @@ struct kvm_s390_sie_block {
        psw_t   gpsw;                   /* 0x0090 */
        __u64   gg14;                   /* 0x00a0 */
        __u64   gg15;                   /* 0x00a8 */
-       __u8    reservedb0[20];         /* 0x00b0 */
+       __u8    reservedb0[8];          /* 0x00b0 */
+#define HPID_KVM       0x4
+#define HPID_VSIE      0x5
+       __u8    hpid;                   /* 0x00b8 */
+       __u8    reservedb9[11];         /* 0x00b9 */
        __u16   extcpuaddr;             /* 0x00c4 */
        __u16   eic;                    /* 0x00c6 */
        __u32   reservedc8;             /* 0x00c8 */
index f69333f..a1e8205 100644 (file)
@@ -2685,6 +2685,8 @@ int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu)
        hrtimer_init(&vcpu->arch.ckc_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
        vcpu->arch.ckc_timer.function = kvm_s390_idle_wakeup;
 
+       vcpu->arch.sie_block->hpid = HPID_KVM;
+
        kvm_s390_vcpu_crypto_setup(vcpu);
 
        return rc;
index a2b28cd..41eab96 100644 (file)
@@ -383,6 +383,8 @@ static int shadow_scb(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page)
        if (test_kvm_facility(vcpu->kvm, 156))
                scb_s->ecd |= scb_o->ecd & ECD_ETOKENF;
 
+       scb_s->hpid = HPID_VSIE;
+
        prepare_ibc(vcpu, vsie_page);
        rc = shadow_crycb(vcpu, vsie_page);
 out: