mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 18:23:57 -06:00
s390x/kvm: Configure page size after memory has actually been initialized
Right now we configure the pagesize quite early, when initializing KVM. This is long before system memory is actually allocated via memory_region_allocate_system_memory(), and therefore memory backends marked as mapped. Instead, let's configure the maximum page size after initializing memory in s390_memory_init(). cap_hpage_1m is still properly configured before creating any CPUs, and therefore before configuring the CPU model and eventually enabling CMMA. This is not a fix but rather a preparation for the future, when initial memory might reside on memory backends (not the case for s390x right now) We will replace qemu_getrampagesize() soon by a function that will always return the maximum page size (not the minimum page size, which only works by pure luck so far, as there are no memory backends). Acked-by: Igor Mammedov <imammedo@redhat.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: David Hildenbrand <david@redhat.com> Message-Id: <20190417113143.5551-2-david@redhat.com> Signed-off-by: Cornelia Huck <cohuck@redhat.com>
This commit is contained in:
parent
3284aa1281
commit
9138977b18
6 changed files with 39 additions and 21 deletions
|
@ -15,6 +15,7 @@
|
|||
#include "cpu.h"
|
||||
#include "hw/boards.h"
|
||||
#include "exec/address-spaces.h"
|
||||
#include "exec/ram_addr.h"
|
||||
#include "hw/s390x/s390-virtio-hcall.h"
|
||||
#include "hw/s390x/sclp.h"
|
||||
#include "hw/s390x/s390_flic.h"
|
||||
|
@ -163,6 +164,7 @@ static void s390_memory_init(ram_addr_t mem_size)
|
|||
MemoryRegion *sysmem = get_system_memory();
|
||||
ram_addr_t chunk, offset = 0;
|
||||
unsigned int number = 0;
|
||||
Error *local_err = NULL;
|
||||
gchar *name;
|
||||
|
||||
/* allocate RAM for core */
|
||||
|
@ -182,6 +184,15 @@ static void s390_memory_init(ram_addr_t mem_size)
|
|||
}
|
||||
g_free(name);
|
||||
|
||||
/*
|
||||
* Configure the maximum page size. As no memory devices were created
|
||||
* yet, this is the page size of initial memory only.
|
||||
*/
|
||||
s390_set_max_pagesize(qemu_getrampagesize(), &local_err);
|
||||
if (local_err) {
|
||||
error_report_err(local_err);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
/* Initialize storage key device */
|
||||
s390_skeys_init();
|
||||
/* Initialize storage attributes device */
|
||||
|
@ -253,6 +264,7 @@ static void ccw_init(MachineState *machine)
|
|||
DeviceState *dev;
|
||||
|
||||
s390_sclp_init();
|
||||
/* init memory + setup max page size. Required for the CPU model */
|
||||
s390_memory_init(machine->ram_size);
|
||||
|
||||
/* init CPUs (incl. CPU model) early so s390_has_feature() works */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue