forked from luck/tmp_suning_uos_patched
9e41a49aab
Move pat backend to fully rbtree based implementation from the existing rbtree and linked list hybrid. New rbtree based solution uses interval trees (augmented rbtrees) in order to store the PAT ranges. The new code seprates out the pat backend to pat_rbtree.c file, making is cleaner. The change also makes the PAT lookup, reserve and free operations more optimal, as we don't have to traverse linear linked list of few tens of entries in normal case. Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> LKML-Reference: <20100210232607.GB11465@linux-os.sc.intel.com> Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com> Signed-off-by: H. Peter Anvin <hpa@zytor.com>
47 lines
1.3 KiB
C
47 lines
1.3 KiB
C
#ifndef __PAT_INTERNAL_H_
|
|
#define __PAT_INTERNAL_H_
|
|
|
|
extern int pat_debug_enable;
|
|
|
|
#define dprintk(fmt, arg...) \
|
|
do { if (pat_debug_enable) printk(KERN_INFO fmt, ##arg); } while (0)
|
|
|
|
struct memtype {
|
|
u64 start;
|
|
u64 end;
|
|
u64 subtree_max_end;
|
|
unsigned long type;
|
|
struct rb_node rb;
|
|
};
|
|
|
|
static inline char *cattr_name(unsigned long flags)
|
|
{
|
|
switch (flags & _PAGE_CACHE_MASK) {
|
|
case _PAGE_CACHE_UC: return "uncached";
|
|
case _PAGE_CACHE_UC_MINUS: return "uncached-minus";
|
|
case _PAGE_CACHE_WB: return "write-back";
|
|
case _PAGE_CACHE_WC: return "write-combining";
|
|
default: return "broken";
|
|
}
|
|
}
|
|
|
|
#ifdef CONFIG_X86_PAT
|
|
extern int rbt_memtype_check_insert(struct memtype *new,
|
|
unsigned long *new_type);
|
|
extern int rbt_memtype_erase(u64 start, u64 end);
|
|
extern struct memtype *rbt_memtype_lookup(u64 addr);
|
|
extern int rbt_memtype_copy_nth_element(struct memtype *out, loff_t pos);
|
|
#else
|
|
static inline int rbt_memtype_check_insert(struct memtype *new,
|
|
unsigned long *new_type)
|
|
{ return 0; }
|
|
static inline int rbt_memtype_erase(u64 start, u64 end)
|
|
{ return 0; }
|
|
static inline struct memtype *rbt_memtype_lookup(u64 addr)
|
|
{ return NULL; }
|
|
static inline int rbt_memtype_copy_nth_element(struct memtype *out, loff_t pos)
|
|
{ return 0; }
|
|
#endif
|
|
|
|
#endif /* __PAT_INTERNAL_H_ */
|