|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH] x86/kexec: Annotate more noreturns
kexec_reloc() does not return. Plumbing this property upwards lets us mark
machine_kexec() and machine_reboot_kexec() noreturn too.
Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
CC: Jan Beulich <jbeulich@xxxxxxxx>
CC: Roger Pau Monné <roger@xxxxxxxxxxxxxx>
CC: Teddy Astie <teddy.astie@xxxxxxxxxx>
Rebase forward many years.
---
xen/arch/x86/include/asm/machine_kexec.h | 7 ++++---
xen/arch/x86/machine_kexec.c | 5 ++---
xen/common/kexec.c | 2 --
xen/include/xen/kexec.h | 2 +-
4 files changed, 7 insertions(+), 9 deletions(-)
diff --git a/xen/arch/x86/include/asm/machine_kexec.h
b/xen/arch/x86/include/asm/machine_kexec.h
index 3e189acf2464..f0bdc2f44109 100644
--- a/xen/arch/x86/include/asm/machine_kexec.h
+++ b/xen/arch/x86/include/asm/machine_kexec.h
@@ -4,10 +4,11 @@
#define KEXEC_RELOC_FLAG_COMPAT 0x1 /* 32-bit image */
#ifndef __ASSEMBLER__
+#include <xen/compiler.h>
-extern void kexec_reloc(unsigned long reloc_code, unsigned long reloc_pt,
- unsigned long ind_maddr, unsigned long entry_maddr,
- unsigned long flags);
+extern void noreturn kexec_reloc(
+ unsigned long reloc_code, unsigned long reloc_pt, unsigned long ind_maddr,
+ unsigned long entry_maddr, unsigned long flags);
extern const char kexec_reloc_end[];
diff --git a/xen/arch/x86/machine_kexec.c b/xen/arch/x86/machine_kexec.c
index 038670922d47..0fb9ed50e780 100644
--- a/xen/arch/x86/machine_kexec.c
+++ b/xen/arch/x86/machine_kexec.c
@@ -142,15 +142,14 @@ void machine_kexec_unload(struct kexec_image *image)
/* no-op. kimage_free() frees all control pages. */
}
-void machine_reboot_kexec(struct kexec_image *image)
+void noreturn machine_reboot_kexec(struct kexec_image *image)
{
BUG_ON(smp_processor_id() != 0);
smp_send_stop();
machine_kexec(image);
- BUG();
}
-void machine_kexec(struct kexec_image *image)
+void noreturn machine_kexec(struct kexec_image *image)
{
int i;
unsigned long reloc_flags = 0;
diff --git a/xen/common/kexec.c b/xen/common/kexec.c
index 8ccaef1e0258..da3bb95d0852 100644
--- a/xen/common/kexec.c
+++ b/xen/common/kexec.c
@@ -397,8 +397,6 @@ void kexec_crash(enum crash_reason reason)
kexec_crash_save_cpu();
machine_crash_shutdown();
machine_kexec(kexec_image[KEXEC_IMAGE_CRASH_BASE + pos]);
-
- BUG();
}
static long noreturn cf_check kexec_reboot(void *_image)
diff --git a/xen/include/xen/kexec.h b/xen/include/xen/kexec.h
index e0d793b04316..6bb3fde629a6 100644
--- a/xen/include/xen/kexec.h
+++ b/xen/include/xen/kexec.h
@@ -49,7 +49,7 @@ int machine_kexec_load(struct kexec_image *image);
void machine_kexec_unload(struct kexec_image *image);
void machine_kexec_reserved(xen_kexec_reserve_t *reservation);
void noreturn machine_reboot_kexec(struct kexec_image *image);
-void machine_kexec(struct kexec_image *image);
+void noreturn machine_kexec(struct kexec_image *image);
void kexec_crash(enum crash_reason reason);
void kexec_crash_save_cpu(void);
struct crash_xen_info *kexec_crash_save_info(void);
--
2.39.5
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |