mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-04-12 09:14:55 +00:00
x86, PAT: Consolidate code in pat_x_mtrr_type() and reserve_memtype()
Fix pat_x_mtrr_type() to use UC_MINUS when the mtrr type return UC. This is to be consistent with ioremap() and ioremap_nocache() which uses UC_MINUS. Consolidate the code such that reserve_memtype() also uses pat_x_mtrr_type() when the caller doesn't specify any special attribute (non WB attribute). Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com> Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> LKML-Reference: <20090409212708.939936000@intel.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
3869c4aa18
commit
b6ff32d9aa
2 changed files with 15 additions and 23 deletions
|
@ -375,7 +375,8 @@ static void __iomem *ioremap_default(resource_size_t phys_addr,
|
||||||
* - UC_MINUS for non-WB-able memory with no other conflicting mappings
|
* - UC_MINUS for non-WB-able memory with no other conflicting mappings
|
||||||
* - Inherit from confliting mappings otherwise
|
* - Inherit from confliting mappings otherwise
|
||||||
*/
|
*/
|
||||||
err = reserve_memtype(phys_addr, phys_addr + size, -1, &flags);
|
err = reserve_memtype(phys_addr, phys_addr + size,
|
||||||
|
_PAGE_CACHE_WB, &flags);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
|
|
@ -182,10 +182,10 @@ static unsigned long pat_x_mtrr_type(u64 start, u64 end, unsigned long req_type)
|
||||||
u8 mtrr_type;
|
u8 mtrr_type;
|
||||||
|
|
||||||
mtrr_type = mtrr_type_lookup(start, end);
|
mtrr_type = mtrr_type_lookup(start, end);
|
||||||
if (mtrr_type == MTRR_TYPE_UNCACHABLE)
|
if (mtrr_type != MTRR_TYPE_WRBACK)
|
||||||
return _PAGE_CACHE_UC;
|
return _PAGE_CACHE_UC_MINUS;
|
||||||
if (mtrr_type == MTRR_TYPE_WRCOMB)
|
|
||||||
return _PAGE_CACHE_WC;
|
return _PAGE_CACHE_WB;
|
||||||
}
|
}
|
||||||
|
|
||||||
return req_type;
|
return req_type;
|
||||||
|
@ -352,23 +352,13 @@ int reserve_memtype(u64 start, u64 end, unsigned long req_type,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (req_type == -1) {
|
/*
|
||||||
/*
|
* Call mtrr_lookup to get the type hint. This is an
|
||||||
* Call mtrr_lookup to get the type hint. This is an
|
* optimization for /dev/mem mmap'ers into WB memory (BIOS
|
||||||
* optimization for /dev/mem mmap'ers into WB memory (BIOS
|
* tools and ACPI tools). Use WB request for WB memory and use
|
||||||
* tools and ACPI tools). Use WB request for WB memory and use
|
* UC_MINUS otherwise.
|
||||||
* UC_MINUS otherwise.
|
*/
|
||||||
*/
|
actual_type = pat_x_mtrr_type(start, end, req_type & _PAGE_CACHE_MASK);
|
||||||
u8 mtrr_type = mtrr_type_lookup(start, end);
|
|
||||||
|
|
||||||
if (mtrr_type == MTRR_TYPE_WRBACK)
|
|
||||||
actual_type = _PAGE_CACHE_WB;
|
|
||||||
else
|
|
||||||
actual_type = _PAGE_CACHE_UC_MINUS;
|
|
||||||
} else {
|
|
||||||
actual_type = pat_x_mtrr_type(start, end,
|
|
||||||
req_type & _PAGE_CACHE_MASK);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (new_type)
|
if (new_type)
|
||||||
*new_type = actual_type;
|
*new_type = actual_type;
|
||||||
|
@ -587,7 +577,8 @@ int phys_mem_access_prot_allowed(struct file *file, unsigned long pfn,
|
||||||
if (flags != -1) {
|
if (flags != -1) {
|
||||||
retval = reserve_memtype(offset, offset + size, flags, NULL);
|
retval = reserve_memtype(offset, offset + size, flags, NULL);
|
||||||
} else {
|
} else {
|
||||||
retval = reserve_memtype(offset, offset + size, -1, &flags);
|
retval = reserve_memtype(offset, offset + size,
|
||||||
|
_PAGE_CACHE_WB, &flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (retval < 0)
|
if (retval < 0)
|
||||||
|
|
Loading…
Add table
Reference in a new issue