[PATCH v4 kvmtool 00/12] arm64: Allow the user to set RAM base address

Alexandru Elisei alexandru.elisei at arm.com
Wed Jun 22 02:27:59 PDT 2022


Hi Suzuki, Will,

On Tue, Jun 21, 2022 at 06:03:22PM +0100, Suzuki K Poulose wrote:
> On 16/06/2022 14:48, Alexandru Elisei wrote:
> > The series can be found at [1]. It is loosely based on the patches that
> > allow the user to define the VM memory layout (RAM + MMIO) [2]. I've
> > cherry-picked a handful of patches from that series, the rest I wrote from
> > scratch since there have been several changes to the way guest memory is
> > handled. I've chosen to focus on specifying the RAM layout with only one
> > RAM bank and leave the rest for a later series because this was relatively
> > easy to accomplish, while still being very useful.
> > 
> > What this series does: for arm64, the user can now specify the base address
> > for RAM:
> > 
> > $ ./lkvm run -m1G at 2G .. # Equivalent to ./lkvm run -m1024
> > 
> > The memory units are B (bytes), K (kilobytes), M (megabytes), G
> > (gigabytes), T (terrabytes), P (petabytes). Lowercase is also valid.
> > 
> > Want to put RAM at the top of the physical address range? Easy:
> > 
> > $ ./lkvm run -m2G at 1022G .. # Assumes the maximum is 40 bits of IPA
> > 
> > There one limitation on the RAM base address: it must not overlap with the
> > MMIO range that kvmtool uses for arm/arm64, which lives below 2GB.
> > 
> > Why this is useful, in my opinion:
> > 
> > 1. Testing how a payload handles different memory layouts without the need
> > to hack kvmtool or find the hardware that implements the desired layout.
> > 
> > 2. It can serve as a development tool for adding support for larger PA
> > ranges for Linux and KVM (currently capped at 48 bits for 4k/16k pages), or
> > other payloads.
> > 
> > Summary of the series
> > ======================
> > 
> > * The series starts with refactoring how kvm->cfg.ram_size is validated
> >    and used, followed by several cleanups in the arm and arm64 code.
> > 
> > * Then patch #8 ("builtin_run: Allow standard size specifiers for memory")
> >    introduced the ability to specify the measurement unit for memory. I
> >    believe that typing the equivalent of 2TB in megabytes isn't appealing
> >    for anyone.
> > 
> > * More cleanups in the arm/arm64 code follow, which are needed for patch
> >    #12 ("arm64: Allow the user to specify the RAM base address"). This is
> >    where the ability to specify the RAM base address is introduced.
> > 
> > Testing
> > =======
> > 
> > Same testing as before:
> > 
> > - Build tested each patch for all architectures.
> > 
> > - Ran an x86 kernel with and without setting the amount of RAM using the
> >    memory specifiers; tested that setting the RAM address results in an
> >    error.
> > 
> > - Ran an arm64 kernel without setting the size, with setting the size and
> >    with setting the size and address; tried different addresses (2G, 3G,
> >    256G); also tested that going below 2G or above the maximum IPA correctly
> >    results in an error.
> > 
> > - Ran all arm64 kvm-unit-test tests with similar combinations of memory
> >    size and address (instead of 256G I used 128G, as that's where I/O lives
> >    for qemu and kvm-unit-tests maps that unconditionally as I/O).
> > 
> > - Ran all 32bit arm tests on an arm64 host with various combinations of
> >    memory size and address (base address at 2G and 2.5G only due to a
> >    limitation in the way the tests are set up).
> 
> I have tested this series on arm64 Fast model, with memory placed from
> 32bit to 48bit IPA and it works well.
> 
> For the series:
> 
> Reviewed-and-Tested-by: Suzuki K Poulose <suzuki.poulose at arm.com>

Thank you for the review and testing!

Will, do you want me to respin the series to gather all the Reviewed-by and
Tested-by tags?

Thanks,
Alex



More information about the linux-arm-kernel mailing list