On 12/21/15 at 02:09pm, Xunlei Pang wrote: > diff --git a/include/linux/kexec.h b/include/linux/kexec.h > index 7b68d27..2cc643c 100644 > --- a/include/linux/kexec.h > +++ b/include/linux/kexec.h > @@ -109,11 +109,7 @@ struct compat_kexec_segment { > }; > #endif > > -struct kexec_sha_region { > - unsigned long start; > - unsigned long len; > -}; > - > +#ifdef CONFIG_KEXEC_FILE > struct purgatory_info { > /* Pointer to elf header of read only purgatory */ > Elf_Ehdr *ehdr; > @@ -130,6 +126,28 @@ struct purgatory_info { > unsigned long purgatory_load_addr; > }; > > +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, > + unsigned long initrd_len, char *cmdline, > + unsigned long cmdline_len); > +typedef int (kexec_cleanup_t)(void *loader_data); > + > +#ifdef CONFIG_KEXEC_VERIFY_SIG > +typedef int (kexec_verify_sig_t)(const char *kernel_buf, > + unsigned long kernel_len); > +#endif > + > +struct kexec_file_ops { > + kexec_probe_t *probe; > + kexec_load_t *load; > + kexec_cleanup_t *cleanup; > +#ifdef CONFIG_KEXEC_VERIFY_SIG > + kexec_verify_sig_t *verify_sig; > +#endif > +}; > +#endif > + > struct kimage { > kimage_entry_t head; > kimage_entry_t *entry; > @@ -161,6 +179,7 @@ struct kimage { > struct kimage_arch arch; > #endif > > +#ifdef CONFIG_KEXEC_FILE > /* Additional fields for file based kexec syscall */ > void *kernel_buf; > unsigned long kernel_buf_len; > @@ -179,38 +198,7 @@ struct kimage { > > /* Information for loading purgatory */ > struct purgatory_info purgatory_info; > -}; > - > -/* > - * Keeps track of buffer parameters as provided by caller for requesting > - * memory placement of buffer. > - */ > -struct kexec_buf { > - struct kimage *image; > - char *buffer; > - unsigned long bufsz; > - unsigned long mem; > - unsigned long memsz; > - unsigned long buf_align; > - unsigned long buf_min; > - unsigned long buf_max; > - bool top_down; /* allocate from top of memory hole */ > -}; > - > -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, > - unsigned long initrd_len, char *cmdline, > - unsigned long cmdline_len); > -typedef int (kexec_cleanup_t)(void *loader_data); > -typedef int (kexec_verify_sig_t)(const char *kernel_buf, > - unsigned long kernel_len); > - > -struct kexec_file_ops { > - kexec_probe_t *probe; > - kexec_load_t *load; > - kexec_cleanup_t *cleanup; > - kexec_verify_sig_t *verify_sig; > +#endif > }; > > /* kexec interface functions */ Hi, Xunlei. Following functions will be used only in kexec_file. Please wrap them in CONFIG_KEXEC_FILE. 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); Thanks Minfei