mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 01:33:56 -06:00
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>
This commit is contained in:
parent
3c6fb557d2
commit
27221b69a3
4 changed files with 20 additions and 14 deletions
|
@ -45,6 +45,7 @@
|
||||||
#include "migration/blocker.h"
|
#include "migration/blocker.h"
|
||||||
#include "qapi/visitor.h"
|
#include "qapi/visitor.h"
|
||||||
#include "hw/s390x/cpu-topology.h"
|
#include "hw/s390x/cpu-topology.h"
|
||||||
|
#include "kvm/kvm_s390x.h"
|
||||||
#include CONFIG_DEVICES
|
#include CONFIG_DEVICES
|
||||||
|
|
||||||
static Error *pv_mig_blocker;
|
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;
|
uint64_t hw_limit = 0;
|
||||||
int ret;
|
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) {
|
if (ret == -E2BIG) {
|
||||||
error_report("host supports a maximum of %" PRIu64 " GB",
|
error_report("host supports a maximum of %" PRIu64 " GB",
|
||||||
hw_limit / GiB);
|
hw_limit / GiB);
|
||||||
|
@ -135,10 +140,12 @@ static void set_memory_limit(uint64_t new_limit)
|
||||||
error_report("setting the guest size failed");
|
error_report("setting the guest size failed");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
s390ms->memory_limit = new_limit;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void s390_memory_init(MachineState *machine)
|
static void s390_memory_init(MachineState *machine)
|
||||||
{
|
{
|
||||||
|
S390CcwMachineState *s390ms = S390_CCW_MACHINE(machine);
|
||||||
MemoryRegion *sysmem = get_system_memory();
|
MemoryRegion *sysmem = get_system_memory();
|
||||||
MemoryRegion *ram = machine->ram;
|
MemoryRegion *ram = machine->ram;
|
||||||
uint64_t ram_size = memory_region_size(ram);
|
uint64_t ram_size = memory_region_size(ram);
|
||||||
|
@ -154,7 +161,7 @@ static void s390_memory_init(MachineState *machine)
|
||||||
exit(EXIT_FAILURE);
|
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. */
|
/* Map the initial memory. Must happen after setting the memory limit. */
|
||||||
memory_region_add_subregion(sysmem, 0, ram);
|
memory_region_add_subregion(sysmem, 0, ram);
|
||||||
|
|
|
@ -29,10 +29,18 @@ struct S390CcwMachineState {
|
||||||
bool dea_key_wrap;
|
bool dea_key_wrap;
|
||||||
bool pv;
|
bool pv;
|
||||||
uint8_t loadparm[8];
|
uint8_t loadparm[8];
|
||||||
|
uint64_t memory_limit;
|
||||||
|
|
||||||
SCLPDevice *sclp;
|
SCLPDevice *sclp;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static inline uint64_t s390_get_memory_limit(S390CcwMachineState *s390ms)
|
||||||
|
{
|
||||||
|
/* We expect to be called only after the limit was set. */
|
||||||
|
assert(s390ms->memory_limit);
|
||||||
|
return s390ms->memory_limit;
|
||||||
|
}
|
||||||
|
|
||||||
#define S390_PTF_REASON_NONE (0x00 << 8)
|
#define S390_PTF_REASON_NONE (0x00 << 8)
|
||||||
#define S390_PTF_REASON_DONE (0x01 << 8)
|
#define S390_PTF_REASON_DONE (0x01 << 8)
|
||||||
#define S390_PTF_REASON_BUSY (0x02 << 8)
|
#define S390_PTF_REASON_BUSY (0x02 << 8)
|
||||||
|
|
|
@ -255,14 +255,6 @@ unsigned int s390_cpu_set_state(uint8_t cpu_state, S390CPU *cpu)
|
||||||
return s390_count_running_cpus();
|
return s390_count_running_cpus();
|
||||||
}
|
}
|
||||||
|
|
||||||
int s390_set_memory_limit(uint64_t new_limit, uint64_t *hw_limit)
|
|
||||||
{
|
|
||||||
if (kvm_enabled()) {
|
|
||||||
return kvm_s390_set_mem_limit(new_limit, hw_limit);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void s390_set_max_pagesize(uint64_t pagesize, Error **errp)
|
void s390_set_max_pagesize(uint64_t pagesize, Error **errp)
|
||||||
{
|
{
|
||||||
if (kvm_enabled()) {
|
if (kvm_enabled()) {
|
||||||
|
|
|
@ -881,7 +881,6 @@ static inline void s390_do_cpu_load_normal(CPUState *cs, run_on_cpu_data arg)
|
||||||
|
|
||||||
/* cpu.c */
|
/* cpu.c */
|
||||||
void s390_crypto_reset(void);
|
void s390_crypto_reset(void);
|
||||||
int s390_set_memory_limit(uint64_t new_limit, uint64_t *hw_limit);
|
|
||||||
void s390_set_max_pagesize(uint64_t pagesize, Error **errp);
|
void s390_set_max_pagesize(uint64_t pagesize, Error **errp);
|
||||||
void s390_cmma_reset(void);
|
void s390_cmma_reset(void);
|
||||||
void s390_enable_css_support(S390CPU *cpu);
|
void s390_enable_css_support(S390CPU *cpu);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue