Something went wrong. Try again.
(I'm so sorry!) Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143/* SPDX-License-Identifier: GPL-2.0 */#ifndef LINUX_KEXEC_HANDOVER_H#define LINUX_KEXEC_HANDOVER_H
#include <linux/err.h>#include <linux/errno.h>#include <linux/types.h>#include <linux/mm.h>#include <asm-generic/kexec_handover.h>
struct kho_vmalloc;
struct folio;struct page;
#ifdef CONFIG_KEXEC_HANDOVERbool kho_is_enabled(void);bool is_kho_boot(void);
int kho_preserve_folio(struct folio *folio);void kho_unpreserve_folio(struct folio *folio);int kho_preserve_pages(struct page *page, unsigned long nr_pages);void kho_unpreserve_pages(struct page *page, unsigned long nr_pages);int kho_preserve_vmalloc(void *ptr, struct kho_vmalloc *preservation);void kho_unpreserve_vmalloc(struct kho_vmalloc *preservation);void *kho_alloc_preserve(size_t size);void kho_unpreserve_free(void *mem);void kho_restore_free(void *mem);struct folio *kho_restore_folio(phys_addr_t phys);struct page *kho_restore_pages(phys_addr_t phys, unsigned long nr_pages);void *kho_restore_vmalloc(const struct kho_vmalloc *preservation);int kho_add_subtree(const char *name, void *blob, size_t size);void kho_remove_subtree(void *blob);int kho_retrieve_subtree(const char *name, phys_addr_t *phys, size_t *size);
void kho_memory_init(void);void kho_memory_init_early(void);
void kho_populate(phys_addr_t fdt_phys, u64 fdt_len, phys_addr_t bootmem_phys, u64 bootmem_len);
bool kho_bootmem_overlap(phys_addr_t phys, size_t size);
static inline enum migratetype kho_bootmem_migratetype(unsigned long pfn, enum migratetype mt){ if (kho_bootmem_overlap(PFN_PHYS(pfn), pageblock_nr_pages << PAGE_SHIFT)) return MIGRATE_CMA; return mt;}#elsestatic inline bool kho_is_enabled(void){ return false;}
static inline bool is_kho_boot(void){ return false;}
static inline int kho_preserve_folio(struct folio *folio){ return -EOPNOTSUPP;}
static inline void kho_unpreserve_folio(struct folio *folio) { }
static inline int kho_preserve_pages(struct page *page, unsigned int nr_pages){ return -EOPNOTSUPP;}
static inline void kho_unpreserve_pages(struct page *page, unsigned int nr_pages) { }
static inline int kho_preserve_vmalloc(void *ptr, struct kho_vmalloc *preservation){ return -EOPNOTSUPP;}
static inline void kho_unpreserve_vmalloc(struct kho_vmalloc *preservation) { }
static inline void *kho_alloc_preserve(size_t size){ return ERR_PTR(-EOPNOTSUPP);}
static inline void kho_unpreserve_free(void *mem) { }static inline void kho_restore_free(void *mem) { }
static inline struct folio *kho_restore_folio(phys_addr_t phys){ return NULL;}
static inline struct page *kho_restore_pages(phys_addr_t phys, unsigned int nr_pages){ return NULL;}
static inline void *kho_restore_vmalloc(const struct kho_vmalloc *preservation){ return NULL;}
static inline int kho_add_subtree(const char *name, void *blob, size_t size){ return -EOPNOTSUPP;}
static inline void kho_remove_subtree(void *blob) { }
static inline int kho_retrieve_subtree(const char *name, phys_addr_t *phys, size_t *size){ return -EOPNOTSUPP;}
static inline void kho_memory_init(void) { }
static inline void kho_memory_init_early(void) { }
static inline void kho_populate(phys_addr_t fdt_phys, u64 fdt_len, phys_addr_t bootmem_phys, u64 bootmem_len){}
static inline bool kho_bootmem_overlap(phys_addr_t phys, size_t size){ return false;}
static inline enum migratetype kho_bootmem_migratetype(unsigned long pfn, enum migratetype mt){ return mt;}#endif /* CONFIG_KEXEC_HANDOVER */
#endif /* LINUX_KEXEC_HANDOVER_H */