Messages in this thread Patch in this message | | | From | Toshi Kani <> | Subject | [PATCH v9 3/10] x86, asm: Change is_new_memtype_allowed() for WT | Date | Wed, 13 May 2015 15:05:44 -0600 |
| |
__ioremap_caller() calls reserve_memtype() to set new_pcm (existing map type if any), and then calls is_new_memtype_allowed() to verify if converting to new_pcm is allowed when pcm (request type) is different from new_pcm.
When WT is requested, the caller expects that writes are ordered and uncached. Therefore, this patch changes is_new_memtype_allowed() to disallow the following cases.
- If the request is WT, mapping type cannot be WB - If the request is WT, mapping type cannot be WC
Signed-off-by: Toshi Kani <toshi.kani@hp.com> --- arch/x86/include/asm/pgtable.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h index fe57e7a..2562e30 100644 --- a/arch/x86/include/asm/pgtable.h +++ b/arch/x86/include/asm/pgtable.h @@ -398,11 +398,17 @@ static inline int is_new_memtype_allowed(u64 paddr, unsigned long size, * requested memtype: * - request is uncached, return cannot be write-back * - request is write-combine, return cannot be write-back + * - request is write-through, return cannot be write-back + * - request is write-through, return cannot be write-combine */ if ((pcm == _PAGE_CACHE_MODE_UC_MINUS && new_pcm == _PAGE_CACHE_MODE_WB) || (pcm == _PAGE_CACHE_MODE_WC && - new_pcm == _PAGE_CACHE_MODE_WB)) { + new_pcm == _PAGE_CACHE_MODE_WB) || + (pcm == _PAGE_CACHE_MODE_WT && + new_pcm == _PAGE_CACHE_MODE_WB) || + (pcm == _PAGE_CACHE_MODE_WT && + new_pcm == _PAGE_CACHE_MODE_WC)) { return 0; }
| |