Commit 27e84d4e authored by Christian Borntraeger's avatar Christian Borntraeger Committed by Cornelia Huck
Browse files

s390x/kvm: add etoken facility



Provide the etoken facility. We need to handle cpu model, migration and
clear reset.

Signed-off-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
Acked-by: default avatarJanosch Frank <frankja@linux.ibm.com>
Message-Id: <20180731090448.36662-3-borntraeger@de.ibm.com>
Reviewed-by: default avatarDavid Hildenbrand <david@redhat.com>
Signed-off-by: default avatarCornelia Huck <cohuck@redhat.com>
parent d36f7de8
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@
 * S/390 virtual CPU header
 *
 *  Copyright (c) 2009 Ulrich Hecht
 *  Copyright IBM Corp. 2012, 2018
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
@@ -68,6 +69,8 @@ struct CPUS390XState {
    uint32_t aregs[16];    /* access registers */
    uint8_t riccb[64];     /* runtime instrumentation control */
    uint64_t gscb[4];      /* guarded storage control */
    uint64_t etoken;       /* etoken */
    uint64_t etoken_extension; /* etoken extension */

    /* Fields up to this point are not cleared by initial CPU reset */
    struct {} start_initial_reset_fields;
+2 −1
Original line number Diff line number Diff line
/*
 * CPU features/facilities for s390x
 *
 * Copyright 2016 IBM Corp.
 * Copyright IBM Corp. 2016, 2018
 *
 * Author(s): David Hildenbrand <dahi@linux.vnet.ibm.com>
 *
@@ -105,6 +105,7 @@ static const S390FeatDef s390_features[] = {
    FEAT_INIT("irbm", S390_FEAT_TYPE_STFL, 145, "Insert-reference-bits-multiple facility"),
    FEAT_INIT("msa8-base", S390_FEAT_TYPE_STFL, 146, "Message-security-assist-extension-8 facility (excluding subfunctions)"),
    FEAT_INIT("cmmnt", S390_FEAT_TYPE_STFL, 147, "CMM: ESSA-enhancement (no translate) facility"),
    FEAT_INIT("etoken", S390_FEAT_TYPE_STFL, 156, "Etoken facility"),

    /* SCLP SCCB Byte 80 - 98  (bit numbers relative to byte-80) */
    FEAT_INIT("gsls", S390_FEAT_TYPE_SCLP_CONF_CHAR, 40, "SIE: Guest-storage-limit-suppression facility"),
+2 −1
Original line number Diff line number Diff line
/*
 * CPU features/facilities for s390
 *
 * Copyright 2016 IBM Corp.
 * Copyright IBM Corp. 2016, 2018
 *
 * Author(s): Michael Mueller <mimu@linux.vnet.ibm.com>
 *            David Hildenbrand <dahi@linux.vnet.ibm.com>
@@ -93,6 +93,7 @@ typedef enum {
    S390_FEAT_INSERT_REFERENCE_BITS_MULT,
    S390_FEAT_MSA_EXT_8,
    S390_FEAT_CMM_NT,
    S390_FEAT_ETOKEN,

    /* Sclp Conf Char */
    S390_FEAT_SIE_GSLS,
+2 −1
Original line number Diff line number Diff line
/*
 * S390 feature list generator
 *
 * Copyright 2016 IBM Corp.
 * Copyright IBM Corp. 2016, 2018
 *
 * Author(s): Michael Mueller <mimu@linux.vnet.ibm.com>
 *            David Hildenbrand <dahi@linux.vnet.ibm.com>
@@ -471,6 +471,7 @@ static uint16_t full_GEN14_GA1[] = {
    S390_FEAT_GROUP_MSA_EXT_7,
    S390_FEAT_GROUP_MSA_EXT_8,
    S390_FEAT_CMM_NT,
    S390_FEAT_ETOKEN,
    S390_FEAT_HPMA2,
    S390_FEAT_SIE_KSS,
    S390_FEAT_GROUP_MULTIPLE_EPOCH_PTFF,
+11 −0
Original line number Diff line number Diff line
@@ -493,6 +493,12 @@ int kvm_arch_put_registers(CPUState *cs, int level)
        cs->kvm_run->kvm_dirty_regs |= KVM_SYNC_BPBC;
    }

    if (can_sync_regs(cs, KVM_SYNC_ETOKEN)) {
        cs->kvm_run->s.regs.etoken = env->etoken;
        cs->kvm_run->s.regs.etoken_extension  = env->etoken_extension;
        cs->kvm_run->kvm_dirty_regs |= KVM_SYNC_ETOKEN;
    }

    /* Finally the prefix */
    if (can_sync_regs(cs, KVM_SYNC_PREFIX)) {
        cs->kvm_run->s.regs.prefix = env->psa;
@@ -607,6 +613,11 @@ int kvm_arch_get_registers(CPUState *cs)
        env->bpbc = cs->kvm_run->s.regs.bpbc;
    }

    if (can_sync_regs(cs, KVM_SYNC_ETOKEN)) {
        env->etoken = cs->kvm_run->s.regs.etoken;
        env->etoken_extension = cs->kvm_run->s.regs.etoken_extension;
    }

    /* pfault parameters */
    if (can_sync_regs(cs, KVM_SYNC_PFAULT)) {
        env->pfault_token = cs->kvm_run->s.regs.pft;
Loading