diff options
| author | venkatesh.pallipadi@intel.com <venkatesh.pallipadi@intel.com> | 2009-01-09 19:13:10 -0500 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2009-01-13 13:13:00 -0500 |
| commit | afc7d20c8429f32f19d47367fdc36eeed2334ec3 (patch) | |
| tree | e817ea903498dcce184a758efb44d6e29223cfa3 | |
| parent | a36706131182f5507d1e2cfbf391b0fa8d72203c (diff) | |
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>
| -rw-r--r-- | arch/x86/include/asm/pgtable.h | 19 | ||||
| -rw-r--r-- | arch/x86/pci/i386.c | 12 |
2 files changed, 20 insertions, 11 deletions
diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h index 83e69f4a37f0..06bbcbd66e9c 100644 --- a/arch/x86/include/asm/pgtable.h +++ b/arch/x86/include/asm/pgtable.h | |||
| @@ -341,6 +341,25 @@ static inline pgprot_t pgprot_modify(pgprot_t oldprot, pgprot_t newprot) | |||
| 341 | 341 | ||
| 342 | #define canon_pgprot(p) __pgprot(pgprot_val(p) & __supported_pte_mask) | 342 | #define canon_pgprot(p) __pgprot(pgprot_val(p) & __supported_pte_mask) |
| 343 | 343 | ||
| 344 | static inline int is_new_memtype_allowed(unsigned long flags, | ||
| 345 | unsigned long new_flags) | ||
| 346 | { | ||
| 347 | /* | ||
| 348 | * Certain new memtypes are not allowed with certain | ||
| 349 | * requested memtype: | ||
| 350 | * - request is uncached, return cannot be write-back | ||
| 351 | * - request is write-combine, return cannot be write-back | ||
| 352 | */ | ||
| 353 | if ((flags == _PAGE_CACHE_UC_MINUS && | ||
| 354 | new_flags == _PAGE_CACHE_WB) || | ||
| 355 | (flags == _PAGE_CACHE_WC && | ||
| 356 | new_flags == _PAGE_CACHE_WB)) { | ||
| 357 | return 0; | ||
| 358 | } | ||
| 359 | |||
| 360 | return 1; | ||
| 361 | } | ||
| 362 | |||
| 344 | #ifndef __ASSEMBLY__ | 363 | #ifndef __ASSEMBLY__ |
| 345 | /* Indicate that x86 has its own track and untrack pfn vma functions */ | 364 | /* Indicate that x86 has its own track and untrack pfn vma functions */ |
| 346 | #define __HAVE_PFNMAP_TRACKING | 365 | #define __HAVE_PFNMAP_TRACKING |
diff --git a/arch/x86/pci/i386.c b/arch/x86/pci/i386.c index f884740da318..5ead808dd70c 100644 --- a/arch/x86/pci/i386.c +++ b/arch/x86/pci/i386.c | |||
| @@ -314,17 +314,7 @@ int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma, | |||
| 314 | return retval; | 314 | return retval; |
| 315 | 315 | ||
| 316 | if (flags != new_flags) { | 316 | if (flags != new_flags) { |
| 317 | /* | 317 | if (!is_new_memtype_allowed(flags, new_flags)) { |
| 318 | * Do not fallback to certain memory types with certain | ||
| 319 | * requested type: | ||
| 320 | * - request is uncached, return cannot be write-back | ||
| 321 | * - request is uncached, return cannot be write-combine | ||
| 322 | * - request is write-combine, return cannot be write-back | ||
| 323 | */ | ||
| 324 | if ((flags == _PAGE_CACHE_UC_MINUS && | ||
| 325 | (new_flags == _PAGE_CACHE_WB)) || | ||
| 326 | (flags == _PAGE_CACHE_WC && | ||
| 327 | new_flags == _PAGE_CACHE_WB)) { | ||
| 328 | free_memtype(addr, addr+len); | 318 | free_memtype(addr, addr+len); |
| 329 | return -EINVAL; | 319 | return -EINVAL; |
| 330 | } | 320 | } |
