PCI: pnv_php: Add missing of_node_put()
[linux-2.6-block.git] / include / linux / kexec.h
index 0ebcbeb210566468c9c167937b8aa17070f4e38e..9e4e638fb5051b1337718535db5ae20b7a63c07c 100644 (file)
@@ -99,21 +99,25 @@ struct compat_kexec_segment {
 
 #ifdef CONFIG_KEXEC_FILE
 struct purgatory_info {
-       /* Pointer to elf header of read only purgatory */
-       Elf_Ehdr *ehdr;
-
-       /* Pointer to purgatory sechdrs which are modifiable */
+       /*
+        * Pointer to elf header at the beginning of kexec_purgatory.
+        * Note: kexec_purgatory is read only
+        */
+       const Elf_Ehdr *ehdr;
+       /*
+        * Temporary, modifiable buffer for sechdrs used for relocation.
+        * This memory can be freed post image load.
+        */
        Elf_Shdr *sechdrs;
        /*
-        * Temporary buffer location where purgatory is loaded and relocated
-        * This memory can be freed post image load
+        * Temporary, modifiable buffer for stripped purgatory used for
+        * relocation. This memory can be freed post image load.
         */
        void *purgatory_buf;
-
-       /* Address where purgatory is finally loaded and is executed from */
-       unsigned long purgatory_load_addr;
 };
 
+struct kimage;
+
 typedef int (kexec_probe_t)(const char *kernel_buf, unsigned long kernel_size);
 typedef void *(kexec_load_t)(struct kimage *image, char *kernel_buf,
                             unsigned long kernel_len, char *initrd,
@@ -135,6 +139,11 @@ struct kexec_file_ops {
 #endif
 };
 
+extern const struct kexec_file_ops * const kexec_file_loaders[];
+
+int kexec_image_probe_default(struct kimage *image, void *buf,
+                             unsigned long buf_len);
+
 /**
  * struct kexec_buf - parameters for finding a place for a buffer in memory
  * @image:     kexec image in which memory to search.
@@ -159,10 +168,44 @@ struct kexec_buf {
        bool top_down;
 };
 
+int kexec_load_purgatory(struct kimage *image, struct kexec_buf *kbuf);
+int kexec_purgatory_get_set_symbol(struct kimage *image, const char *name,
+                                  void *buf, unsigned int size,
+                                  bool get_value);
+void *kexec_purgatory_get_symbol_addr(struct kimage *image, const char *name);
+
+int __weak arch_kexec_apply_relocations_add(struct purgatory_info *pi,
+                                           Elf_Shdr *section,
+                                           const Elf_Shdr *relsec,
+                                           const Elf_Shdr *symtab);
+int __weak arch_kexec_apply_relocations(struct purgatory_info *pi,
+                                       Elf_Shdr *section,
+                                       const Elf_Shdr *relsec,
+                                       const Elf_Shdr *symtab);
+
 int __weak arch_kexec_walk_mem(struct kexec_buf *kbuf,
                               int (*func)(struct resource *, void *));
 extern int kexec_add_buffer(struct kexec_buf *kbuf);
 int kexec_locate_mem_hole(struct kexec_buf *kbuf);
+
+/* Alignment required for elf header segment */
+#define ELF_CORE_HEADER_ALIGN   4096
+
+struct crash_mem_range {
+       u64 start, end;
+};
+
+struct crash_mem {
+       unsigned int max_nr_ranges;
+       unsigned int nr_ranges;
+       struct crash_mem_range ranges[0];
+};
+
+extern int crash_exclude_mem_range(struct crash_mem *mem,
+                                  unsigned long long mstart,
+                                  unsigned long long mend);
+extern int crash_prepare_elf64_headers(struct crash_mem *mem, int kernel_map,
+                                      void **addr, unsigned long *sz);
 #endif /* CONFIG_KEXEC_FILE */
 
 struct kimage {
@@ -209,7 +252,7 @@ struct kimage {
        unsigned long cmdline_buf_len;
 
        /* File operations provided by image loader */
-       struct kexec_file_ops *fops;
+       const struct kexec_file_ops *fops;
 
        /* Image loader handling the kernel can store a pointer here */
        void *image_loader_data;
@@ -226,14 +269,6 @@ extern void machine_kexec_cleanup(struct kimage *image);
 extern int kernel_kexec(void);
 extern struct page *kimage_alloc_control_pages(struct kimage *image,
                                                unsigned int order);
-extern int kexec_load_purgatory(struct kimage *image, unsigned long min,
-                               unsigned long max, int top_down,
-                               unsigned long *load_addr);
-extern int kexec_purgatory_get_set_symbol(struct kimage *image,
-                                         const char *name, void *buf,
-                                         unsigned int size, bool get_value);
-extern void *kexec_purgatory_get_symbol_addr(struct kimage *image,
-                                            const char *name);
 extern void __crash_kexec(struct pt_regs *);
 extern void crash_kexec(struct pt_regs *);
 int kexec_should_crash(struct task_struct *);
@@ -273,16 +308,6 @@ int crash_shrink_memory(unsigned long new_size);
 size_t crash_get_memory_size(void);
 void crash_free_reserved_phys_range(unsigned long begin, unsigned long end);
 
-int __weak arch_kexec_kernel_image_probe(struct kimage *image, void *buf,
-                                        unsigned long buf_len);
-void * __weak arch_kexec_kernel_image_load(struct kimage *image);
-int __weak arch_kimage_file_post_load_cleanup(struct kimage *image);
-int __weak arch_kexec_kernel_verify_sig(struct kimage *image, void *buf,
-                                       unsigned long buf_len);
-int __weak arch_kexec_apply_relocations_add(const Elf_Ehdr *ehdr,
-                                       Elf_Shdr *sechdrs, unsigned int relsec);
-int __weak arch_kexec_apply_relocations(const Elf_Ehdr *ehdr, Elf_Shdr *sechdrs,
-                                       unsigned int relsec);
 void arch_kexec_protect_crashkres(void);
 void arch_kexec_unprotect_crashkres(void);