[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [qemu-s390x] [PATCH] s390x/cpumodel: model PTFF subfunctions for Mul
From: |
Christian Borntraeger |
Subject: |
Re: [qemu-s390x] [PATCH] s390x/cpumodel: model PTFF subfunctions for Multiple-epoch facility |
Date: |
Mon, 5 Feb 2018 10:58:57 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.2 |
On 02/05/2018 10:34 AM, David Hildenbrand wrote:
> On 05.02.2018 10:09, David Hildenbrand wrote:
>> 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 <address@hidden>
>> ---
>> target/s390x/cpu_features.c | 5 +++++
>> target/s390x/cpu_features_def.h | 4 ++++
>> target/s390x/gen-features.c | 10 ++++++++++
>> 3 files changed, 19 insertions(+)
>>
>> diff --git a/target/s390x/cpu_features.c b/target/s390x/cpu_features.c
>> index 85d10b5710..8606e52ca0 100644
>> --- a/target/s390x/cpu_features.c
>> +++ b/target/s390x/cpu_features.c
>> @@ -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-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-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-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-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("tods", TOD_CLOCK_STEERING, "Tod-clock-steering
>> facility"),
>> FEAT_GROUP_INIT("gen13ptff", GEN13_PTFF, "PTFF enhancements introduced
>> with z13"),
>> + FEAT_GROUP_INIT("mepochptff", MEPOCH_PTFF, "PTFF enhancements
>> introduced with Multiple-epoch 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("msa2", MSA_EXT_2, "Message-security-assist-extension 2
>> facility"),
>> diff --git a/target/s390x/cpu_features_def.h
>> b/target/s390x/cpu_features_def.h
>> index 4d930871b4..7c5915c7b2 100644
>> --- a/target/s390x/cpu_features_def.h
>> +++ b/target/s390x/cpu_features_def.h
>> @@ -151,8 +151,12 @@ typedef enum {
>> S390_FEAT_PTFF_QPT,
>> S390_FEAT_PTFF_QUI,
>> S390_FEAT_PTFF_QTOU,
>> + S390_FEAT_PTFF_QSIE,
>> + S390_FEAT_PTFF_QTOUE,
>> S390_FEAT_PTFF_STO,
>> S390_FEAT_PTFF_STOU,
>> + S390_FEAT_PTFF_STOE,
>> + S390_FEAT_PTFF_STOUE,
>>
>> /* KMAC */
>> S390_FEAT_KMAC_DEA,
>> diff --git a/target/s390x/gen-features.c b/target/s390x/gen-features.c
>> index 58b6ac484e..8c04ff913f 100644
>> --- a/target/s390x/gen-features.c
>> +++ b/target/s390x/gen-features.c
>> @@ -59,6 +59,12 @@
>> S390_FEAT_PTFF_QTOU, \
>> S390_FEAT_PTFF_STOU
>>
>> +#define S390_FEAT_GROUP_MEPOCH_PTFF \
>> + S390_FEAT_PTFF_QSIE, \
>> + S390_FEAT_PTFF_QTOUE, \
>> + S390_FEAT_PTFF_STOE, \
>> + S390_FEAT_PTFF_STOUE
>> +
>> #define S390_FEAT_GROUP_MSA \
>> S390_FEAT_MSA, \
>> S390_FEAT_KMAC_DEA, \
>> @@ -219,6 +225,9 @@ static uint16_t group_TOD_CLOCK_STEERING[] = {
>> static uint16_t group_GEN13_PTFF[] = {
>> S390_FEAT_GROUP_GEN13_PTFF,
>> };
>> +static uint16_t group_MEPOCH_PTFF[] = {
>> + S390_FEAT_GROUP_MEPOCH_PTFF,
>> +};
>> static uint16_t group_MSA[] = {
>> S390_FEAT_GROUP_MSA,
>> };
>> @@ -665,6 +674,7 @@ static FeatGroupDefSpec FeatGroupDef[] = {
>> FEAT_GROUP_INITIALIZER(PLO),
>> FEAT_GROUP_INITIALIZER(TOD_CLOCK_STEERING),
>> FEAT_GROUP_INITIALIZER(GEN13_PTFF),
>> + FEAT_GROUP_INITIALIZER(MEPOCH_PTFF),
>> FEAT_GROUP_INITIALIZER(MSA),
>> FEAT_GROUP_INITIALIZER(MSA_EXT_1),
>> FEAT_GROUP_INITIALIZER(MSA_EXT_2),
>>
>
> Guess this hunk is missing:
>
> diff --git a/target/s390x/gen-features.c b/target/s390x/gen-features.c
> index 8c04ff913f..cfb371dac3 100644
> --- a/target/s390x/gen-features.c
> +++ b/target/s390x/gen-features.c
> @@ -475,6 +475,7 @@ static uint16_t full_GEN14_GA1[] = {
> S390_FEAT_CMM_NT,
> S390_FEAT_HPMA2,
> S390_FEAT_SIE_KSS,
> + S390_FEAT_GROUP_MEPOCH_PTFF,
> };
>
> /* Default features (in order of release)
>
>
> And we should most probably add this:
Can you do a respin? I can then do a test on a z14.
>
> diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c
> index bfd14723f1..deb870921b 100644
> --- a/target/s390x/kvm.c
> +++ b/target/s390x/kvm.c
> @@ -2221,6 +2221,14 @@ void kvm_s390_get_host_cpu_model(S390CPUModel *model,
> Error **errp)
> 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 */
> if (kvm_s390_cmma_available()) {
> set_bit(S390_FEAT_CMM, model->features);
>
>
> Unfortunately I don't have access to a z14.
>