mirror of https://gitlab.com/qemu-project/qemu
s390x/kvm: Get rid of legacy_s390_alloc()
legacy_s390_alloc() was required for dealing with the absence of the ESOP feature -- on old HW (< gen 10) and old z/VM versions (< 6.3). As z/VM v6.2 (and even v6.3) is no longer supported since 2017 [1] and we don't expect to have real users on such old hardware, let's drop legacy_s390_alloc(). Still check+report an error just in case someone still runs on such old z/VM environments, or someone runs under weird nested KVM setups (where we can manually disable ESOP via the CPU model). No need to check for KVM_CAP_GMAP - that should always be around on kernels that also have KVM_CAP_DEVICE_CTRL (>= v3.15). [1] https://www.ibm.com/support/lifecycle/search?q=z%2FVM Suggested-by: Cornelia Huck <cohuck@redhat.com> Suggested-by: Thomas Huth <thuth@redhat.com> Cc: Paolo Bonzini <pbonzini@redhat.com> Cc: Richard Henderson <rth@twiddle.net> Cc: Halil Pasic <pasic@linux.ibm.com> Cc: Cornelia Huck <cohuck@redhat.com> Cc: Christian Borntraeger <borntraeger@de.ibm.com> Cc: Thomas Huth <thuth@redhat.com> Cc: Igor Mammedov <imammedo@redhat.com> Cc: Peter Xu <peterx@redhat.com> Signed-off-by: David Hildenbrand <david@redhat.com> Reviewed-by: Thomas Huth <thuth@redhat.com> Reviewed-by: Igor Mammedov <imammedo@redhat.com> Message-Id: <20210303130916.22553-2-david@redhat.com> Signed-off-by: Cornelia Huck <cohuck@redhat.com>
This commit is contained in:
parent
6157b0e197
commit
996e7e4b72
|
@ -161,8 +161,6 @@ static int cap_protected;
|
||||||
|
|
||||||
static int active_cmma;
|
static int active_cmma;
|
||||||
|
|
||||||
static void *legacy_s390_alloc(size_t size, uint64_t *align, bool shared);
|
|
||||||
|
|
||||||
static int kvm_s390_query_mem_limit(uint64_t *memory_limit)
|
static int kvm_s390_query_mem_limit(uint64_t *memory_limit)
|
||||||
{
|
{
|
||||||
struct kvm_device_attr attr = {
|
struct kvm_device_attr attr = {
|
||||||
|
@ -349,6 +347,11 @@ int kvm_arch_init(MachineState *ms, KVMState *s)
|
||||||
"please use kernel 3.15 or newer");
|
"please use kernel 3.15 or newer");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
if (!kvm_check_extension(s, KVM_CAP_S390_COW)) {
|
||||||
|
error_report("KVM is missing capability KVM_CAP_S390_COW - "
|
||||||
|
"unsupported environment");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
cap_sync_regs = kvm_check_extension(s, KVM_CAP_SYNC_REGS);
|
cap_sync_regs = kvm_check_extension(s, KVM_CAP_SYNC_REGS);
|
||||||
cap_async_pf = kvm_check_extension(s, KVM_CAP_ASYNC_PF);
|
cap_async_pf = kvm_check_extension(s, KVM_CAP_ASYNC_PF);
|
||||||
|
@ -357,11 +360,6 @@ int kvm_arch_init(MachineState *ms, KVMState *s)
|
||||||
cap_vcpu_resets = kvm_check_extension(s, KVM_CAP_S390_VCPU_RESETS);
|
cap_vcpu_resets = kvm_check_extension(s, KVM_CAP_S390_VCPU_RESETS);
|
||||||
cap_protected = kvm_check_extension(s, KVM_CAP_S390_PROTECTED);
|
cap_protected = kvm_check_extension(s, KVM_CAP_S390_PROTECTED);
|
||||||
|
|
||||||
if (!kvm_check_extension(s, KVM_CAP_S390_GMAP)
|
|
||||||
|| !kvm_check_extension(s, KVM_CAP_S390_COW)) {
|
|
||||||
phys_mem_set_alloc(legacy_s390_alloc);
|
|
||||||
}
|
|
||||||
|
|
||||||
kvm_vm_enable_cap(s, KVM_CAP_S390_USER_SIGP, 0);
|
kvm_vm_enable_cap(s, KVM_CAP_S390_USER_SIGP, 0);
|
||||||
kvm_vm_enable_cap(s, KVM_CAP_S390_VECTOR_REGISTERS, 0);
|
kvm_vm_enable_cap(s, KVM_CAP_S390_VECTOR_REGISTERS, 0);
|
||||||
kvm_vm_enable_cap(s, KVM_CAP_S390_USER_STSI, 0);
|
kvm_vm_enable_cap(s, KVM_CAP_S390_USER_STSI, 0);
|
||||||
|
@ -889,37 +887,6 @@ int kvm_s390_mem_op_pv(S390CPU *cpu, uint64_t offset, void *hostbuf,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Legacy layout for s390:
|
|
||||||
* Older S390 KVM requires the topmost vma of the RAM to be
|
|
||||||
* smaller than an system defined value, which is at least 256GB.
|
|
||||||
* Larger systems have larger values. We put the guest between
|
|
||||||
* the end of data segment (system break) and this value. We
|
|
||||||
* use 32GB as a base to have enough room for the system break
|
|
||||||
* to grow. We also have to use MAP parameters that avoid
|
|
||||||
* read-only mapping of guest pages.
|
|
||||||
*/
|
|
||||||
static void *legacy_s390_alloc(size_t size, uint64_t *align, bool shared)
|
|
||||||
{
|
|
||||||
static void *mem;
|
|
||||||
|
|
||||||
if (mem) {
|
|
||||||
/* we only support one allocation, which is enough for initial ram */
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
mem = mmap((void *) 0x800000000ULL, size,
|
|
||||||
PROT_EXEC|PROT_READ|PROT_WRITE,
|
|
||||||
MAP_SHARED | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
|
|
||||||
if (mem == MAP_FAILED) {
|
|
||||||
mem = NULL;
|
|
||||||
}
|
|
||||||
if (mem && align) {
|
|
||||||
*align = QEMU_VMALLOC_ALIGN;
|
|
||||||
}
|
|
||||||
return mem;
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint8_t const *sw_bp_inst;
|
static uint8_t const *sw_bp_inst;
|
||||||
static uint8_t sw_bp_ilen;
|
static uint8_t sw_bp_ilen;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue