diff options
author | Raphael Ning <raphning@amazon.com> | 2021-03-23 17:59:23 +0000 |
---|---|---|
committer | Simon Horman <horms@verge.net.au> | 2021-04-02 12:00:46 +0200 |
commit | 85721bdd187206df402634ddec81ef94b5e23375 (patch) | |
tree | 15164b6d9292cf4627b2160a5d47fe5421b134ab | |
parent | 4b97ff97852832b4856f76827df2d53d34baae59 (diff) |
kexec-xen: Use correct image type for Live Update
Unlike xen_kexec_load(), xen_kexec_unload() and xen_kexec_status()
fail to distinguish between normal kexec and Xen Live Update image
types.
Fix that by introducing a new helper function that maps internal
flags to KEXEC_TYPE_*, and using it throughout kexec-xen.c.
Signed-off-by: Raphael Ning <raphning@amazon.com>
Signed-off-by: Simon Horman <horms@verge.net.au>
-rw-r--r-- | kexec/kexec-xen.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/kexec/kexec-xen.c b/kexec/kexec-xen.c index da514d0..47da3da 100644 --- a/kexec/kexec-xen.c +++ b/kexec/kexec-xen.c @@ -91,6 +91,17 @@ out: return rc; } +static uint8_t xen_get_kexec_type(unsigned long kexec_flags) +{ + if (kexec_flags & KEXEC_ON_CRASH) + return KEXEC_TYPE_CRASH; + + if (kexec_flags & KEXEC_LIVE_UPDATE) + return KEXEC_TYPE_LIVE_UPDATE; + + return KEXEC_TYPE_DEFAULT; +} + #define IDENTMAP_1MiB (1024 * 1024) int xen_kexec_load(struct kexec_info *info) @@ -177,12 +188,7 @@ int xen_kexec_load(struct kexec_info *info) seg++; } - if (info->kexec_flags & KEXEC_ON_CRASH) - type = KEXEC_TYPE_CRASH; - else if (info->kexec_flags & KEXEC_LIVE_UPDATE ) - type = KEXEC_TYPE_LIVE_UPDATE; - else - type = KEXEC_TYPE_DEFAULT; + type = xen_get_kexec_type(info->kexec_flags); arch = (info->kexec_flags & KEXEC_ARCH_MASK) >> 16; #if defined(__i386__) || defined(__x86_64__) @@ -211,8 +217,7 @@ int xen_kexec_unload(uint64_t kexec_flags) if (!xch) return -1; - type = (kexec_flags & KEXEC_ON_CRASH) ? KEXEC_TYPE_CRASH - : KEXEC_TYPE_DEFAULT; + type = xen_get_kexec_type(kexec_flags); ret = xc_kexec_unload(xch, type); @@ -232,7 +237,7 @@ int xen_kexec_status(uint64_t kexec_flags) if (!xch) return -1; - type = (kexec_flags & KEXEC_ON_CRASH) ? KEXEC_TYPE_CRASH : KEXEC_TYPE_DEFAULT; + type = xen_get_kexec_type(kexec_flags); ret = xc_kexec_status(xch, type); |