s390x/cpumodel: model PTFF subfunctions for Multiple-epoch facility
For now, the kernel does not properly indicate configured CPU subfunctions to the guest, but simply uses the host values (as support in KVM is still missing). That's why we missed to model the PTFF subfunctions that come with Multiple-epoch facility. Let's properly add these, along with a new feature group. Signed-off-by: David Hildenbrand <david@redhat.com> Message-Id: <20180205102935.14736-1-david@redhat.com> Tested-by: Christian Borntraeger <borntraeger@de.ibm.com> Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com> Signed-off-by: Cornelia Huck <cohuck@redhat.com>
This commit is contained in:
parent
e3fd586dfa
commit
46a99c9f73
|
@ -156,8 +156,12 @@ static const S390FeatDef s390_features[] = {
|
||||||
FEAT_INIT("ptff-qpc", S390_FEAT_TYPE_PTFF, 3, "PTFF Query Physical Clock"),
|
FEAT_INIT("ptff-qpc", S390_FEAT_TYPE_PTFF, 3, "PTFF Query Physical Clock"),
|
||||||
FEAT_INIT("ptff-qui", S390_FEAT_TYPE_PTFF, 4, "PTFF Query UTC Information"),
|
FEAT_INIT("ptff-qui", S390_FEAT_TYPE_PTFF, 4, "PTFF Query UTC Information"),
|
||||||
FEAT_INIT("ptff-qtou", S390_FEAT_TYPE_PTFF, 5, "PTFF Query TOD Offset User"),
|
FEAT_INIT("ptff-qtou", S390_FEAT_TYPE_PTFF, 5, "PTFF Query TOD Offset User"),
|
||||||
|
FEAT_INIT("ptff-qsie", S390_FEAT_TYPE_PTFF, 10, "PTFF Query Steering Information Extended"),
|
||||||
|
FEAT_INIT("ptff-qtoue", S390_FEAT_TYPE_PTFF, 13, "PTFF Query TOD Offset User Extended"),
|
||||||
FEAT_INIT("ptff-sto", S390_FEAT_TYPE_PTFF, 65, "PTFF Set TOD Offset"),
|
FEAT_INIT("ptff-sto", S390_FEAT_TYPE_PTFF, 65, "PTFF Set TOD Offset"),
|
||||||
FEAT_INIT("ptff-stou", S390_FEAT_TYPE_PTFF, 69, "PTFF Set TOD Offset User"),
|
FEAT_INIT("ptff-stou", S390_FEAT_TYPE_PTFF, 69, "PTFF Set TOD Offset User"),
|
||||||
|
FEAT_INIT("ptff-stoe", S390_FEAT_TYPE_PTFF, 73, "PTFF Set TOD Offset Extended"),
|
||||||
|
FEAT_INIT("ptff-stoue", S390_FEAT_TYPE_PTFF, 77, "PTFF Set TOD Offset User Extended"),
|
||||||
|
|
||||||
FEAT_INIT("kmac-dea", S390_FEAT_TYPE_KMAC, 1, "KMAC DEA"),
|
FEAT_INIT("kmac-dea", S390_FEAT_TYPE_KMAC, 1, "KMAC DEA"),
|
||||||
FEAT_INIT("kmac-tdea-128", S390_FEAT_TYPE_KMAC, 2, "KMAC TDEA-128"),
|
FEAT_INIT("kmac-tdea-128", S390_FEAT_TYPE_KMAC, 2, "KMAC TDEA-128"),
|
||||||
|
@ -445,6 +449,7 @@ static S390FeatGroupDef s390_feature_groups[] = {
|
||||||
FEAT_GROUP_INIT("plo", PLO, "Perform-locked-operation facility"),
|
FEAT_GROUP_INIT("plo", PLO, "Perform-locked-operation facility"),
|
||||||
FEAT_GROUP_INIT("tods", TOD_CLOCK_STEERING, "Tod-clock-steering facility"),
|
FEAT_GROUP_INIT("tods", TOD_CLOCK_STEERING, "Tod-clock-steering facility"),
|
||||||
FEAT_GROUP_INIT("gen13ptff", GEN13_PTFF, "PTFF enhancements introduced with z13"),
|
FEAT_GROUP_INIT("gen13ptff", GEN13_PTFF, "PTFF enhancements introduced with z13"),
|
||||||
|
FEAT_GROUP_INIT("mepochptff", MULTIPLE_EPOCH_PTFF, "PTFF enhancements introduced with Multiple-epoch facility"),
|
||||||
FEAT_GROUP_INIT("msa", MSA, "Message-security-assist facility"),
|
FEAT_GROUP_INIT("msa", MSA, "Message-security-assist facility"),
|
||||||
FEAT_GROUP_INIT("msa1", MSA_EXT_1, "Message-security-assist-extension 1 facility"),
|
FEAT_GROUP_INIT("msa1", MSA_EXT_1, "Message-security-assist-extension 1 facility"),
|
||||||
FEAT_GROUP_INIT("msa2", MSA_EXT_2, "Message-security-assist-extension 2 facility"),
|
FEAT_GROUP_INIT("msa2", MSA_EXT_2, "Message-security-assist-extension 2 facility"),
|
||||||
|
|
|
@ -151,8 +151,12 @@ typedef enum {
|
||||||
S390_FEAT_PTFF_QPT,
|
S390_FEAT_PTFF_QPT,
|
||||||
S390_FEAT_PTFF_QUI,
|
S390_FEAT_PTFF_QUI,
|
||||||
S390_FEAT_PTFF_QTOU,
|
S390_FEAT_PTFF_QTOU,
|
||||||
|
S390_FEAT_PTFF_QSIE,
|
||||||
|
S390_FEAT_PTFF_QTOUE,
|
||||||
S390_FEAT_PTFF_STO,
|
S390_FEAT_PTFF_STO,
|
||||||
S390_FEAT_PTFF_STOU,
|
S390_FEAT_PTFF_STOU,
|
||||||
|
S390_FEAT_PTFF_STOE,
|
||||||
|
S390_FEAT_PTFF_STOUE,
|
||||||
|
|
||||||
/* KMAC */
|
/* KMAC */
|
||||||
S390_FEAT_KMAC_DEA,
|
S390_FEAT_KMAC_DEA,
|
||||||
|
|
|
@ -59,6 +59,12 @@
|
||||||
S390_FEAT_PTFF_QTOU, \
|
S390_FEAT_PTFF_QTOU, \
|
||||||
S390_FEAT_PTFF_STOU
|
S390_FEAT_PTFF_STOU
|
||||||
|
|
||||||
|
#define S390_FEAT_GROUP_MULTIPLE_EPOCH_PTFF \
|
||||||
|
S390_FEAT_PTFF_QSIE, \
|
||||||
|
S390_FEAT_PTFF_QTOUE, \
|
||||||
|
S390_FEAT_PTFF_STOE, \
|
||||||
|
S390_FEAT_PTFF_STOUE
|
||||||
|
|
||||||
#define S390_FEAT_GROUP_MSA \
|
#define S390_FEAT_GROUP_MSA \
|
||||||
S390_FEAT_MSA, \
|
S390_FEAT_MSA, \
|
||||||
S390_FEAT_KMAC_DEA, \
|
S390_FEAT_KMAC_DEA, \
|
||||||
|
@ -219,6 +225,9 @@ static uint16_t group_TOD_CLOCK_STEERING[] = {
|
||||||
static uint16_t group_GEN13_PTFF[] = {
|
static uint16_t group_GEN13_PTFF[] = {
|
||||||
S390_FEAT_GROUP_GEN13_PTFF,
|
S390_FEAT_GROUP_GEN13_PTFF,
|
||||||
};
|
};
|
||||||
|
static uint16_t group_MULTIPLE_EPOCH_PTFF[] = {
|
||||||
|
S390_FEAT_GROUP_MULTIPLE_EPOCH_PTFF,
|
||||||
|
};
|
||||||
static uint16_t group_MSA[] = {
|
static uint16_t group_MSA[] = {
|
||||||
S390_FEAT_GROUP_MSA,
|
S390_FEAT_GROUP_MSA,
|
||||||
};
|
};
|
||||||
|
@ -466,6 +475,7 @@ static uint16_t full_GEN14_GA1[] = {
|
||||||
S390_FEAT_CMM_NT,
|
S390_FEAT_CMM_NT,
|
||||||
S390_FEAT_HPMA2,
|
S390_FEAT_HPMA2,
|
||||||
S390_FEAT_SIE_KSS,
|
S390_FEAT_SIE_KSS,
|
||||||
|
S390_FEAT_GROUP_MULTIPLE_EPOCH_PTFF,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Default features (in order of release)
|
/* Default features (in order of release)
|
||||||
|
@ -668,6 +678,7 @@ static FeatGroupDefSpec FeatGroupDef[] = {
|
||||||
FEAT_GROUP_INITIALIZER(PLO),
|
FEAT_GROUP_INITIALIZER(PLO),
|
||||||
FEAT_GROUP_INITIALIZER(TOD_CLOCK_STEERING),
|
FEAT_GROUP_INITIALIZER(TOD_CLOCK_STEERING),
|
||||||
FEAT_GROUP_INITIALIZER(GEN13_PTFF),
|
FEAT_GROUP_INITIALIZER(GEN13_PTFF),
|
||||||
|
FEAT_GROUP_INITIALIZER(MULTIPLE_EPOCH_PTFF),
|
||||||
FEAT_GROUP_INITIALIZER(MSA),
|
FEAT_GROUP_INITIALIZER(MSA),
|
||||||
FEAT_GROUP_INITIALIZER(MSA_EXT_1),
|
FEAT_GROUP_INITIALIZER(MSA_EXT_1),
|
||||||
FEAT_GROUP_INITIALIZER(MSA_EXT_2),
|
FEAT_GROUP_INITIALIZER(MSA_EXT_2),
|
||||||
|
|
|
@ -2221,6 +2221,14 @@ void kvm_s390_get_host_cpu_model(S390CPUModel *model, Error **errp)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* PTFF subfunctions might be indicated although kernel support missing */
|
||||||
|
if (!test_bit(S390_FEAT_MULTIPLE_EPOCH, model->features)) {
|
||||||
|
clear_bit(S390_FEAT_PTFF_QSIE, model->features);
|
||||||
|
clear_bit(S390_FEAT_PTFF_QTOUE, model->features);
|
||||||
|
clear_bit(S390_FEAT_PTFF_STOE, model->features);
|
||||||
|
clear_bit(S390_FEAT_PTFF_STOUE, model->features);
|
||||||
|
}
|
||||||
|
|
||||||
/* with cpu model support, CMM is only indicated if really available */
|
/* with cpu model support, CMM is only indicated if really available */
|
||||||
if (kvm_s390_cmma_available()) {
|
if (kvm_s390_cmma_available()) {
|
||||||
set_bit(S390_FEAT_CMM, model->features);
|
set_bit(S390_FEAT_CMM, model->features);
|
||||||
|
|
Loading…
Reference in a new issue