x86 PAT: consolidate old memtype new memtype check into a function
Impact: cleanup Move the new memtype old memtype allowed check to header so that is can be shared by other users. Subsequent patch uses this in pat.c in remap_pfn_range() code path. No functionality change in this patch. Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
a367061311
commit
afc7d20c84
2 changed files with 20 additions and 11 deletions
|
@ -341,6 +341,25 @@ static inline pgprot_t pgprot_modify(pgprot_t oldprot, pgprot_t newprot)
|
||||||
|
|
||||||
#define canon_pgprot(p) __pgprot(pgprot_val(p) & __supported_pte_mask)
|
#define canon_pgprot(p) __pgprot(pgprot_val(p) & __supported_pte_mask)
|
||||||
|
|
||||||
|
static inline int is_new_memtype_allowed(unsigned long flags,
|
||||||
|
unsigned long new_flags)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Certain new memtypes are not allowed with certain
|
||||||
|
* requested memtype:
|
||||||
|
* - request is uncached, return cannot be write-back
|
||||||
|
* - request is write-combine, return cannot be write-back
|
||||||
|
*/
|
||||||
|
if ((flags == _PAGE_CACHE_UC_MINUS &&
|
||||||
|
new_flags == _PAGE_CACHE_WB) ||
|
||||||
|
(flags == _PAGE_CACHE_WC &&
|
||||||
|
new_flags == _PAGE_CACHE_WB)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
/* Indicate that x86 has its own track and untrack pfn vma functions */
|
/* Indicate that x86 has its own track and untrack pfn vma functions */
|
||||||
#define __HAVE_PFNMAP_TRACKING
|
#define __HAVE_PFNMAP_TRACKING
|
||||||
|
|
|
@ -314,17 +314,7 @@ int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
|
||||||
return retval;
|
return retval;
|
||||||
|
|
||||||
if (flags != new_flags) {
|
if (flags != new_flags) {
|
||||||
/*
|
if (!is_new_memtype_allowed(flags, new_flags)) {
|
||||||
* Do not fallback to certain memory types with certain
|
|
||||||
* requested type:
|
|
||||||
* - request is uncached, return cannot be write-back
|
|
||||||
* - request is uncached, return cannot be write-combine
|
|
||||||
* - request is write-combine, return cannot be write-back
|
|
||||||
*/
|
|
||||||
if ((flags == _PAGE_CACHE_UC_MINUS &&
|
|
||||||
(new_flags == _PAGE_CACHE_WB)) ||
|
|
||||||
(flags == _PAGE_CACHE_WC &&
|
|
||||||
new_flags == _PAGE_CACHE_WB)) {
|
|
||||||
free_memtype(addr, addr+len);
|
free_memtype(addr, addr+len);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue