[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH] x86/kexec: Use noreturn attributes, and drop unreachable code
kexec_reloc() does not return. Plumbing this property upwards lets us mark machine_kexec() and machine_reboot_kexec() noreturn too. This in turn lets us drop some unreachable BUG()/return statements. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- CC: Jan Beulich <JBeulich@xxxxxxxx> CC: Roger Pau Monné <roger.pau@xxxxxxxxxx> CC: Wei Liu <wl@xxxxxxx> --- xen/arch/x86/include/asm/machine_kexec.h | 7 ++++--- xen/arch/x86/machine_kexec.c | 5 ++--- xen/common/kexec.c | 5 ----- xen/include/xen/kexec.h | 4 ++-- 4 files changed, 8 insertions(+), 13 deletions(-) diff --git a/xen/arch/x86/include/asm/machine_kexec.h b/xen/arch/x86/include/asm/machine_kexec.h index d4880818c1d9..81fe95e091d1 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 __ASSEMBLY__ +#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 d83aa4e7e93b..d9b839f46401 100644 --- a/xen/arch/x86/machine_kexec.c +++ b/xen/arch/x86/machine_kexec.c @@ -138,15 +138,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 a2ffb6530cff..0c85f6171a98 100644 --- a/xen/common/kexec.c +++ b/xen/common/kexec.c @@ -391,8 +391,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 cf_check kexec_reboot(void *_image) @@ -403,9 +401,6 @@ static long cf_check kexec_reboot(void *_image) kexec_common_shutdown(); machine_reboot_kexec(image); - - BUG(); - return 0; } static void cf_check do_crashdump_trigger(unsigned char key) diff --git a/xen/include/xen/kexec.h b/xen/include/xen/kexec.h index e66eb6a8e593..ff3531586a21 100644 --- a/xen/include/xen/kexec.h +++ b/xen/include/xen/kexec.h @@ -48,8 +48,8 @@ int machine_kexec_add_page(struct kexec_image *image, unsigned long vaddr, 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 machine_reboot_kexec(struct kexec_image *image); -void machine_kexec(struct kexec_image *image); +void noreturn machine_reboot_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.11.0
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |