mirror of
https://github.com/clearlinux/kvmtool.git
synced 2026-06-16 02:15:47 +00:00
kvmtool, mips: Support more than 256 MB guest memory
Two guest memory regions need to be defined and two "mem=" parameters need to be passed to guest kernel to support more than 256 MB. Signed-off-by: Andreas Herrmann <andreas.herrmann@caviumnetworks.com> Signed-off-by: Will Deacon <will.deacon@arm.com>
This commit is contained in:
committed by
Will Deacon
parent
e9922aaf43
commit
57896feeda
@@ -1,10 +1,20 @@
|
||||
#ifndef KVM__KVM_ARCH_H
|
||||
#define KVM__KVM_ARCH_H
|
||||
|
||||
|
||||
/*
|
||||
* Guest memory map is:
|
||||
* 0x00000000-0x0fffffff : System RAM
|
||||
* 0x10000000-0x1fffffff : I/O (defined by KVM_MMIO_START and KVM_MMIO_SIZE)
|
||||
* 0x20000000- ... : System RAM
|
||||
* See also kvm__init_ram().
|
||||
*/
|
||||
|
||||
#define KVM_MMIO_START 0x10000000
|
||||
#define KVM_PCI_CFG_AREA KVM_MMIO_START
|
||||
#define KVM_PCI_MMIO_AREA (KVM_MMIO_START + 0x1000000)
|
||||
#define KVM_VIRTIO_MMIO_AREA (KVM_MMIO_START + 0x2000000)
|
||||
#define KVM_MMIO_SIZE 0x10000000
|
||||
|
||||
/*
|
||||
* Just for reference. This and the above corresponds to what's used
|
||||
|
||||
+30
-6
@@ -22,11 +22,28 @@ void kvm__init_ram(struct kvm *kvm)
|
||||
u64 phys_start, phys_size;
|
||||
void *host_mem;
|
||||
|
||||
phys_start = 0;
|
||||
phys_size = kvm->ram_size;
|
||||
host_mem = kvm->ram_start;
|
||||
if (kvm->ram_size <= KVM_MMIO_START) {
|
||||
/* one region for all memory */
|
||||
phys_start = 0;
|
||||
phys_size = kvm->ram_size;
|
||||
host_mem = kvm->ram_start;
|
||||
|
||||
kvm__register_mem(kvm, phys_start, phys_size, host_mem);
|
||||
kvm__register_mem(kvm, phys_start, phys_size, host_mem);
|
||||
} else {
|
||||
/* one region for memory that fits below MMIO range */
|
||||
phys_start = 0;
|
||||
phys_size = KVM_MMIO_START;
|
||||
host_mem = kvm->ram_start;
|
||||
|
||||
kvm__register_mem(kvm, phys_start, phys_size, host_mem);
|
||||
|
||||
/* one region for rest of memory */
|
||||
phys_start = KVM_MMIO_START + KVM_MMIO_SIZE;
|
||||
phys_size = kvm->ram_size - KVM_MMIO_START;
|
||||
host_mem = kvm->ram_start + KVM_MMIO_START;
|
||||
|
||||
kvm__register_mem(kvm, phys_start, phys_size, host_mem);
|
||||
}
|
||||
}
|
||||
|
||||
void kvm__arch_delete_ram(struct kvm *kvm)
|
||||
@@ -108,8 +125,15 @@ static void kvm__mips_install_cmdline(struct kvm *kvm)
|
||||
u64 argv_offset = argv_start;
|
||||
u64 argc = 0;
|
||||
|
||||
sprintf(p + cmdline_offset, "mem=0x%llx@0 ",
|
||||
(unsigned long long)kvm->ram_size);
|
||||
|
||||
if ((u64) kvm->ram_size <= KVM_MMIO_START)
|
||||
sprintf(p + cmdline_offset, "mem=0x%llx@0 ",
|
||||
(unsigned long long)kvm->ram_size);
|
||||
else
|
||||
sprintf(p + cmdline_offset, "mem=0x%llx@0 mem=0x%llx@0x%llx ",
|
||||
(unsigned long long)KVM_MMIO_START,
|
||||
(unsigned long long)kvm->ram_size - KVM_MMIO_START,
|
||||
(unsigned long long)(KVM_MMIO_START + KVM_MMIO_SIZE));
|
||||
|
||||
strcat(p + cmdline_offset, kvm->cfg.real_cmdline); /* maximum size is 2K */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user