kexec_internal.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #ifndef LINUX_KEXEC_INTERNAL_H
  3. #define LINUX_KEXEC_INTERNAL_H
  4. #include <linux/kexec.h>
  5. struct kimage *do_kimage_alloc_init(void);
  6. int sanity_check_segment_list(struct kimage *image);
  7. void kimage_free_page_list(struct list_head *list);
  8. void kimage_free(struct kimage *image);
  9. int kimage_load_segment(struct kimage *image, struct kexec_segment *segment);
  10. void kimage_terminate(struct kimage *image);
  11. int kimage_is_destination_range(struct kimage *image,
  12. unsigned long start, unsigned long end);
  13. /*
  14. * Whatever is used to serialize accesses to the kexec_crash_image needs to be
  15. * NMI safe, as __crash_kexec() can happen during nmi_panic(), so here we use a
  16. * "simple" atomic variable that is acquired with a cmpxchg().
  17. */
  18. extern atomic_t __kexec_lock;
  19. static inline bool kexec_trylock(void)
  20. {
  21. return atomic_cmpxchg_acquire(&__kexec_lock, 0, 1) == 0;
  22. }
  23. static inline void kexec_unlock(void)
  24. {
  25. atomic_set_release(&__kexec_lock, 0);
  26. }
  27. #ifdef CONFIG_KEXEC_FILE
  28. #include <linux/purgatory.h>
  29. void kimage_file_post_load_cleanup(struct kimage *image);
  30. extern char kexec_purgatory[];
  31. extern size_t kexec_purgatory_size;
  32. #else /* CONFIG_KEXEC_FILE */
  33. static inline void kimage_file_post_load_cleanup(struct kimage *image) { }
  34. #endif /* CONFIG_KEXEC_FILE */
  35. #endif /* LINUX_KEXEC_INTERNAL_H */