Line data Source code
1 : /* SPDX-License-Identifier: GPL-2.0 */ 2 : #ifndef __MEMTYPE_H_ 3 : #define __MEMTYPE_H_ 4 : 5 : extern 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 : 10 : struct 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 : 18 0 : static inline char *cattr_name(enum page_cache_mode pcm) 19 : { 20 0 : 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 32 : extern int memtype_check_insert(struct memtype *entry_new, 33 : enum page_cache_mode *new_type); 34 : extern struct memtype *memtype_erase(u64 start, u64 end); 35 : extern struct memtype *memtype_lookup(u64 addr); 36 : extern int memtype_copy_nth_element(struct memtype *entry_out, loff_t pos); 37 : #else 38 0 : static inline int memtype_check_insert(struct memtype *entry_new, 39 : enum page_cache_mode *new_type) 40 0 : { return 0; } 41 0 : static inline struct memtype *memtype_erase(u64 start, u64 end) 42 0 : { return NULL; } 43 0 : static inline struct memtype *memtype_lookup(u64 addr) 44 0 : { return NULL; } 45 : static inline int memtype_copy_nth_element(struct memtype *out, loff_t pos) 46 : { return 0; } 47 : #endif 48 : 49 : #endif /* __MEMTYPE_H_ */