diff options
Diffstat (limited to 'arch/x86/mm/pat.c')
-rw-r--r-- | arch/x86/mm/pat.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c index 47282c273647..6d5a8e3ef63d 100644 --- a/arch/x86/mm/pat.c +++ b/arch/x86/mm/pat.c | |||
@@ -442,25 +442,27 @@ static unsigned long lookup_memtype(u64 paddr) | |||
442 | * On failure, returns non-zero | 442 | * On failure, returns non-zero |
443 | */ | 443 | */ |
444 | int io_reserve_memtype(resource_size_t start, resource_size_t end, | 444 | int io_reserve_memtype(resource_size_t start, resource_size_t end, |
445 | unsigned long *type) | 445 | enum page_cache_mode *type) |
446 | { | 446 | { |
447 | resource_size_t size = end - start; | 447 | resource_size_t size = end - start; |
448 | unsigned long req_type = *type; | 448 | enum page_cache_mode req_type = *type; |
449 | unsigned long new_type; | 449 | enum page_cache_mode new_type; |
450 | unsigned long new_prot; | ||
450 | int ret; | 451 | int ret; |
451 | 452 | ||
452 | WARN_ON_ONCE(iomem_map_sanity_check(start, size)); | 453 | WARN_ON_ONCE(iomem_map_sanity_check(start, size)); |
453 | 454 | ||
454 | ret = reserve_memtype(start, end, req_type, &new_type); | 455 | ret = reserve_memtype(start, end, cachemode2protval(req_type), |
456 | &new_prot); | ||
455 | if (ret) | 457 | if (ret) |
456 | goto out_err; | 458 | goto out_err; |
457 | 459 | ||
458 | if (!is_new_memtype_allowed(start, size, | 460 | new_type = pgprot2cachemode(__pgprot(new_prot)); |
459 | pgprot2cachemode(__pgprot(req_type)), | 461 | |
460 | pgprot2cachemode(__pgprot(new_type)))) | 462 | if (!is_new_memtype_allowed(start, size, req_type, new_type)) |
461 | goto out_free; | 463 | goto out_free; |
462 | 464 | ||
463 | if (kernel_map_sync_memtype(start, size, new_type) < 0) | 465 | if (kernel_map_sync_memtype(start, size, new_prot) < 0) |
464 | goto out_free; | 466 | goto out_free; |
465 | 467 | ||
466 | *type = new_type; | 468 | *type = new_type; |