aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0269-drm-amdgpu-check-userptrs-mm-earlier.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0269-drm-amdgpu-check-userptrs-mm-earlier.patch')
-rw-r--r--common/recipes-kernel/linux/files/0269-drm-amdgpu-check-userptrs-mm-earlier.patch191
1 files changed, 0 insertions, 191 deletions
diff --git a/common/recipes-kernel/linux/files/0269-drm-amdgpu-check-userptrs-mm-earlier.patch b/common/recipes-kernel/linux/files/0269-drm-amdgpu-check-userptrs-mm-earlier.patch
deleted file mode 100644
index 41237a4f..00000000
--- a/common/recipes-kernel/linux/files/0269-drm-amdgpu-check-userptrs-mm-earlier.patch
+++ /dev/null
@@ -1,191 +0,0 @@
-From c0768582c76a463866bc22ac8768b04e6070ff2c Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
-Date: Mon, 8 Feb 2016 11:08:35 +0100
-Subject: [PATCH 0269/1110] drm/amdgpu: check userptrs mm earlier
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Instead of when we try to bind it check the usermm when
-we try to use it in the IOCTLs.
-
-Signed-off-by: Christian K├Ânig <christian.koenig@amd.com>
-Acked-by: Alex Deucher <alexander.deucher@amd.com>
-Signed-off-by: Kalyan Alle <kalyan.alle@amd.com>
----
- drivers/gpu/drm/amd/amdgpu/amdgpu.h | 2 +-
- drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c | 17 +++++++++++++----
- drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 7 ++++++-
- drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 4 ++--
- drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 2 +-
- drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c | 2 +-
- drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 9 +++------
- 7 files changed, 27 insertions(+), 16 deletions(-)
-
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
-index a48dbe7..473b447 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
-@@ -2330,7 +2330,7 @@ void amdgpu_ttm_placement_from_domain(struct amdgpu_bo *rbo, u32 domain);
- bool amdgpu_ttm_bo_is_amdgpu_bo(struct ttm_buffer_object *bo);
- int amdgpu_ttm_tt_set_userptr(struct ttm_tt *ttm, uint64_t addr,
- uint32_t flags);
--bool amdgpu_ttm_tt_has_userptr(struct ttm_tt *ttm);
-+struct mm_struct *amdgpu_ttm_tt_get_usermm(struct ttm_tt *ttm);
- bool amdgpu_ttm_tt_affect_userptr(struct ttm_tt *ttm, unsigned long start,
- unsigned long end);
- bool amdgpu_ttm_tt_is_readonly(struct ttm_tt *ttm);
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c
-index 1c6c0ac..53b1ebf 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c
-@@ -102,18 +102,27 @@ static int amdgpu_bo_list_set(struct amdgpu_device *adev,
- for (i = 0; i < num_entries; ++i) {
- struct amdgpu_bo_list_entry *entry = &array[i];
- struct drm_gem_object *gobj;
-+ struct mm_struct *usermm;
-
- gobj = drm_gem_object_lookup(adev->ddev, filp, info[i].bo_handle);
- if (!gobj)
-+ if (!gobj) {
-+ r = -ENOENT;
- goto error_free;
-+ }
-
- entry->robj = amdgpu_bo_ref(gem_to_amdgpu_bo(gobj));
- drm_gem_object_unreference_unlocked(gobj);
- entry->priority = min(info[i].bo_priority,
- AMDGPU_BO_LIST_MAX_PRIORITY);
-- if (amdgpu_ttm_tt_has_userptr(entry->robj->tbo.ttm))
-- has_userptr = true;
-- }
-+ usermm = amdgpu_ttm_tt_get_usermm(entry->robj->tbo.ttm);
-+ if (usermm) {
-+ if (usermm != current->mm) {
-+ r = -EPERM;
-+ goto error_free;
-+ }
-+ has_userptr = true;
-+ }
- entry->tv.bo = &entry->robj->tbo;
- entry->tv.shared = true;
-
-@@ -143,7 +152,7 @@ static int amdgpu_bo_list_set(struct amdgpu_device *adev,
-
- error_free:
- drm_free_large(array);
-- return -ENOENT;
-+ return r;
- }
-
- struct amdgpu_bo_list *
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
-index a344b16..bd9a0be 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
-@@ -142,7 +142,7 @@ static int amdgpu_cs_user_fence_chunk(struct amdgpu_cs_parser *p,
- p->uf.bo = amdgpu_bo_ref(gem_to_amdgpu_bo(gobj));
- p->uf.offset = fence_data->offset;
-
-- if (amdgpu_ttm_tt_has_userptr(p->uf.bo->tbo.ttm)) {
-+ if (amdgpu_ttm_tt_get_usermm(p->uf.bo->tbo.ttm)) {
- drm_gem_object_unreference_unlocked(gobj);
- return -EINVAL;
- }
-@@ -342,8 +342,13 @@ int amdgpu_cs_list_validate(struct amdgpu_cs_parser *p,
-
- list_for_each_entry(lobj, validated, tv.head) {
- struct amdgpu_bo *bo = lobj->robj;
-+ struct mm_struct *usermm;
- uint32_t domain;
-
-+ usermm = amdgpu_ttm_tt_get_usermm(bo->tbo.ttm);
-+ if (usermm && usermm != current->mm)
-+ return -EPERM;
-+
- if (bo->pin_count)
- continue;
-
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
-index 95e12f4..2f56bc6 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
-@@ -310,7 +310,7 @@ int amdgpu_mode_dumb_mmap(struct drm_file *filp,
- return -ENOENT;
- }
- robj = gem_to_amdgpu_bo(gobj);
-- if (amdgpu_ttm_tt_has_userptr(robj->tbo.ttm) ||
-+ if (amdgpu_ttm_tt_get_usermm(robj->tbo.ttm) ||
- (robj->flags & AMDGPU_GEM_CREATE_NO_CPU_ACCESS)) {
- drm_gem_object_unreference_unlocked(gobj);
- return -EPERM;
-@@ -639,7 +639,7 @@ int amdgpu_gem_op_ioctl(struct drm_device *dev, void *data,
- break;
- }
- case AMDGPU_GEM_OP_SET_PLACEMENT:
-- if (amdgpu_ttm_tt_has_userptr(robj->tbo.ttm)) {
-+ if (amdgpu_ttm_tt_get_usermm(robj->tbo.ttm)) {
- r = -EPERM;
- amdgpu_bo_unreserve(robj);
- break;
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
-index b79a4f3..c884873 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
-@@ -370,7 +370,7 @@ int amdgpu_bo_pin_restricted(struct amdgpu_bo *bo, u32 domain,
- int r, i;
- unsigned fpfn, lpfn;
-
-- if (amdgpu_ttm_tt_has_userptr(bo->tbo.ttm))
-+ if (amdgpu_ttm_tt_get_usermm(bo->tbo.ttm))
- return -EPERM;
-
- if (WARN_ON_ONCE(min_offset > max_offset))
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
-index 59f735a..39db99a 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_prime.c
-@@ -121,7 +121,7 @@ struct dma_buf *amdgpu_gem_prime_export(struct drm_device *dev,
- {
- struct amdgpu_bo *bo = gem_to_amdgpu_bo(gobj);
-
-- if (amdgpu_ttm_tt_has_userptr(bo->tbo.ttm))
-+ if (amdgpu_ttm_tt_get_usermm(bo->tbo.ttm))
- return ERR_PTR(-EPERM);
-
- return drm_gem_prime_export(dev, gobj, flags);
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
-index f08d53f..a4f7182 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
-@@ -499,9 +499,6 @@ static int amdgpu_ttm_tt_pin_userptr(struct ttm_tt *ttm)
- enum dma_data_direction direction = write ?
- DMA_BIDIRECTIONAL : DMA_TO_DEVICE;
-
-- if (current->mm != gtt->usermm)
-- return -EPERM;
--
- if (gtt->userflags & AMDGPU_GEM_USERPTR_ANONONLY) {
- /* check that we only pin down anonymous memory
- to prevent problems with writeback */
-@@ -773,14 +770,14 @@ int amdgpu_ttm_tt_set_userptr(struct ttm_tt *ttm, uint64_t addr,
- return 0;
- }
-
--bool amdgpu_ttm_tt_has_userptr(struct ttm_tt *ttm)
-+struct mm_struct *amdgpu_ttm_tt_get_usermm(struct ttm_tt *ttm)
- {
- struct amdgpu_ttm_tt *gtt = (void *)ttm;
-
- if (gtt == NULL)
-- return false;
-+ return NULL;
-
-- return !!gtt->userptr;
-+ return gtt->usermm;
- }
-
- bool amdgpu_ttm_tt_affect_userptr(struct ttm_tt *ttm, unsigned long start,
---
-2.7.4
-