cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

page_ext.h (1877B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef __LINUX_PAGE_EXT_H
      3#define __LINUX_PAGE_EXT_H
      4
      5#include <linux/types.h>
      6#include <linux/stacktrace.h>
      7#include <linux/stackdepot.h>
      8
      9struct pglist_data;
     10struct page_ext_operations {
     11	size_t offset;
     12	size_t size;
     13	bool (*need)(void);
     14	void (*init)(void);
     15};
     16
     17#ifdef CONFIG_PAGE_EXTENSION
     18
     19enum page_ext_flags {
     20	PAGE_EXT_OWNER,
     21	PAGE_EXT_OWNER_ALLOCATED,
     22#if defined(CONFIG_PAGE_IDLE_FLAG) && !defined(CONFIG_64BIT)
     23	PAGE_EXT_YOUNG,
     24	PAGE_EXT_IDLE,
     25#endif
     26};
     27
     28/*
     29 * Page Extension can be considered as an extended mem_map.
     30 * A page_ext page is associated with every page descriptor. The
     31 * page_ext helps us add more information about the page.
     32 * All page_ext are allocated at boot or memory hotplug event,
     33 * then the page_ext for pfn always exists.
     34 */
     35struct page_ext {
     36	unsigned long flags;
     37};
     38
     39extern unsigned long page_ext_size;
     40extern void pgdat_page_ext_init(struct pglist_data *pgdat);
     41
     42#ifdef CONFIG_SPARSEMEM
     43static inline void page_ext_init_flatmem(void)
     44{
     45}
     46extern void page_ext_init(void);
     47static inline void page_ext_init_flatmem_late(void)
     48{
     49}
     50#else
     51extern void page_ext_init_flatmem(void);
     52extern void page_ext_init_flatmem_late(void);
     53static inline void page_ext_init(void)
     54{
     55}
     56#endif
     57
     58struct page_ext *lookup_page_ext(const struct page *page);
     59
     60static inline struct page_ext *page_ext_next(struct page_ext *curr)
     61{
     62	void *next = curr;
     63	next += page_ext_size;
     64	return next;
     65}
     66
     67#else /* !CONFIG_PAGE_EXTENSION */
     68struct page_ext;
     69
     70static inline void pgdat_page_ext_init(struct pglist_data *pgdat)
     71{
     72}
     73
     74static inline struct page_ext *lookup_page_ext(const struct page *page)
     75{
     76	return NULL;
     77}
     78
     79static inline void page_ext_init(void)
     80{
     81}
     82
     83static inline void page_ext_init_flatmem_late(void)
     84{
     85}
     86
     87static inline void page_ext_init_flatmem(void)
     88{
     89}
     90#endif /* CONFIG_PAGE_EXTENSION */
     91#endif /* __LINUX_PAGE_EXT_H */