memtype.h (1470B)
1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef __MEMTYPE_H_ 3#define __MEMTYPE_H_ 4 5extern int pat_debug_enable; 6 7#define dprintk(fmt, arg...) \ 8 do { if (pat_debug_enable) pr_info("x86/PAT: " fmt, ##arg); } while (0) 9 10struct memtype { 11 u64 start; 12 u64 end; 13 u64 subtree_max_end; 14 enum page_cache_mode type; 15 struct rb_node rb; 16}; 17 18static inline char *cattr_name(enum page_cache_mode pcm) 19{ 20 switch (pcm) { 21 case _PAGE_CACHE_MODE_UC: return "uncached"; 22 case _PAGE_CACHE_MODE_UC_MINUS: return "uncached-minus"; 23 case _PAGE_CACHE_MODE_WB: return "write-back"; 24 case _PAGE_CACHE_MODE_WC: return "write-combining"; 25 case _PAGE_CACHE_MODE_WT: return "write-through"; 26 case _PAGE_CACHE_MODE_WP: return "write-protected"; 27 default: return "broken"; 28 } 29} 30 31#ifdef CONFIG_X86_PAT 32extern int memtype_check_insert(struct memtype *entry_new, 33 enum page_cache_mode *new_type); 34extern struct memtype *memtype_erase(u64 start, u64 end); 35extern struct memtype *memtype_lookup(u64 addr); 36extern int memtype_copy_nth_element(struct memtype *entry_out, loff_t pos); 37#else 38static inline int memtype_check_insert(struct memtype *entry_new, 39 enum page_cache_mode *new_type) 40{ return 0; } 41static inline struct memtype *memtype_erase(u64 start, u64 end) 42{ return NULL; } 43static inline struct memtype *memtype_lookup(u64 addr) 44{ return NULL; } 45static inline int memtype_copy_nth_element(struct memtype *out, loff_t pos) 46{ return 0; } 47#endif 48 49#endif /* __MEMTYPE_H_ */