On 9/16/21 11:58 AM, Matthew Auld wrote:
On 16/09/2021 10:03, Thomas Hellström wrote:
On Thu, 2021-09-16 at 08:55 +0200, Christian König wrote:
Am 15.09.21 um 20:59 schrieb Matthew Auld:
In commit:
commit 667a50db0477d47fdff01c666f5ee1ce26b5264c
Author: Thomas Hellstrom <thellstrom@xxxxxxxxxx>
Date: Fri Jan 3 11:17:18 2014 +0100
drm/ttm: Refuse to fault (prime-) imported pages
we introduced the restriction that imported pages should not be
directly
mappable through TTM(this also extends to userptr). In the next
patch we
want to introduce a shmem_tt backend, which should follow all the
existing rules with TTM_PAGE_FLAG_EXTERNAL, since it will need to
handle
swapping itself, but with the above mapping restriction lifted.
Signed-off-by: Matthew Auld <matthew.auld@xxxxxxxxx>
Cc: Thomas Hellström <thomas.hellstrom@xxxxxxxxxxxxxxx>
Cc: Christian König <christian.koenig@xxxxxxx>
---
drivers/gpu/drm/ttm/ttm_bo_vm.c | 6 ++++--
include/drm/ttm/ttm_tt.h | 7 +++++++
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/ttm/ttm_bo_vm.c
b/drivers/gpu/drm/ttm/ttm_bo_vm.c
index 708390588c7c..fd6e18f12f50 100644
--- a/drivers/gpu/drm/ttm/ttm_bo_vm.c
+++ b/drivers/gpu/drm/ttm/ttm_bo_vm.c
@@ -163,8 +163,10 @@ vm_fault_t ttm_bo_vm_reserve(struct
ttm_buffer_object *bo,
* (if at all) by redirecting mmap to the exporter.
*/
if (bo->ttm && (bo->ttm->page_flags &
TTM_PAGE_FLAG_EXTERNAL)) {
- dma_resv_unlock(bo->base.resv);
- return VM_FAULT_SIGBUS;
+ if (!(bo->ttm->page_flags &
TTM_PAGE_FLAG_EXTERNAL_MAPPABLE)) {
I saw there was previously a thought about testing for ttm_bo_type_sg
here. Was that a dead end?
I guess the issue was userptr, which is also EXTERNAL and needs to be
rejected here, but underneath it's not type_sg.
OK, I thought userptr was using type_sg. I wonder what it's for if
that's not the case...
Just having an explicit MAPPABLE flag or similar seemed the more
flexible approach? Happy to try out other ideas.
I'm fine with a flag as well.
/Thomas