Commit 13211ea7 authored by Eric Farman's avatar Eric Farman Committed by Christian Borntraeger

KVM: s390: Enable vector support for capable guest

We finally have all the pieces in place, so let's include the
vector facility bit in the mask of available hardware facilities
for the guest to recognize.  Also, enable the vector functionality
in the guest control blocks, to avoid a possible vector data
exception that would otherwise occur when a vector instruction
is issued by the guest operating system.
Signed-off-by: default avatarEric Farman <farman@linux.vnet.ibm.com>
Reviewed-by: default avatarThomas Huth <thuth@linux.vnet.ibm.com>
Signed-off-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
parent bc17de7c
...@@ -172,7 +172,9 @@ struct kvm_s390_sie_block { ...@@ -172,7 +172,9 @@ struct kvm_s390_sie_block {
__u32 fac; /* 0x01a0 */ __u32 fac; /* 0x01a0 */
__u8 reserved1a4[20]; /* 0x01a4 */ __u8 reserved1a4[20]; /* 0x01a4 */
__u64 cbrlo; /* 0x01b8 */ __u64 cbrlo; /* 0x01b8 */
__u8 reserved1c0[30]; /* 0x01c0 */ __u8 reserved1c0[8]; /* 0x01c0 */
__u32 ecd; /* 0x01c8 */
__u8 reserved1cc[18]; /* 0x01cc */
__u64 pp; /* 0x01de */ __u64 pp; /* 0x01de */
__u8 reserved1e6[2]; /* 0x01e6 */ __u8 reserved1e6[2]; /* 0x01e6 */
__u64 itdba; /* 0x01e8 */ __u64 itdba; /* 0x01e8 */
......
...@@ -104,6 +104,7 @@ struct kvm_stats_debugfs_item debugfs_entries[] = { ...@@ -104,6 +104,7 @@ struct kvm_stats_debugfs_item debugfs_entries[] = {
unsigned long kvm_s390_fac_list_mask[] = { unsigned long kvm_s390_fac_list_mask[] = {
0xff82fffbf4fc2000UL, 0xff82fffbf4fc2000UL,
0x005c000000000000UL, 0x005c000000000000UL,
0x4000000000000000UL,
}; };
unsigned long kvm_s390_fac_list_mask_size(void) unsigned long kvm_s390_fac_list_mask_size(void)
...@@ -1186,6 +1187,10 @@ int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu) ...@@ -1186,6 +1187,10 @@ int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu)
vcpu->arch.sie_block->eca |= 1; vcpu->arch.sie_block->eca |= 1;
if (sclp_has_sigpif()) if (sclp_has_sigpif())
vcpu->arch.sie_block->eca |= 0x10000000U; vcpu->arch.sie_block->eca |= 0x10000000U;
if (vcpu->kvm->arch.use_vectors) {
vcpu->arch.sie_block->eca |= 0x00020000;
vcpu->arch.sie_block->ecd |= 0x20000000;
}
vcpu->arch.sie_block->ictl |= ICTL_ISKE | ICTL_SSKE | ICTL_RRBE; vcpu->arch.sie_block->ictl |= ICTL_ISKE | ICTL_SSKE | ICTL_RRBE;
if (kvm_s390_cmma_enabled(vcpu->kvm)) { if (kvm_s390_cmma_enabled(vcpu->kvm)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment