drm/ttm: Clean usage of ttm_io_prot() with TTM_PL_FLAG_CACHED
Today, most callers of ttm_io_prot() check TTM_PL_FLAG_CACHED before calling it since on some archs it will unconditionally create non-cached mappings. But not all callers do which is incorrect as far as I can tell. Instead, move that check inside ttm_io_port() itself for all archs and make powerpc use the same implementation as ia64 and arm Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
6bd3110ce6
commit
94318d50ff
|
@ -480,28 +480,24 @@ static int ttm_buffer_object_transfer(struct ttm_buffer_object *bo,
|
|||
|
||||
pgprot_t ttm_io_prot(uint32_t caching_flags, pgprot_t tmp)
|
||||
{
|
||||
/* Cached mappings need no adjustment */
|
||||
if (caching_flags & TTM_PL_FLAG_CACHED)
|
||||
return tmp;
|
||||
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
if (caching_flags & TTM_PL_FLAG_WC)
|
||||
tmp = pgprot_writecombine(tmp);
|
||||
else if (boot_cpu_data.x86 > 3)
|
||||
tmp = pgprot_noncached(tmp);
|
||||
|
||||
#elif defined(__powerpc__)
|
||||
if (!(caching_flags & TTM_PL_FLAG_CACHED)) {
|
||||
pgprot_val(tmp) |= _PAGE_NO_CACHE;
|
||||
if (caching_flags & TTM_PL_FLAG_UNCACHED)
|
||||
pgprot_val(tmp) |= _PAGE_GUARDED;
|
||||
}
|
||||
#endif
|
||||
#if defined(__ia64__) || defined(__arm__)
|
||||
#if defined(__ia64__) || defined(__arm__) || defined(__powerpc__)
|
||||
if (caching_flags & TTM_PL_FLAG_WC)
|
||||
tmp = pgprot_writecombine(tmp);
|
||||
else
|
||||
tmp = pgprot_noncached(tmp);
|
||||
#endif
|
||||
#if defined(__sparc__) || defined(__mips__)
|
||||
if (!(caching_flags & TTM_PL_FLAG_CACHED))
|
||||
tmp = pgprot_noncached(tmp);
|
||||
tmp = pgprot_noncached(tmp);
|
||||
#endif
|
||||
return tmp;
|
||||
}
|
||||
|
@ -560,9 +556,7 @@ static int ttm_bo_kmap_ttm(struct ttm_buffer_object *bo,
|
|||
* We need to use vmap to get the desired page protection
|
||||
* or to make the buffer object look contiguous.
|
||||
*/
|
||||
prot = (mem->placement & TTM_PL_FLAG_CACHED) ?
|
||||
PAGE_KERNEL :
|
||||
ttm_io_prot(mem->placement, PAGE_KERNEL);
|
||||
prot = ttm_io_prot(mem->placement, PAGE_KERNEL);
|
||||
map->bo_kmap_type = ttm_bo_map_vmap;
|
||||
map->virtual = vmap(ttm->pages + start_page, num_pages,
|
||||
0, prot);
|
||||
|
|
|
@ -197,9 +197,8 @@ static int ttm_bo_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
|
|||
cvma.vm_page_prot);
|
||||
} else {
|
||||
ttm = bo->ttm;
|
||||
if (!(bo->mem.placement & TTM_PL_FLAG_CACHED))
|
||||
cvma.vm_page_prot = ttm_io_prot(bo->mem.placement,
|
||||
cvma.vm_page_prot);
|
||||
cvma.vm_page_prot = ttm_io_prot(bo->mem.placement,
|
||||
cvma.vm_page_prot);
|
||||
|
||||
/* Allocate all page at once, most common usage */
|
||||
if (ttm->bdev->driver->ttm_tt_populate(ttm)) {
|
||||
|
|
Loading…
Reference in New Issue