[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [MINI-OS PATCH 12/12] kexec: do the final kexec step
With all kexec preparations done, activate the new kernel. Signed-off-by: Juergen Gross <jgross@xxxxxxxx> --- kexec.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/kexec.c b/kexec.c index 2db876e8..85b09959 100644 --- a/kexec.c +++ b/kexec.c @@ -169,6 +169,7 @@ int kexec(void *kernel, unsigned long kernel_size, const char *cmdline) { int ret; unsigned long *func; + void *kexec_page; ret = analyze_kernel(kernel, kernel_size); if ( ret ) @@ -192,6 +193,13 @@ int kexec(void *kernel, unsigned long kernel_size, const char *cmdline) if ( ret ) goto err; + kexec_page = (void *)alloc_page(); + if ( !kexec_page ) + { + ret = ENOMEM; + goto err; + } + for ( func = __kexec_array_start; func < __kexec_array_end; func++ ) { ret = ((kexeccall_t)(*func))(false); @@ -204,10 +212,15 @@ int kexec(void *kernel, unsigned long kernel_size, const char *cmdline) } } - /* Error exit. */ - ret = ENOSYS; + /* Activate the new kernel. */ + do_kexec(kexec_page); + + /* do_kexec() shouldn't return, crash. */ + BUG(); err: + if ( kexec_page ) + free_page(kexec_page); change_readonly(true); unreserve_memory_below(); kexec_move_used_pages_undo(); -- 2.43.0
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |