The spinlock in kexec_swap_images() was removed as
this function is only reachable on the kexec hypercall, which is
now protected at the top-level in do_kexec_op_internal(),
thus the local spinlock is no longer necessary.
Signed-off-by: Eric DeVolder <eric.devolder@oracle.com>
Reviewed-by: Bhavesh Davda <bhavesh.davda@oracle.com>
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
Release-acked-by: Julien Grall <julien.grall@arm.com>
static int kexec_swap_images(int type, struct kexec_image *new,
struct kexec_image **old)
{
- static DEFINE_SPINLOCK(kexec_lock);
int base, bit, pos;
int new_slot, old_slot;
if ( kexec_load_get_bits(type, &base, &bit) )
return -EINVAL;
- spin_lock(&kexec_lock);
+ ASSERT(test_bit(KEXEC_FLAG_IN_HYPERCALL, &kexec_flags));
pos = (test_bit(bit, &kexec_flags) != 0);
old_slot = base + pos;
clear_bit(old_slot, &kexec_flags);
*old = kexec_image[old_slot];
- spin_unlock(&kexec_lock);
-
return 0;
}