aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnup Patel <apatel@ventanamicro.com>2023-07-12 22:05:01 +0530
committerWill Deacon <will@kernel.org>2023-07-20 15:59:29 +0100
commit106e2ea7756d980454d68631b87d5e25ba4e4881 (patch)
treec3448a80d197b55ae977bd1d6cf67ce8acab229f
parent8659200f69310e1f0e9cea70ae0fd65b363f6c4e (diff)
downloadkvmtool-106e2ea7756d980454d68631b87d5e25ba4e4881.tar.gz
riscv: Fix guest RAM alloc size computation for RV32
Currently, we ensure that guest RAM alloc size is at least 2M for THP which works well for RV64 but breaks hugepage support for RV32. To fix this, we use 4M as hugepage size for RV32. Fixes: 867159a7963b ("riscv: Implement Guest/VM arch functions") Signed-off-by: Anup Patel <apatel@ventanamicro.com> Link: https://lore.kernel.org/r/20230712163501.1769737-10-apatel@ventanamicro.com Signed-off-by: Will Deacon <will@kernel.org>
-rw-r--r--riscv/kvm.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/riscv/kvm.c b/riscv/kvm.c
index 4d6f5cb5..8daad94f 100644
--- a/riscv/kvm.c
+++ b/riscv/kvm.c
@@ -61,16 +61,25 @@ void kvm__arch_set_cmdline(char *cmdline, bool video)
{
}
+#if __riscv_xlen == 64
+#define HUGEPAGE_SIZE SZ_2M
+#else
+#define HUGEPAGE_SIZE SZ_4M
+#endif
+
void kvm__arch_init(struct kvm *kvm)
{
/*
* Allocate guest memory. We must align our buffer to 64K to
* correlate with the maximum guest page size for virtio-mmio.
- * If using THP, then our minimal alignment becomes 2M.
- * 2M trumps 64K, so let's go with that.
+ * If using THP, then our minimal alignment becomes hugepage
+ * size. The hugepage size is always greater than 64K, so
+ * let's go with that.
*/
kvm->ram_size = min(kvm->cfg.ram_size, (u64)RISCV_MAX_MEMORY(kvm));
- kvm->arch.ram_alloc_size = kvm->ram_size + SZ_2M;
+ kvm->arch.ram_alloc_size = kvm->ram_size;
+ if (!kvm->cfg.hugetlbfs_path)
+ kvm->arch.ram_alloc_size += HUGEPAGE_SIZE;
kvm->arch.ram_alloc_start = mmap_anon_or_hugetlbfs(kvm,
kvm->cfg.hugetlbfs_path,
kvm->arch.ram_alloc_size);