diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/0105-drm-amdgpu-remove-ring-lru-handling.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.19.8/0105-drm-amdgpu-remove-ring-lru-handling.patch | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/0105-drm-amdgpu-remove-ring-lru-handling.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/0105-drm-amdgpu-remove-ring-lru-handling.patch new file mode 100644 index 00000000..f75178a6 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/0105-drm-amdgpu-remove-ring-lru-handling.patch @@ -0,0 +1,167 @@ +From e416bea7f809e8142bb549500e0dc93c21dc1934 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com> +Date: Mon, 16 Jul 2018 15:23:15 +0200 +Subject: [PATCH 0105/2940] drm/amdgpu: remove ring lru handling +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Not needed any more. + +Signed-off-by: Christian König <christian.koenig@amd.com> +Reviewed-by: Chunming Zhou <david1.zhou@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 98 ------------------------ + drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h | 5 -- + 2 files changed, 103 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c +index 93794a85f83d..5dfd26be1eec 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c +@@ -135,9 +135,6 @@ void amdgpu_ring_commit(struct amdgpu_ring *ring) + + if (ring->funcs->end_use) + ring->funcs->end_use(ring); +- +- if (ring->funcs->type != AMDGPU_RING_TYPE_KIQ) +- amdgpu_ring_lru_touch(ring->adev, ring); + } + + /** +@@ -320,8 +317,6 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring, + ring->max_dw = max_dw; + ring->priority = DRM_SCHED_PRIORITY_NORMAL; + mutex_init(&ring->priority_mutex); +- INIT_LIST_HEAD(&ring->lru_list); +- amdgpu_ring_lru_touch(adev, ring); + + for (i = 0; i < DRM_SCHED_PRIORITY_MAX; ++i) + atomic_set(&ring->num_jobs[i], 0); +@@ -368,99 +363,6 @@ void amdgpu_ring_fini(struct amdgpu_ring *ring) + ring->adev->rings[ring->idx] = NULL; + } + +-static void amdgpu_ring_lru_touch_locked(struct amdgpu_device *adev, +- struct amdgpu_ring *ring) +-{ +- /* list_move_tail handles the case where ring isn't part of the list */ +- list_move_tail(&ring->lru_list, &adev->ring_lru_list); +-} +- +-static bool amdgpu_ring_is_blacklisted(struct amdgpu_ring *ring, +- int *blacklist, int num_blacklist) +-{ +- int i; +- +- for (i = 0; i < num_blacklist; i++) { +- if (ring->idx == blacklist[i]) +- return true; +- } +- +- return false; +-} +- +-/** +- * amdgpu_ring_lru_get - get the least recently used ring for a HW IP block +- * +- * @adev: amdgpu_device pointer +- * @type: amdgpu_ring_type enum +- * @blacklist: blacklisted ring ids array +- * @num_blacklist: number of entries in @blacklist +- * @lru_pipe_order: find a ring from the least recently used pipe +- * @ring: output ring +- * +- * Retrieve the amdgpu_ring structure for the least recently used ring of +- * a specific IP block (all asics). +- * Returns 0 on success, error on failure. +- */ +-int amdgpu_ring_lru_get(struct amdgpu_device *adev, int type, +- int *blacklist, int num_blacklist, +- bool lru_pipe_order, struct amdgpu_ring **ring) +-{ +- struct amdgpu_ring *entry; +- +- /* List is sorted in LRU order, find first entry corresponding +- * to the desired HW IP */ +- *ring = NULL; +- spin_lock(&adev->ring_lru_list_lock); +- list_for_each_entry(entry, &adev->ring_lru_list, lru_list) { +- if (entry->funcs->type != type) +- continue; +- +- if (amdgpu_ring_is_blacklisted(entry, blacklist, num_blacklist)) +- continue; +- +- if (!*ring) { +- *ring = entry; +- +- /* We are done for ring LRU */ +- if (!lru_pipe_order) +- break; +- } +- +- /* Move all rings on the same pipe to the end of the list */ +- if (entry->pipe == (*ring)->pipe) +- amdgpu_ring_lru_touch_locked(adev, entry); +- } +- +- /* Move the ring we found to the end of the list */ +- if (*ring) +- amdgpu_ring_lru_touch_locked(adev, *ring); +- +- spin_unlock(&adev->ring_lru_list_lock); +- +- if (!*ring) { +- DRM_ERROR("Ring LRU contains no entries for ring type:%d\n", type); +- return -EINVAL; +- } +- +- return 0; +-} +- +-/** +- * amdgpu_ring_lru_touch - mark a ring as recently being used +- * +- * @adev: amdgpu_device pointer +- * @ring: ring to touch +- * +- * Move @ring to the tail of the lru list +- */ +-void amdgpu_ring_lru_touch(struct amdgpu_device *adev, struct amdgpu_ring *ring) +-{ +- spin_lock(&adev->ring_lru_list_lock); +- amdgpu_ring_lru_touch_locked(adev, ring); +- spin_unlock(&adev->ring_lru_list_lock); +-} +- + /** + * amdgpu_ring_emit_reg_write_reg_wait_helper - ring helper + * +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h +index 906897a38743..409fdd9b9710 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h +@@ -175,7 +175,6 @@ struct amdgpu_ring { + const struct amdgpu_ring_funcs *funcs; + struct amdgpu_fence_driver fence_drv; + struct drm_gpu_scheduler sched; +- struct list_head lru_list; + + struct amdgpu_bo *ring_obj; + volatile uint32_t *ring; +@@ -258,10 +257,6 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring, + unsigned ring_size, struct amdgpu_irq_src *irq_src, + unsigned irq_type); + void amdgpu_ring_fini(struct amdgpu_ring *ring); +-int amdgpu_ring_lru_get(struct amdgpu_device *adev, int type, +- int *blacklist, int num_blacklist, +- bool lru_pipe_order, struct amdgpu_ring **ring); +-void amdgpu_ring_lru_touch(struct amdgpu_device *adev, struct amdgpu_ring *ring); + void amdgpu_ring_emit_reg_write_reg_wait_helper(struct amdgpu_ring *ring, + uint32_t reg0, uint32_t val0, + uint32_t reg1, uint32_t val1); +-- +2.17.1 + |