Loading arch/x86/include/asm/pat.h +2 −0 Original line number Original line Diff line number Diff line Loading @@ -22,4 +22,6 @@ int io_reserve_memtype(resource_size_t start, resource_size_t end, void io_free_memtype(resource_size_t start, resource_size_t end); void io_free_memtype(resource_size_t start, resource_size_t end); bool pat_pfn_immune_to_uc_mtrr(unsigned long pfn); #endif /* _ASM_X86_PAT_H */ #endif /* _ASM_X86_PAT_H */ arch/x86/mm/pat.c +19 −0 Original line number Original line Diff line number Diff line Loading @@ -677,6 +677,25 @@ static enum page_cache_mode lookup_memtype(u64 paddr) return rettype; return rettype; } } /** * pat_pfn_immune_to_uc_mtrr - Check whether the PAT memory type * of @pfn cannot be overridden by UC MTRR memory type. * * Only to be called when PAT is enabled. * * Returns true, if the PAT memory type of @pfn is UC, UC-, or WC. * Returns false in other cases. */ bool pat_pfn_immune_to_uc_mtrr(unsigned long pfn) { enum page_cache_mode cm = lookup_memtype(PFN_PHYS(pfn)); return cm == _PAGE_CACHE_MODE_UC || cm == _PAGE_CACHE_MODE_UC_MINUS || cm == _PAGE_CACHE_MODE_WC; } EXPORT_SYMBOL_GPL(pat_pfn_immune_to_uc_mtrr); /** /** * io_reserve_memtype - Request a memory type mapping for a region of memory * io_reserve_memtype - Request a memory type mapping for a region of memory * @start: start (physical address) of the region * @start: start (physical address) of the region Loading Loading
arch/x86/include/asm/pat.h +2 −0 Original line number Original line Diff line number Diff line Loading @@ -22,4 +22,6 @@ int io_reserve_memtype(resource_size_t start, resource_size_t end, void io_free_memtype(resource_size_t start, resource_size_t end); void io_free_memtype(resource_size_t start, resource_size_t end); bool pat_pfn_immune_to_uc_mtrr(unsigned long pfn); #endif /* _ASM_X86_PAT_H */ #endif /* _ASM_X86_PAT_H */
arch/x86/mm/pat.c +19 −0 Original line number Original line Diff line number Diff line Loading @@ -677,6 +677,25 @@ static enum page_cache_mode lookup_memtype(u64 paddr) return rettype; return rettype; } } /** * pat_pfn_immune_to_uc_mtrr - Check whether the PAT memory type * of @pfn cannot be overridden by UC MTRR memory type. * * Only to be called when PAT is enabled. * * Returns true, if the PAT memory type of @pfn is UC, UC-, or WC. * Returns false in other cases. */ bool pat_pfn_immune_to_uc_mtrr(unsigned long pfn) { enum page_cache_mode cm = lookup_memtype(PFN_PHYS(pfn)); return cm == _PAGE_CACHE_MODE_UC || cm == _PAGE_CACHE_MODE_UC_MINUS || cm == _PAGE_CACHE_MODE_WC; } EXPORT_SYMBOL_GPL(pat_pfn_immune_to_uc_mtrr); /** /** * io_reserve_memtype - Request a memory type mapping for a region of memory * io_reserve_memtype - Request a memory type mapping for a region of memory * @start: start (physical address) of the region * @start: start (physical address) of the region Loading