mirror of
https://github.com/qemu/qemu.git
synced 2024-11-25 03:43:37 +08:00
s390x: pv: Fence additional unavailable SCLP facilities for PV guests
There's no VSIE support for a protected guest, so let's better not
advertise it and its support facilities.
Fixes: c3347ed0d2
("s390x: protvirt: Support unpack facility")
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Message-Id: <20201211105109.2913-1-frankja@linux.ibm.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
This commit is contained in:
parent
a05f8ecd88
commit
10248418b4
@ -107,8 +107,45 @@ void s390_fill_feat_block(const S390FeatBitmap features, S390FeatType type,
|
||||
feat = find_next_bit(features, S390_FEAT_MAX, feat + 1);
|
||||
}
|
||||
|
||||
if (type == S390_FEAT_TYPE_SCLP_FAC134 && s390_is_pv()) {
|
||||
if (!s390_is_pv()) {
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Some facilities are not available for CPUs in protected mode:
|
||||
* - All SIE facilities because SIE is not available
|
||||
* - DIAG318
|
||||
*
|
||||
* As VMs can move in and out of protected mode the CPU model
|
||||
* doesn't protect us from that problem because it is only
|
||||
* validated at the start of the VM.
|
||||
*/
|
||||
switch (type) {
|
||||
case S390_FEAT_TYPE_SCLP_CPU:
|
||||
clear_be_bit(s390_feat_def(S390_FEAT_SIE_F2)->bit, data);
|
||||
clear_be_bit(s390_feat_def(S390_FEAT_SIE_SKEY)->bit, data);
|
||||
clear_be_bit(s390_feat_def(S390_FEAT_SIE_GPERE)->bit, data);
|
||||
clear_be_bit(s390_feat_def(S390_FEAT_SIE_SIIF)->bit, data);
|
||||
clear_be_bit(s390_feat_def(S390_FEAT_SIE_SIGPIF)->bit, data);
|
||||
clear_be_bit(s390_feat_def(S390_FEAT_SIE_IB)->bit, data);
|
||||
clear_be_bit(s390_feat_def(S390_FEAT_SIE_CEI)->bit, data);
|
||||
break;
|
||||
case S390_FEAT_TYPE_SCLP_CONF_CHAR:
|
||||
clear_be_bit(s390_feat_def(S390_FEAT_SIE_GSLS)->bit, data);
|
||||
clear_be_bit(s390_feat_def(S390_FEAT_HPMA2)->bit, data);
|
||||
clear_be_bit(s390_feat_def(S390_FEAT_SIE_KSS)->bit, data);
|
||||
break;
|
||||
case S390_FEAT_TYPE_SCLP_CONF_CHAR_EXT:
|
||||
clear_be_bit(s390_feat_def(S390_FEAT_SIE_64BSCAO)->bit, data);
|
||||
clear_be_bit(s390_feat_def(S390_FEAT_SIE_CMMA)->bit, data);
|
||||
clear_be_bit(s390_feat_def(S390_FEAT_SIE_PFMFI)->bit, data);
|
||||
clear_be_bit(s390_feat_def(S390_FEAT_SIE_IBS)->bit, data);
|
||||
break;
|
||||
case S390_FEAT_TYPE_SCLP_FAC134:
|
||||
clear_be_bit(s390_feat_def(S390_FEAT_DIAG_318)->bit, data);
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -239,8 +239,29 @@ bool s390_has_feat(S390Feat feat)
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
if (feat == S390_FEAT_DIAG_318 && s390_is_pv()) {
|
||||
return false;
|
||||
|
||||
if (s390_is_pv()) {
|
||||
switch (feat) {
|
||||
case S390_FEAT_DIAG_318:
|
||||
case S390_FEAT_HPMA2:
|
||||
case S390_FEAT_SIE_F2:
|
||||
case S390_FEAT_SIE_SKEY:
|
||||
case S390_FEAT_SIE_GPERE:
|
||||
case S390_FEAT_SIE_SIIF:
|
||||
case S390_FEAT_SIE_SIGPIF:
|
||||
case S390_FEAT_SIE_IB:
|
||||
case S390_FEAT_SIE_CEI:
|
||||
case S390_FEAT_SIE_KSS:
|
||||
case S390_FEAT_SIE_GSLS:
|
||||
case S390_FEAT_SIE_64BSCAO:
|
||||
case S390_FEAT_SIE_CMMA:
|
||||
case S390_FEAT_SIE_PFMFI:
|
||||
case S390_FEAT_SIE_IBS:
|
||||
return false;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
return test_bit(feat, cpu->model->features);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user