mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-22 05:44:31 +08:00
x86, pat: Add lookup_memtype to get the current memtype of a paddr
Add a new routine lookup_memtype() to get the current memtype based on the PAT reserves and frees. Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com> Signed-off-by: H. Peter Anvin <hpa@zytor.com>
This commit is contained in:
parent
f584174096
commit
637b86e75f
@ -573,6 +573,51 @@ unlock_ret:
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* lookup_memtype - Looksup the memory type for a physical address
|
||||
* @paddr: physical address of which memory type needs to be looked up
|
||||
*
|
||||
* Only to be called when PAT is enabled
|
||||
*
|
||||
* Returns _PAGE_CACHE_WB, _PAGE_CACHE_WC, _PAGE_CACHE_UC_MINUS or
|
||||
* _PAGE_CACHE_UC
|
||||
*/
|
||||
static unsigned long lookup_memtype(u64 paddr)
|
||||
{
|
||||
int rettype = _PAGE_CACHE_WB;
|
||||
struct memtype *entry;
|
||||
|
||||
if (is_ISA_range(paddr, paddr + PAGE_SIZE - 1))
|
||||
return rettype;
|
||||
|
||||
if (pat_pagerange_is_ram(paddr, paddr + PAGE_SIZE)) {
|
||||
struct page *page;
|
||||
spin_lock(&memtype_lock);
|
||||
page = pfn_to_page(paddr >> PAGE_SHIFT);
|
||||
rettype = get_page_memtype(page);
|
||||
spin_unlock(&memtype_lock);
|
||||
/*
|
||||
* -1 from get_page_memtype() implies RAM page is in its
|
||||
* default state and not reserved, and hence of type WB
|
||||
*/
|
||||
if (rettype == -1)
|
||||
rettype = _PAGE_CACHE_WB;
|
||||
|
||||
return rettype;
|
||||
}
|
||||
|
||||
spin_lock(&memtype_lock);
|
||||
|
||||
entry = memtype_rb_search(&memtype_rbroot, paddr);
|
||||
if (entry != NULL)
|
||||
rettype = entry->type;
|
||||
else
|
||||
rettype = _PAGE_CACHE_UC_MINUS;
|
||||
|
||||
spin_unlock(&memtype_lock);
|
||||
return rettype;
|
||||
}
|
||||
|
||||
/**
|
||||
* io_reserve_memtype - Request a memory type mapping for a region of memory
|
||||
* @start: start (physical address) of the region
|
||||
|
Loading…
Reference in New Issue
Block a user