diff options
author | David Hildenbrand <david@redhat.com> | 2024-12-19 15:41:07 +0100 |
---|---|---|
committer | David Hildenbrand <david@redhat.com> | 2024-12-21 15:59:59 +0100 |
commit | 27221b69a3ea49339a1f82b9622126f3928e0915 (patch) | |
tree | 007331160db0ffde936775c1d0c7a121cd415f36 /hw | |
parent | 3c6fb557d295949bea291c3bf88ee9c83392e78c (diff) | |
download | qemu-27221b69a3ea49339a1f82b9622126f3928e0915.zip qemu-27221b69a3ea49339a1f82b9622126f3928e0915.tar.gz qemu-27221b69a3ea49339a1f82b9622126f3928e0915.tar.bz2 |
s390x: introduce s390_get_memory_limit()
Let's add s390_get_memory_limit(), to query what has been successfully
set via s390_set_memory_limit(). Allow setting the limit only once.
We'll remember the limit in the machine state. Move
s390_set_memory_limit() to machine code, merging it into
set_memory_limit(), because this really is a machine property.
Message-ID: <20241219144115.2820241-7-david@redhat.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: David Hildenbrand <david@redhat.com>
Diffstat (limited to 'hw')
-rw-r--r-- | hw/s390x/s390-virtio-ccw.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c index a28e615..1c56b70 100644 --- a/hw/s390x/s390-virtio-ccw.c +++ b/hw/s390x/s390-virtio-ccw.c @@ -45,6 +45,7 @@ #include "migration/blocker.h" #include "qapi/visitor.h" #include "hw/s390x/cpu-topology.h" +#include "kvm/kvm_s390x.h" #include CONFIG_DEVICES static Error *pv_mig_blocker; @@ -121,12 +122,16 @@ static void subsystem_reset(void) } } -static void set_memory_limit(uint64_t new_limit) +static void s390_set_memory_limit(S390CcwMachineState *s390ms, + uint64_t new_limit) { - uint64_t hw_limit; - int ret; + uint64_t hw_limit = 0; + int ret = 0; - ret = s390_set_memory_limit(new_limit, &hw_limit); + assert(!s390ms->memory_limit && new_limit); + if (kvm_enabled()) { + ret = kvm_s390_set_mem_limit(new_limit, &hw_limit); + } if (ret == -E2BIG) { error_report("host supports a maximum of %" PRIu64 " GB", hw_limit / GiB); @@ -135,10 +140,12 @@ static void set_memory_limit(uint64_t new_limit) error_report("setting the guest size failed"); exit(EXIT_FAILURE); } + s390ms->memory_limit = new_limit; } static void s390_memory_init(MachineState *machine) { + S390CcwMachineState *s390ms = S390_CCW_MACHINE(machine); MemoryRegion *sysmem = get_system_memory(); MemoryRegion *ram = machine->ram; uint64_t ram_size = memory_region_size(ram); @@ -154,7 +161,7 @@ static void s390_memory_init(MachineState *machine) exit(EXIT_FAILURE); } - set_memory_limit(ram_size); + s390_set_memory_limit(s390ms, ram_size); /* Map the initial memory. Must happen after setting the memory limit. */ memory_region_add_subregion(sysmem, 0, ram); |