aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/kvm
diff options
context:
space:
mode:
authorGuenther Hutzl <hutzl@linux.vnet.ibm.com>2015-02-18 05:13:03 -0500
committerChristian Borntraeger <borntraeger@de.ibm.com>2015-05-08 09:51:14 -0400
commit53df84f8de312586e1c05a8f496f614ca814eeff (patch)
tree250f5611fa0eda500c4f314f911f604ff4718151 /arch/s390/kvm
parenta4a4f1916abbbc3148d79a37cf3fe4f3f6c604d9 (diff)
KVM: s390: Enable guest EDAT2 support
1. Enable EDAT2 in the list of KVM facilities 2. Handle 2G frames in pfmf instruction If we support EDAT2, we may enable handling of 2G frames if not in 24 bit mode. 3. Enable EDAT2 in sie_block If the EDAT2 facility is available we enable GED2 mode control in the sie_block. Reviewed-by: David Hildenbrand <dahi@linux.vnet.ibm.com> Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com> Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com> Signed-off-by: Guenther Hutzl <hutzl@linux.vnet.ibm.com> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Diffstat (limited to 'arch/s390/kvm')
-rw-r--r--arch/s390/kvm/kvm-s390.c6
-rw-r--r--arch/s390/kvm/priv.c8
2 files changed, 10 insertions, 4 deletions
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
index 2da36c432aea..142d9b40528d 100644
--- a/arch/s390/kvm/kvm-s390.c
+++ b/arch/s390/kvm/kvm-s390.c
@@ -110,7 +110,7 @@ struct kvm_stats_debugfs_item debugfs_entries[] = {
110/* upper facilities limit for kvm */ 110/* upper facilities limit for kvm */
111unsigned long kvm_s390_fac_list_mask[] = { 111unsigned long kvm_s390_fac_list_mask[] = {
112 0xffe6fffbfcfdfc40UL, 112 0xffe6fffbfcfdfc40UL,
113 0x005c800000000000UL, 113 0x005e800000000000UL,
114}; 114};
115 115
116unsigned long kvm_s390_fac_list_mask_size(void) 116unsigned long kvm_s390_fac_list_mask_size(void)
@@ -1313,7 +1313,9 @@ int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu)
1313 CPUSTAT_SM | 1313 CPUSTAT_SM |
1314 CPUSTAT_STOPPED); 1314 CPUSTAT_STOPPED);
1315 1315
1316 if (test_kvm_facility(vcpu->kvm, 8)) 1316 if (test_kvm_facility(vcpu->kvm, 78))
1317 atomic_set_mask(CPUSTAT_GED2, &vcpu->arch.sie_block->cpuflags);
1318 else if (test_kvm_facility(vcpu->kvm, 8))
1317 atomic_set_mask(CPUSTAT_GED, &vcpu->arch.sie_block->cpuflags); 1319 atomic_set_mask(CPUSTAT_GED, &vcpu->arch.sie_block->cpuflags);
1318 1320
1319 kvm_s390_vcpu_setup_model(vcpu); 1321 kvm_s390_vcpu_setup_model(vcpu);
diff --git a/arch/s390/kvm/priv.c b/arch/s390/kvm/priv.c
index d22d8ee1ff9d..ad4242245771 100644
--- a/arch/s390/kvm/priv.c
+++ b/arch/s390/kvm/priv.c
@@ -698,10 +698,14 @@ static int handle_pfmf(struct kvm_vcpu *vcpu)
698 case 0x00001000: 698 case 0x00001000:
699 end = (start + (1UL << 20)) & ~((1UL << 20) - 1); 699 end = (start + (1UL << 20)) & ~((1UL << 20) - 1);
700 break; 700 break;
701 /* We dont support EDAT2
702 case 0x00002000: 701 case 0x00002000:
702 /* only support 2G frame size if EDAT2 is available and we are
703 not in 24-bit addressing mode */
704 if (!test_kvm_facility(vcpu->kvm, 78) ||
705 psw_bits(vcpu->arch.sie_block->gpsw).eaba == PSW_AMODE_24BIT)
706 return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION);
703 end = (start + (1UL << 31)) & ~((1UL << 31) - 1); 707 end = (start + (1UL << 31)) & ~((1UL << 31) - 1);
704 break;*/ 708 break;
705 default: 709 default:
706 return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION); 710 return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION);
707 } 711 }