[PATCH v2 6/9] kho: support read-only KHO mode in KHO core
Pasha Tatashin
pasha.tatashin at soleen.com
Sun Oct 25 10:40:13 PDT 2026
When booted with 'kho_ro=<pa>', skip standard KHO bootmem and FDT
ingestion in kho_populate() before early_param parsing runs, disable
standard KHO in kho_memory_init() once early parameters are parsed, and
use kho_ro_get_fdt() in kho_retrieve_subtree().
Signed-off-by: Pasha Tatashin <pasha.tatashin at soleen.com>
---
kernel/liveupdate/kexec_handover.c | 8 ++++++++
kernel/liveupdate/kexec_handover_common.c | 2 +-
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/kernel/liveupdate/kexec_handover.c b/kernel/liveupdate/kexec_handover.c
index 67efbdd39439..cc56caeecba7 100644
--- a/kernel/liveupdate/kexec_handover.c
+++ b/kernel/liveupdate/kexec_handover.c
@@ -1819,6 +1819,11 @@ void __init kho_memory_init_early(void)
void __init kho_memory_init(void)
{
+ if (kho_is_ro()) {
+ kho_enable = false;
+ return;
+ }
+
if (is_kdump_kernel()) {
kho_enable = false;
pr_info("disabled in the kdump kernel\n");
@@ -1841,6 +1846,9 @@ void __init kho_populate(phys_addr_t fdt_phys, u64 fdt_len,
bool populated = false;
int err;
+ if (kho_ro_cmdline_enabled())
+ return;
+
/* Validate the input FDT */
fdt = early_memremap(fdt_phys, fdt_len);
if (!fdt) {
diff --git a/kernel/liveupdate/kexec_handover_common.c b/kernel/liveupdate/kexec_handover_common.c
index dc25cb4c08af..a9bc8d45d3ba 100644
--- a/kernel/liveupdate/kexec_handover_common.c
+++ b/kernel/liveupdate/kexec_handover_common.c
@@ -263,7 +263,7 @@ phys_addr_t __init kho_get_mem_map_phys(const void *fdt)
*/
int kho_retrieve_subtree(const char *name, phys_addr_t *phys, size_t *size)
{
- const void *fdt = kho_get_fdt();
+ const void *fdt = kho_is_ro() ? kho_ro_get_fdt() : kho_get_fdt();
const u64 *val;
int offset, len;
--
2.56.0.307.g5fe7bd680c-goog
More information about the kexec
mailing list