60 lines
1.2 KiB
C
60 lines
1.2 KiB
C
|
#ifndef __LINUX_PAGE_EXT_H
|
||
|
#define __LINUX_PAGE_EXT_H
|
||
|
|
||
|
struct pglist_data;
|
||
|
struct page_ext_operations {
|
||
|
bool (*need)(void);
|
||
|
void (*init)(void);
|
||
|
};
|
||
|
|
||
|
#ifdef CONFIG_PAGE_EXTENSION
|
||
|
|
||
|
/*
|
||
|
* Page Extension can be considered as an extended mem_map.
|
||
|
* A page_ext page is associated with every page descriptor. The
|
||
|
* page_ext helps us add more information about the page.
|
||
|
* All page_ext are allocated at boot or memory hotplug event,
|
||
|
* then the page_ext for pfn always exists.
|
||
|
*/
|
||
|
struct page_ext {
|
||
|
unsigned long flags;
|
||
|
};
|
||
|
|
||
|
extern void pgdat_page_ext_init(struct pglist_data *pgdat);
|
||
|
|
||
|
#ifdef CONFIG_SPARSEMEM
|
||
|
static inline void page_ext_init_flatmem(void)
|
||
|
{
|
||
|
}
|
||
|
extern void page_ext_init(void);
|
||
|
#else
|
||
|
extern void page_ext_init_flatmem(void);
|
||
|
static inline void page_ext_init(void)
|
||
|
{
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
struct page_ext *lookup_page_ext(struct page *page);
|
||
|
|
||
|
#else /* !CONFIG_PAGE_EXTENSION */
|
||
|
struct page_ext;
|
||
|
|
||
|
static inline void pgdat_page_ext_init(struct pglist_data *pgdat)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
static inline struct page_ext *lookup_page_ext(struct page *page)
|
||
|
{
|
||
|
return NULL;
|
||
|
}
|
||
|
|
||
|
static inline void page_ext_init(void)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
static inline void page_ext_init_flatmem(void)
|
||
|
{
|
||
|
}
|
||
|
#endif /* CONFIG_PAGE_EXTENSION */
|
||
|
#endif /* __LINUX_PAGE_EXT_H */
|