[RFC PATCH v1 06/42] Use vcpu count from the plane configuration
Sriram Nambakam <[email protected]> Wed, 5 Aug 2026 04:02:48 -0700
| Newsgroups | org.kernel.vger.kvm,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
---
include/linux/vm_planes.h | 1 +
init/vm_planes.c | 37 ++++++++++++++++++++++++-------------
2 files changed, 25 insertions(+), 13 deletions(-)
diff --git a/include/linux/vm_planes.h b/include/linux/vm_planes.h
index 4a91dc79b7ba..506de566cbd5 100644
--- a/include/linux/vm_planes.h
+++ b/include/linux/vm_planes.h
@@ -12,6 +12,7 @@
struct vm_plane_config {
phys_addr_t load_offset;
phys_addr_t memory_size;
+ unsigned int vcpu_count;
char kernel[VM_PLANE_KERNEL_NAME_MAX];
};
diff --git a/init/vm_planes.c b/init/vm_planes.c
index 30f17da92332..8eafb1c5f8cf 100644
--- a/init/vm_planes.c
+++ b/init/vm_planes.c
@@ -18,9 +18,10 @@ static bool __initdata enable_vm_planes_requested;
#define VM_PLANES_DEFAULT_COUNT 1
struct vm_plane_parse_state {
- phys_addr_t have_load_offset;
- phys_addr_t have_memory_size;
- char have_kernel[VM_PLANE_KERNEL_NAME_MAX];
+ phys_addr_t load_offset;
+ phys_addr_t memory_size;
+ unsigned int vcpu_count;
+ char kernel[VM_PLANE_KERNEL_NAME_MAX];
};
#define VM_PLANES_UNSET_VALUE ((phys_addr_t)~0)
@@ -203,8 +204,8 @@ static int __init parse_plane_cfg_line(const char *line, size_t len,
sizeof(plane_cfg[plane_id].kernel)) < 0)
return -EINVAL;
- strscpy(state[plane_id].have_kernel, val,
- sizeof(state[plane_id].have_kernel));
+ strscpy(state[plane_id].kernel, val,
+ sizeof(state[plane_id].kernel));
return 0;
}
@@ -218,13 +219,21 @@ static int __init parse_plane_cfg_line(const char *line, size_t len,
if (!strcmp(key, "LOAD_OFFSET")) {
plane_cfg[plane_id].load_offset = parsed;
- state[plane_id].have_load_offset = parsed;
+ state[plane_id].load_offset = parsed;
return 0;
}
if (!strcmp(key, "MEMORY_SIZE")) {
plane_cfg[plane_id].memory_size = parsed;
- state[plane_id].have_memory_size = parsed;
+ state[plane_id].memory_size = parsed;
+ return 0;
+ }
+
+ if (!strcmp(key, "VCPU_COUNT")) {
+ if (parsed_u64 == 0 || parsed_u64 > UINT_MAX)
+ return -EINVAL;
+ plane_cfg[plane_id].vcpu_count = (unsigned int)parsed_u64;
+ state[plane_id].vcpu_count = (unsigned int)parsed_u64;
return 0;
}
@@ -259,9 +268,10 @@ static int __init parse_vm_planes_kconfig(const char *buf, size_t len,
memset(*plane_cfg, 0, *plane_count * sizeof(**plane_cfg));
for (i = 0; i < *plane_count; i++) {
- state[i].have_load_offset = VM_PLANES_UNSET_VALUE;
- state[i].have_memory_size = VM_PLANES_UNSET_VALUE;
- state[i].have_kernel[0] = '\0';
+ state[i].load_offset = VM_PLANES_UNSET_VALUE;
+ state[i].memory_size = VM_PLANES_UNSET_VALUE;
+ state[i].vcpu_count = 0;
+ state[i].kernel[0] = '\0';
}
while (p < end) {
@@ -279,9 +289,10 @@ static int __init parse_vm_planes_kconfig(const char *buf, size_t len,
}
for (i = 0; i < *plane_count; i++) {
- if (state[i].have_load_offset == VM_PLANES_UNSET_VALUE ||
- state[i].have_memory_size == VM_PLANES_UNSET_VALUE ||
- !state[i].have_kernel[0])
+ if (state[i].load_offset == VM_PLANES_UNSET_VALUE ||
+ state[i].memory_size == VM_PLANES_UNSET_VALUE ||
+ !state[i].vcpu_count ||
+ !state[i].kernel[0])
return -EINVAL;
}
--
2.55.0