Commit 32e6b236 authored by Guenther Hutzl's avatar Guenther Hutzl Committed by Christian Borntraeger

KVM: s390: consider system MHA for guest storage

Verify that the guest maximum storage address is below the MHA (maximum
host address) value allowed on the host.
Acked-by: default avatarMichael Holzheu <holzheu@linux.vnet.ibm.com>
Reviewed-by: default avatarCornelia Huck <cornelia.huck@de.ibm.com>
Reviewed-by: default avatarDavid Hildenbrand <dahi@linux.vnet.ibm.com>
Signed-off-by: default avatarGuenther Hutzl <hutzl@linux.vnet.ibm.com>
Signed-off-by: default avatarDominik Dingel <dingel@linux.vnet.ibm.com>
[adopt to match recent limit,size changes]
Signed-off-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
parent a3a92c31
...@@ -1184,7 +1184,11 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type) ...@@ -1184,7 +1184,11 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
kvm->arch.gmap = NULL; kvm->arch.gmap = NULL;
kvm->arch.mem_limit = KVM_S390_NO_MEM_LIMIT; kvm->arch.mem_limit = KVM_S390_NO_MEM_LIMIT;
} else { } else {
kvm->arch.mem_limit = TASK_MAX_SIZE; if (sclp.hamax == U64_MAX)
kvm->arch.mem_limit = TASK_MAX_SIZE;
else
kvm->arch.mem_limit = min_t(unsigned long, TASK_MAX_SIZE,
sclp.hamax + 1);
kvm->arch.gmap = gmap_alloc(current->mm, kvm->arch.mem_limit - 1); kvm->arch.gmap = gmap_alloc(current->mm, kvm->arch.mem_limit - 1);
if (!kvm->arch.gmap) if (!kvm->arch.gmap)
goto out_err; goto out_err;
......
...@@ -40,7 +40,8 @@ struct read_info_sccb { ...@@ -40,7 +40,8 @@ struct read_info_sccb {
u8 fac85; /* 85 */ u8 fac85; /* 85 */
u8 _pad_86[91 - 86]; /* 86-90 */ u8 _pad_86[91 - 86]; /* 86-90 */
u8 flags; /* 91 */ u8 flags; /* 91 */
u8 _pad_92[100 - 92]; /* 92-99 */ u8 _pad_92[99 - 92]; /* 92-98 */
u8 hamaxpow; /* 99 */
u32 rnsize2; /* 100-103 */ u32 rnsize2; /* 100-103 */
u64 rnmax2; /* 104-111 */ u64 rnmax2; /* 104-111 */
u8 _pad_112[116 - 112]; /* 112-115 */ u8 _pad_112[116 - 112]; /* 112-115 */
...@@ -120,6 +121,11 @@ static void __init sclp_facilities_detect(struct read_info_sccb *sccb) ...@@ -120,6 +121,11 @@ static void __init sclp_facilities_detect(struct read_info_sccb *sccb)
sclp.rzm <<= 20; sclp.rzm <<= 20;
sclp.ibc = sccb->ibc; sclp.ibc = sccb->ibc;
if (sccb->hamaxpow && sccb->hamaxpow < 64)
sclp.hamax = (1UL << sccb->hamaxpow) - 1;
else
sclp.hamax = U64_MAX;
if (!sccb->hcpua) { if (!sccb->hcpua) {
if (MACHINE_IS_VM) if (MACHINE_IS_VM)
sclp.max_cores = 64; sclp.max_cores = 64;
......
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