root/include/linux/kexec.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. page_to_boot_pfn
  2. boot_pfn_to_page
  3. phys_to_boot_phys
  4. boot_phys_to_phys
  5. virt_to_boot_phys
  6. boot_phys_to_virt
  7. arch_kexec_post_alloc_pages
  8. arch_kexec_pre_free_pages
  9. __crash_kexec
  10. crash_kexec
  11. kexec_should_crash
  12. kexec_crash_loaded

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef LINUX_KEXEC_H
   3 #define LINUX_KEXEC_H
   4 
   5 #define IND_DESTINATION_BIT 0
   6 #define IND_INDIRECTION_BIT 1
   7 #define IND_DONE_BIT        2
   8 #define IND_SOURCE_BIT      3
   9 
  10 #define IND_DESTINATION  (1 << IND_DESTINATION_BIT)
  11 #define IND_INDIRECTION  (1 << IND_INDIRECTION_BIT)
  12 #define IND_DONE         (1 << IND_DONE_BIT)
  13 #define IND_SOURCE       (1 << IND_SOURCE_BIT)
  14 #define IND_FLAGS (IND_DESTINATION | IND_INDIRECTION | IND_DONE | IND_SOURCE)
  15 
  16 #if !defined(__ASSEMBLY__)
  17 
  18 #include <linux/crash_core.h>
  19 #include <asm/io.h>
  20 
  21 #include <uapi/linux/kexec.h>
  22 
  23 #ifdef CONFIG_KEXEC_CORE
  24 #include <linux/list.h>
  25 #include <linux/compat.h>
  26 #include <linux/ioport.h>
  27 #include <linux/module.h>
  28 #include <asm/kexec.h>
  29 
  30 /* Verify architecture specific macros are defined */
  31 
  32 #ifndef KEXEC_SOURCE_MEMORY_LIMIT
  33 #error KEXEC_SOURCE_MEMORY_LIMIT not defined
  34 #endif
  35 
  36 #ifndef KEXEC_DESTINATION_MEMORY_LIMIT
  37 #error KEXEC_DESTINATION_MEMORY_LIMIT not defined
  38 #endif
  39 
  40 #ifndef KEXEC_CONTROL_MEMORY_LIMIT
  41 #error KEXEC_CONTROL_MEMORY_LIMIT not defined
  42 #endif
  43 
  44 #ifndef KEXEC_CONTROL_MEMORY_GFP
  45 #define KEXEC_CONTROL_MEMORY_GFP (GFP_KERNEL | __GFP_NORETRY)
  46 #endif
  47 
  48 #ifndef KEXEC_CONTROL_PAGE_SIZE
  49 #error KEXEC_CONTROL_PAGE_SIZE not defined
  50 #endif
  51 
  52 #ifndef KEXEC_ARCH
  53 #error KEXEC_ARCH not defined
  54 #endif
  55 
  56 #ifndef KEXEC_CRASH_CONTROL_MEMORY_LIMIT
  57 #define KEXEC_CRASH_CONTROL_MEMORY_LIMIT KEXEC_CONTROL_MEMORY_LIMIT
  58 #endif
  59 
  60 #ifndef KEXEC_CRASH_MEM_ALIGN
  61 #define KEXEC_CRASH_MEM_ALIGN PAGE_SIZE
  62 #endif
  63 
  64 #define KEXEC_CORE_NOTE_NAME    CRASH_CORE_NOTE_NAME
  65 
  66 /*
  67  * This structure is used to hold the arguments that are used when loading
  68  * kernel binaries.
  69  */
  70 
  71 typedef unsigned long kimage_entry_t;
  72 
  73 struct kexec_segment {
  74         /*
  75          * This pointer can point to user memory if kexec_load() system
  76          * call is used or will point to kernel memory if
  77          * kexec_file_load() system call is used.
  78          *
  79          * Use ->buf when expecting to deal with user memory and use ->kbuf
  80          * when expecting to deal with kernel memory.
  81          */
  82         union {
  83                 void __user *buf;
  84                 void *kbuf;
  85         };
  86         size_t bufsz;
  87         unsigned long mem;
  88         size_t memsz;
  89 };
  90 
  91 #ifdef CONFIG_COMPAT
  92 struct compat_kexec_segment {
  93         compat_uptr_t buf;
  94         compat_size_t bufsz;
  95         compat_ulong_t mem;     /* User space sees this as a (void *) ... */
  96         compat_size_t memsz;
  97 };
  98 #endif
  99 
 100 #ifdef CONFIG_KEXEC_FILE
 101 struct purgatory_info {
 102         /*
 103          * Pointer to elf header at the beginning of kexec_purgatory.
 104          * Note: kexec_purgatory is read only
 105          */
 106         const Elf_Ehdr *ehdr;
 107         /*
 108          * Temporary, modifiable buffer for sechdrs used for relocation.
 109          * This memory can be freed post image load.
 110          */
 111         Elf_Shdr *sechdrs;
 112         /*
 113          * Temporary, modifiable buffer for stripped purgatory used for
 114          * relocation. This memory can be freed post image load.
 115          */
 116         void *purgatory_buf;
 117 };
 118 
 119 struct kimage;
 120 
 121 typedef int (kexec_probe_t)(const char *kernel_buf, unsigned long kernel_size);
 122 typedef void *(kexec_load_t)(struct kimage *image, char *kernel_buf,
 123                              unsigned long kernel_len, char *initrd,
 124                              unsigned long initrd_len, char *cmdline,
 125                              unsigned long cmdline_len);
 126 typedef int (kexec_cleanup_t)(void *loader_data);
 127 
 128 #ifdef CONFIG_KEXEC_SIG
 129 typedef int (kexec_verify_sig_t)(const char *kernel_buf,
 130                                  unsigned long kernel_len);
 131 #endif
 132 
 133 struct kexec_file_ops {
 134         kexec_probe_t *probe;
 135         kexec_load_t *load;
 136         kexec_cleanup_t *cleanup;
 137 #ifdef CONFIG_KEXEC_SIG
 138         kexec_verify_sig_t *verify_sig;
 139 #endif
 140 };
 141 
 142 extern const struct kexec_file_ops * const kexec_file_loaders[];
 143 
 144 int kexec_image_probe_default(struct kimage *image, void *buf,
 145                               unsigned long buf_len);
 146 int kexec_image_post_load_cleanup_default(struct kimage *image);
 147 
 148 /*
 149  * If kexec_buf.mem is set to this value, kexec_locate_mem_hole()
 150  * will try to allocate free memory. Arch may overwrite it.
 151  */
 152 #ifndef KEXEC_BUF_MEM_UNKNOWN
 153 #define KEXEC_BUF_MEM_UNKNOWN 0
 154 #endif
 155 
 156 /**
 157  * struct kexec_buf - parameters for finding a place for a buffer in memory
 158  * @image:      kexec image in which memory to search.
 159  * @buffer:     Contents which will be copied to the allocated memory.
 160  * @bufsz:      Size of @buffer.
 161  * @mem:        On return will have address of the buffer in memory.
 162  * @memsz:      Size for the buffer in memory.
 163  * @buf_align:  Minimum alignment needed.
 164  * @buf_min:    The buffer can't be placed below this address.
 165  * @buf_max:    The buffer can't be placed above this address.
 166  * @top_down:   Allocate from top of memory.
 167  */
 168 struct kexec_buf {
 169         struct kimage *image;
 170         void *buffer;
 171         unsigned long bufsz;
 172         unsigned long mem;
 173         unsigned long memsz;
 174         unsigned long buf_align;
 175         unsigned long buf_min;
 176         unsigned long buf_max;
 177         bool top_down;
 178 };
 179 
 180 int kexec_load_purgatory(struct kimage *image, struct kexec_buf *kbuf);
 181 int kexec_purgatory_get_set_symbol(struct kimage *image, const char *name,
 182                                    void *buf, unsigned int size,
 183                                    bool get_value);
 184 void *kexec_purgatory_get_symbol_addr(struct kimage *image, const char *name);
 185 
 186 int __weak arch_kexec_kernel_image_probe(struct kimage *image, void *buf,
 187                                          unsigned long buf_len);
 188 void * __weak arch_kexec_kernel_image_load(struct kimage *image);
 189 int __weak arch_kexec_apply_relocations_add(struct purgatory_info *pi,
 190                                             Elf_Shdr *section,
 191                                             const Elf_Shdr *relsec,
 192                                             const Elf_Shdr *symtab);
 193 int __weak arch_kexec_apply_relocations(struct purgatory_info *pi,
 194                                         Elf_Shdr *section,
 195                                         const Elf_Shdr *relsec,
 196                                         const Elf_Shdr *symtab);
 197 
 198 extern int kexec_add_buffer(struct kexec_buf *kbuf);
 199 int kexec_locate_mem_hole(struct kexec_buf *kbuf);
 200 
 201 /* Alignment required for elf header segment */
 202 #define ELF_CORE_HEADER_ALIGN   4096
 203 
 204 struct crash_mem_range {
 205         u64 start, end;
 206 };
 207 
 208 struct crash_mem {
 209         unsigned int max_nr_ranges;
 210         unsigned int nr_ranges;
 211         struct crash_mem_range ranges[0];
 212 };
 213 
 214 extern int crash_exclude_mem_range(struct crash_mem *mem,
 215                                    unsigned long long mstart,
 216                                    unsigned long long mend);
 217 extern int crash_prepare_elf64_headers(struct crash_mem *mem, int kernel_map,
 218                                        void **addr, unsigned long *sz);
 219 #endif /* CONFIG_KEXEC_FILE */
 220 
 221 #ifdef CONFIG_KEXEC_ELF
 222 struct kexec_elf_info {
 223         /*
 224          * Where the ELF binary contents are kept.
 225          * Memory managed by the user of the struct.
 226          */
 227         const char *buffer;
 228 
 229         const struct elfhdr *ehdr;
 230         const struct elf_phdr *proghdrs;
 231 };
 232 
 233 int kexec_build_elf_info(const char *buf, size_t len, struct elfhdr *ehdr,
 234                                struct kexec_elf_info *elf_info);
 235 
 236 int kexec_elf_load(struct kimage *image, struct elfhdr *ehdr,
 237                          struct kexec_elf_info *elf_info,
 238                          struct kexec_buf *kbuf,
 239                          unsigned long *lowest_load_addr);
 240 
 241 void kexec_free_elf_info(struct kexec_elf_info *elf_info);
 242 int kexec_elf_probe(const char *buf, unsigned long len);
 243 #endif
 244 struct kimage {
 245         kimage_entry_t head;
 246         kimage_entry_t *entry;
 247         kimage_entry_t *last_entry;
 248 
 249         unsigned long start;
 250         struct page *control_code_page;
 251         struct page *swap_page;
 252         void *vmcoreinfo_data_copy; /* locates in the crash memory */
 253 
 254         unsigned long nr_segments;
 255         struct kexec_segment segment[KEXEC_SEGMENT_MAX];
 256 
 257         struct list_head control_pages;
 258         struct list_head dest_pages;
 259         struct list_head unusable_pages;
 260 
 261         /* Address of next control page to allocate for crash kernels. */
 262         unsigned long control_page;
 263 
 264         /* Flags to indicate special processing */
 265         unsigned int type : 1;
 266 #define KEXEC_TYPE_DEFAULT 0
 267 #define KEXEC_TYPE_CRASH   1
 268         unsigned int preserve_context : 1;
 269         /* If set, we are using file mode kexec syscall */
 270         unsigned int file_mode:1;
 271 
 272 #ifdef ARCH_HAS_KIMAGE_ARCH
 273         struct kimage_arch arch;
 274 #endif
 275 
 276 #ifdef CONFIG_KEXEC_FILE
 277         /* Additional fields for file based kexec syscall */
 278         void *kernel_buf;
 279         unsigned long kernel_buf_len;
 280 
 281         void *initrd_buf;
 282         unsigned long initrd_buf_len;
 283 
 284         char *cmdline_buf;
 285         unsigned long cmdline_buf_len;
 286 
 287         /* File operations provided by image loader */
 288         const struct kexec_file_ops *fops;
 289 
 290         /* Image loader handling the kernel can store a pointer here */
 291         void *image_loader_data;
 292 
 293         /* Information for loading purgatory */
 294         struct purgatory_info purgatory_info;
 295 #endif
 296 };
 297 
 298 /* kexec interface functions */
 299 extern void machine_kexec(struct kimage *image);
 300 extern int machine_kexec_prepare(struct kimage *image);
 301 extern void machine_kexec_cleanup(struct kimage *image);
 302 extern int kernel_kexec(void);
 303 extern struct page *kimage_alloc_control_pages(struct kimage *image,
 304                                                 unsigned int order);
 305 extern void __crash_kexec(struct pt_regs *);
 306 extern void crash_kexec(struct pt_regs *);
 307 int kexec_should_crash(struct task_struct *);
 308 int kexec_crash_loaded(void);
 309 void crash_save_cpu(struct pt_regs *regs, int cpu);
 310 extern int kimage_crash_copy_vmcoreinfo(struct kimage *image);
 311 
 312 extern struct kimage *kexec_image;
 313 extern struct kimage *kexec_crash_image;
 314 extern int kexec_load_disabled;
 315 
 316 #ifndef kexec_flush_icache_page
 317 #define kexec_flush_icache_page(page)
 318 #endif
 319 
 320 /* List of defined/legal kexec flags */
 321 #ifndef CONFIG_KEXEC_JUMP
 322 #define KEXEC_FLAGS    KEXEC_ON_CRASH
 323 #else
 324 #define KEXEC_FLAGS    (KEXEC_ON_CRASH | KEXEC_PRESERVE_CONTEXT)
 325 #endif
 326 
 327 /* List of defined/legal kexec file flags */
 328 #define KEXEC_FILE_FLAGS        (KEXEC_FILE_UNLOAD | KEXEC_FILE_ON_CRASH | \
 329                                  KEXEC_FILE_NO_INITRAMFS)
 330 
 331 /* Location of a reserved region to hold the crash kernel.
 332  */
 333 extern struct resource crashk_res;
 334 extern struct resource crashk_low_res;
 335 extern note_buf_t __percpu *crash_notes;
 336 
 337 /* flag to track if kexec reboot is in progress */
 338 extern bool kexec_in_progress;
 339 
 340 int crash_shrink_memory(unsigned long new_size);
 341 size_t crash_get_memory_size(void);
 342 void crash_free_reserved_phys_range(unsigned long begin, unsigned long end);
 343 
 344 void arch_kexec_protect_crashkres(void);
 345 void arch_kexec_unprotect_crashkres(void);
 346 
 347 #ifndef page_to_boot_pfn
 348 static inline unsigned long page_to_boot_pfn(struct page *page)
 349 {
 350         return page_to_pfn(page);
 351 }
 352 #endif
 353 
 354 #ifndef boot_pfn_to_page
 355 static inline struct page *boot_pfn_to_page(unsigned long boot_pfn)
 356 {
 357         return pfn_to_page(boot_pfn);
 358 }
 359 #endif
 360 
 361 #ifndef phys_to_boot_phys
 362 static inline unsigned long phys_to_boot_phys(phys_addr_t phys)
 363 {
 364         return phys;
 365 }
 366 #endif
 367 
 368 #ifndef boot_phys_to_phys
 369 static inline phys_addr_t boot_phys_to_phys(unsigned long boot_phys)
 370 {
 371         return boot_phys;
 372 }
 373 #endif
 374 
 375 static inline unsigned long virt_to_boot_phys(void *addr)
 376 {
 377         return phys_to_boot_phys(__pa((unsigned long)addr));
 378 }
 379 
 380 static inline void *boot_phys_to_virt(unsigned long entry)
 381 {
 382         return phys_to_virt(boot_phys_to_phys(entry));
 383 }
 384 
 385 #ifndef arch_kexec_post_alloc_pages
 386 static inline int arch_kexec_post_alloc_pages(void *vaddr, unsigned int pages, gfp_t gfp) { return 0; }
 387 #endif
 388 
 389 #ifndef arch_kexec_pre_free_pages
 390 static inline void arch_kexec_pre_free_pages(void *vaddr, unsigned int pages) { }
 391 #endif
 392 
 393 #else /* !CONFIG_KEXEC_CORE */
 394 struct pt_regs;
 395 struct task_struct;
 396 static inline void __crash_kexec(struct pt_regs *regs) { }
 397 static inline void crash_kexec(struct pt_regs *regs) { }
 398 static inline int kexec_should_crash(struct task_struct *p) { return 0; }
 399 static inline int kexec_crash_loaded(void) { return 0; }
 400 #define kexec_in_progress false
 401 #endif /* CONFIG_KEXEC_CORE */
 402 
 403 #endif /* !defined(__ASSEBMLY__) */
 404 
 405 #endif /* LINUX_KEXEC_H */

/* [<][>][^][v][top][bottom][index][help] */