aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/1079-drm-amdgpu-fix-compilation-errors-during-backport.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/1079-drm-amdgpu-fix-compilation-errors-during-backport.patch')
-rw-r--r--common/recipes-kernel/linux/files/1079-drm-amdgpu-fix-compilation-errors-during-backport.patch1247
1 files changed, 0 insertions, 1247 deletions
diff --git a/common/recipes-kernel/linux/files/1079-drm-amdgpu-fix-compilation-errors-during-backport.patch b/common/recipes-kernel/linux/files/1079-drm-amdgpu-fix-compilation-errors-during-backport.patch
deleted file mode 100644
index e75ac6ac..00000000
--- a/common/recipes-kernel/linux/files/1079-drm-amdgpu-fix-compilation-errors-during-backport.patch
+++ /dev/null
@@ -1,1247 +0,0 @@
-From eff368e9d9685a68e0ca6a58523e0d391fc559f0 Mon Sep 17 00:00:00 2001
-From: kalle <kalle@amd.com>
-Date: Sat, 11 Jun 2016 22:53:41 +0530
-Subject: [PATCH 1079/1110] drm/amdgpu: fix compilation errors during backport
-
-Signed-off-by: Kalyan Alle <kalyan.alle@amd.com>
----
- drivers/gpu/drm/amd/amdgpu/Makefile | 2 +-
- drivers/gpu/drm/amd/amdgpu/amdgpu.h | 19 ++++----
- drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c | 3 +-
- drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 28 +++++------
- drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 2 +-
- drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c | 15 +++---
- drivers/gpu/drm/amd/amdgpu/amdgpu_object.h | 2 +-
- drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 33 ++++---------
- drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 31 +++---------
- drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 56 ++++++----------------
- drivers/gpu/drm/amd/amdgpu/amdgpu_vce.h | 2 +-
- drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 21 +++-----
- drivers/gpu/drm/amd/amdgpu/dce_v10_0.c | 14 +++---
- drivers/gpu/drm/amd/amdgpu/dce_v11_0.c | 14 +++---
- drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 9 ++--
- drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 11 ++---
- drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c | 1 -
- drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 2 +-
- drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 2 +-
- drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c | 2 +-
- drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c | 2 +-
- drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c | 2 +-
- .../drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c | 3 +-
- .../gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_types.c | 7 ++-
- drivers/gpu/drm/amd/scheduler/gpu_scheduler.c | 41 ++++++++--------
- drivers/gpu/drm/amd/scheduler/gpu_scheduler.h | 1 +
- drivers/gpu/drm/drm_crtc_helper.c | 2 +-
- drivers/gpu/drm/drm_pci.c | 20 ++++++++
- drivers/gpu/drm/ttm/ttm_bo.c | 12 +++++
- include/drm/drmP.h | 1 +
- include/drm/drm_crtc.h | 2 +-
- include/drm/drm_crtc_helper.h | 2 +-
- include/drm/ttm/ttm_bo_api.h | 10 ++++
- include/drm/ttm/ttm_bo_driver.h | 12 +++++
- 34 files changed, 183 insertions(+), 203 deletions(-)
-
-diff --git a/drivers/gpu/drm/amd/amdgpu/Makefile b/drivers/gpu/drm/amd/amdgpu/Makefile
-index 948d8a6..215f8fc 100644
---- a/drivers/gpu/drm/amd/amdgpu/Makefile
-+++ b/drivers/gpu/drm/amd/amdgpu/Makefile
-@@ -99,7 +99,7 @@ amdgpu-y += amdgpu_cgs.o
- amdgpu-y += \
- ../scheduler/gpu_scheduler.o \
- ../scheduler/sched_fence.o \
-- amdgpu_sched.o
-+ amdgpu_job.o
-
- # ACP componet
- ifneq ($(CONFIG_DRM_AMD_ACP),)
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
-index 0b6ef3d..0f7de1b 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
-@@ -285,7 +285,7 @@ struct amdgpu_ring_funcs {
- int (*parse_cs)(struct amdgpu_cs_parser *p, uint32_t ib_idx);
- /* command emit functions */
- void (*emit_ib)(struct amdgpu_ring *ring,
-- struct amdgpu_ib *ib);
-+ struct amdgpu_ib *ib, bool ctx_switch);
- void (*emit_fence)(struct amdgpu_ring *ring, uint64_t addr,
- uint64_t seq, unsigned flags);
- void (*emit_pipeline_sync)(struct amdgpu_ring *ring);
-@@ -475,7 +475,6 @@ struct amdgpu_bo {
- /* Protected by gem.mutex */
- struct list_head list;
- /* Protected by tbo.reserved */
-- u32 initial_domain;
- u32 prefered_domains;
- u32 allowed_domains;
- struct ttm_place placements[AMDGPU_GEM_DOMAIN_MAX + 1];
-@@ -746,7 +745,6 @@ struct amdgpu_ib {
- struct amdgpu_user_fence *user;
- unsigned vm_id;
- uint64_t vm_pd_addr;
-- struct amdgpu_ctx *ctx;
- uint32_t gds_base, gds_size;
- uint32_t gws_base, gws_size;
- uint32_t oa_base, oa_size;
-@@ -764,8 +762,11 @@ enum amdgpu_ring_type {
- };
-
- extern const struct amd_sched_backend_ops amdgpu_sched_ops;
--int amdgpu_job_alloc_with_ib(struct amdgpu_device *adev, unsigned size,
-+int amdgpu_job_alloc(struct amdgpu_device *adev, unsigned num_ibs,
- struct amdgpu_job **job, struct amdgpu_vm *vm);
-+int amdgpu_job_alloc_with_ib(struct amdgpu_device *adev, unsigned size,
-+ struct amdgpu_job **job);
-+
- void amdgpu_job_free(struct amdgpu_job *job);
- void amdgpu_job_free_func(struct kref *refcount);
- int amdgpu_job_submit(struct amdgpu_job *job, struct amdgpu_ring *ring,
-@@ -805,7 +806,7 @@ struct amdgpu_ring {
- unsigned wptr_offs;
- unsigned next_rptr_offs;
- unsigned fence_offs;
-- struct amdgpu_ctx *current_ctx;
-+ uint64_t last_fence_context;
- enum amdgpu_ring_type type;
- char name[16];
- unsigned cond_exe_offs;
-@@ -937,9 +938,6 @@ void amdgpu_vm_manager_fini(struct amdgpu_device *adev);
- int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm);
- void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm);
- struct amdgpu_bo_list_entry *amdgpu_vm_get_bos(struct amdgpu_device *adev,
-- struct amdgpu_vm *vm,
-- struct list_head *head);
--struct amdgpu_bo_list_entry *amdgpu_vm_get_bos(struct amdgpu_device *adev,
- struct amdgpu_vm *vm,
- struct list_head *validated,
- struct list_head *duplicates);
-@@ -1048,7 +1046,7 @@ struct amdgpu_bo_list {
- struct amdgpu_bo *gds_obj;
- struct amdgpu_bo *gws_obj;
- struct amdgpu_bo *oa_obj;
-- bool has_userptr;
-+ unsigned first_userptr;
- unsigned num_entries;
- struct amdgpu_bo_list_entry *array;
- };
-@@ -1263,6 +1261,7 @@ struct amdgpu_job {
- struct fence *fence; /* the hw fence */
- uint32_t num_ibs;
- void *owner;
-+ uint64_t fence_context;
- struct amdgpu_user_fence uf;
- };
- #define to_amdgpu_job(sched_job) \
-@@ -2235,7 +2234,7 @@ amdgpu_get_sdma_instance(struct amdgpu_ring *ring)
- #define amdgpu_ring_get_rptr(r) (r)->funcs->get_rptr((r))
- #define amdgpu_ring_get_wptr(r) (r)->funcs->get_wptr((r))
- #define amdgpu_ring_set_wptr(r) (r)->funcs->set_wptr((r))
--#define amdgpu_ring_emit_ib(r, ib) (r)->funcs->emit_ib((r), (ib))
-+#define amdgpu_ring_emit_ib(r, ib, f) (r)->funcs->emit_ib((r), (ib), (f))
- #define amdgpu_ring_emit_pipeline_sync(r) (r)->funcs->emit_pipeline_sync((r))
- #define amdgpu_ring_emit_vm_flush(r, vmid, addr) (r)->funcs->emit_vm_flush((r), (vmid), (addr))
- #define amdgpu_ring_emit_fence(r, addr, seq, flags) (r)->funcs->emit_fence((r), (addr), (seq), (flags))
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c
-index d2b03e1..db36de6 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c
-@@ -93,6 +93,7 @@ static int amdgpu_bo_list_set(struct amdgpu_device *adev,
-
- unsigned last_entry = 0, first_userptr = num_entries;
- unsigned i;
-+ int r;
-
- array = drm_malloc_ab(num_entries, sizeof(struct amdgpu_bo_list_entry));
- if (!array)
-@@ -106,7 +107,6 @@ static int amdgpu_bo_list_set(struct amdgpu_device *adev,
- 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;
-@@ -122,7 +122,6 @@ static int amdgpu_bo_list_set(struct amdgpu_device *adev,
- r = -EPERM;
- goto error_free;
- }
-- has_userptr = true;
- entry = &array[--first_userptr];
- } else {
- entry = &array[last_entry++];
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
-index 7e8b6bb..bff83e6 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
-@@ -166,8 +166,7 @@ int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, void *data)
- uint64_t *chunk_array_user;
- uint64_t *chunk_array;
- struct amdgpu_user_fence uf = {};
-- unsigned size;
-- unsigned size, num_ibs = 0;
-+ unsigned size, num_ibs = 0;
- int i;
- int ret;
-
-@@ -235,7 +234,7 @@ int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, void *data)
-
- switch (p->chunks[i].chunk_id) {
- case AMDGPU_CHUNK_ID_IB:
-- p->num_ibs++;
-+ ++num_ibs;
- break;
-
- case AMDGPU_CHUNK_ID_FENCE:
-@@ -405,16 +404,17 @@ int amdgpu_cs_list_validate(struct amdgpu_cs_parser *p,
-
- static int amdgpu_cs_parser_relocs(struct amdgpu_cs_parser *p)
- {
-+ struct amdgpu_fpriv *fpriv = p->filp->driver_priv;
- struct amdgpu_cs_buckets buckets;
- struct amdgpu_bo_list_entry *e;
- struct list_head duplicates;
- bool need_mmap_lock = false;
- unsigned i, tries = 10;
--
-- int i, r;
-+ int r;
-
- if (p->bo_list) {
-- need_mmap_lock = p->bo_list->has_userptr;
-+ need_mmap_lock = p->bo_list->first_userptr !=
-+ p->bo_list->num_entries;
- amdgpu_cs_buckets_init(&buckets);
- for (i = 0; i < p->bo_list->num_entries; i++)
- amdgpu_cs_buckets_add(&buckets, &p->bo_list->array[i].tv.head,
-@@ -533,8 +533,10 @@ static int amdgpu_cs_parser_relocs(struct amdgpu_cs_parser *p)
- }
-
- error_validate:
-- if (r)
-+ if (r) {
-+ amdgpu_vm_move_pt_bos_in_lru(p->adev, &fpriv->vm);
- ttm_eu_backoff_reservation(&p->ticket, &p->validated);
-+ }
-
- error_free_pages:
-
-@@ -584,6 +586,7 @@ static int amdgpu_cs_sync_rings(struct amdgpu_cs_parser *p)
- **/
- static void amdgpu_cs_parser_fini(struct amdgpu_cs_parser *parser, int error, bool backoff)
- {
-+ struct amdgpu_fpriv *fpriv = parser->filp->driver_priv;
- unsigned i;
-
- if (!error) {
-@@ -623,7 +626,7 @@ static int amdgpu_bo_vm_update_pte(struct amdgpu_cs_parser *p,
- if (r)
- return r;
-
-- r = amdgpu_sync_fence(adev, &p->job->ibs[0].sync, vm->page_directory_fence);
-+ r = amdgpu_sync_fence(adev, &p->job->sync, vm->page_directory_fence);
- if (r)
- return r;
-
-@@ -788,7 +791,6 @@ static int amdgpu_cs_ib_fill(struct amdgpu_device *adev,
-
- ib->length_dw = chunk_ib->ib_bytes / 4;
- ib->flags = chunk_ib->flags;
-- ib->ctx = parser->ctx;
- j++;
- }
-
-@@ -884,12 +886,6 @@ static int amdgpu_cs_dependencies(struct amdgpu_device *adev,
- return 0;
- }
-
--static int amdgpu_cs_free_job(struct amdgpu_job *job)
--{
-- amdgpu_job_free(job);
-- return 0;
--}
--
- static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,
- union drm_amdgpu_cs *cs)
- {
-@@ -908,7 +904,7 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,
- p->filp, &fence);
- if (r) {
-
-- amdgpu_cs_free_job(job);
-+ amdgpu_job_free(job);
- return r;
- }
-
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
-index 4dbab46..58a4faa 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
-@@ -1445,8 +1445,8 @@ int amdgpu_device_init(struct amdgpu_device *adev,
- adev->num_rings = 0;
- adev->mman.buffer_funcs = NULL;
- adev->mman.buffer_funcs_ring = NULL;
-+ adev->vm_manager.vm_pte_funcs = NULL;
- adev->vm_manager.vm_pte_num_rings = 0;
-- adev->vm_manager.vm_pte_funcs_ring = NULL;
- adev->gart.gart_funcs = NULL;
- adev->fence_context = fence_context_alloc(AMDGPU_MAX_RINGS);
-
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
-index 8d1387d..b987f47 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
-@@ -151,6 +151,9 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs,
- return r;
- }
-
-+ if (ring->type == AMDGPU_RING_TYPE_SDMA && ring->funcs->init_cond_exec)
-+ patch_offset = amdgpu_ring_init_cond_exec(ring);
-+
- if (vm) {
- /* do context switch */
- r = amdgpu_vm_flush(ring, ib->vm_id, ib->vm_pd_addr,
-@@ -160,27 +163,24 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs,
- if (r) {
- amdgpu_ring_undo(ring);
- return r;
-- }
--
-+ }
-+ }
- if (ring->funcs->emit_hdp_flush)
- amdgpu_ring_emit_hdp_flush(ring);
-- }
-
- /* always set cond_exec_polling to CONTINUE */
- *ring->cond_exe_cpu_addr = 1;
-
-- old_ctx = ring->current_ctx;
- for (i = 0; i < num_ibs; ++i) {
- ib = &ibs[i];
-
-- amdgpu_ring_emit_ib(ring, ib, (i == 0 && old != fence_context));
-+ amdgpu_ring_emit_ib(ring, ib, (i == 0 && old != fence_context));
- }
-+ ring->last_fence_context = fence_context;
-
- if (ring->funcs->emit_hdp_invalidate)
- amdgpu_ring_emit_hdp_invalidate(ring);
-
-- ring->last_fence_context = fence_context;
--
- r = amdgpu_fence_emit(ring, &hwf);
- if (r) {
- dev_err(adev->dev, "failed to emit fence (%d)\n", r);
-@@ -198,7 +198,6 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs,
- amdgpu_ring_emit_fence(ring, addr, ib->sequence,
- AMDGPU_FENCE_FLAG_64BIT);
- }
--
- if(f)
- *f = fence_get(hwf);
-
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
-index bdb01d9..b769de4 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
-@@ -71,7 +71,7 @@ static inline int amdgpu_bo_reserve(struct amdgpu_bo *bo, bool no_intr)
- {
- int r;
-
-- r = ttm_bo_reserve(&bo->tbo, !no_intr, false, NULL);
-+ r = ttm_bo_reserve(&bo->tbo, !no_intr, false, false, NULL);
- if (unlikely(r != 0)) {
- if (r != -ERESTARTSYS)
- dev_err(bo->adev->dev, "%p reserve failed\n", bo);
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
-index e296415..b602052 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
-@@ -973,7 +973,7 @@ static struct ttm_bo_driver amdgpu_bo_driver = {
- .io_mem_free = &amdgpu_ttm_io_mem_free,
- .lru_removal = &amdgpu_ttm_lru_removal,
- .lru_tail = &amdgpu_ttm_lru_tail,
-- .swap_lru_tail = &amdgpu_ttm_swap_lru_tail,
-+ .swap_lru_tail = &amdgpu_ttm_swap_lru_tail,
- };
-
- int amdgpu_ttm_init(struct amdgpu_device *adev)
-@@ -1148,9 +1148,9 @@ int amdgpu_copy_buffer(struct amdgpu_ring *ring,
- struct fence **fence)
- {
- struct amdgpu_device *adev = ring->adev;
-+ struct amdgpu_job *job;
- uint32_t max_bytes;
- unsigned num_loops, num_dw;
-- struct amdgpu_ib *ib;
- unsigned i;
- int r;
-
-@@ -1161,18 +1161,9 @@ int amdgpu_copy_buffer(struct amdgpu_ring *ring,
- /* for IB padding */
- while (num_dw & 0x7)
- num_dw++;
--
-- ib = kzalloc(sizeof(struct amdgpu_ib), GFP_KERNEL);
-- if (!ib)
-- return -ENOMEM;
--
-- r = amdgpu_ib_get(adev, NULL, num_dw * 4, ib);
-- if (r) {
-- kfree(ib);
-+ r = amdgpu_job_alloc_with_ib(adev, num_dw * 4, &job);
-+ if (r)
- return r;
-- }
--
-- ib->length_dw = 0;
-
- if (resv) {
- r = amdgpu_sync_resv(adev, &job->sync, resv,
-@@ -1186,27 +1177,23 @@ int amdgpu_copy_buffer(struct amdgpu_ring *ring,
- for (i = 0; i < num_loops; i++) {
- uint32_t cur_size_in_bytes = min(byte_count, max_bytes);
-
-- amdgpu_emit_copy_buffer(adev, ib, src_offset, dst_offset,
-+ amdgpu_emit_copy_buffer(adev, &job->ibs[0], src_offset, dst_offset,
- cur_size_in_bytes);
-
- src_offset += cur_size_in_bytes;
- dst_offset += cur_size_in_bytes;
- byte_count -= cur_size_in_bytes;
- }
--
-- amdgpu_ring_pad_ib(ring, ib);
-- WARN_ON(ib->length_dw > num_dw);
-- r = amdgpu_sched_ib_submit_kernel_helper(adev, ring, ib, 1,
-- &amdgpu_vm_free_job,
-- AMDGPU_FENCE_OWNER_UNDEFINED,
-- fence);
-+ amdgpu_ring_pad_ib(ring, &job->ibs[0]);
-+ WARN_ON(job->ibs[0].length_dw > num_dw);
-+ r = amdgpu_job_submit(job, ring, &adev->mman.entity,
-+ AMDGPU_FENCE_OWNER_UNDEFINED, fence);
- if (r)
- goto error_free;
-
- return 0;
- error_free:
-- amdgpu_ib_free(adev, ib);
-- kfree(ib);
-+ amdgpu_job_free(job);
- return r;
- }
-
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
-index f58dd0a..88a7942 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
-@@ -860,14 +860,6 @@ int amdgpu_uvd_ring_parse_cs(struct amdgpu_cs_parser *parser, uint32_t ib_idx)
- return 0;
- }
-
--static int amdgpu_uvd_free_job(
-- struct amdgpu_job *job)
--{
-- amdgpu_ib_free(job->adev, job->ibs);
-- kfree(job->ibs);
-- return 0;
--}
--
- static int amdgpu_uvd_send_msg(struct amdgpu_ring *ring, struct amdgpu_bo *bo,
- bool direct, struct fence **fence)
-
-@@ -875,7 +867,8 @@ static int amdgpu_uvd_send_msg(struct amdgpu_ring *ring, struct amdgpu_bo *bo,
- struct ttm_validate_buffer tv;
- struct ww_acquire_ctx ticket;
- struct list_head head;
-- struct amdgpu_ib *ib = NULL;
-+ struct amdgpu_job *job;
-+ struct amdgpu_ib *ib;
- struct fence *f = NULL;
- struct amdgpu_device *adev = ring->adev;
- uint64_t addr;
-@@ -899,15 +892,11 @@ static int amdgpu_uvd_send_msg(struct amdgpu_ring *ring, struct amdgpu_bo *bo,
- r = ttm_bo_validate(&bo->tbo, &bo->placement, true, false);
- if (r)
- goto err;
-- ib = kzalloc(sizeof(struct amdgpu_ib), GFP_KERNEL);
-- if (!ib) {
-- r = -ENOMEM;
-- goto err;
-- }
-- r = amdgpu_ib_get(adev, NULL, 64, ib);
-+ r = amdgpu_job_alloc_with_ib(adev, 64, &job);
- if (r)
-- goto err1;
-+ goto err;
-
-+ ib = &job->ibs[0];
- addr = amdgpu_bo_gpu_offset(bo);
- ib->ptr[0] = PACKET0(mmUVD_GPCOM_VCPU_DATA0, 0);
- ib->ptr[1] = addr;
-@@ -919,10 +908,6 @@ static int amdgpu_uvd_send_msg(struct amdgpu_ring *ring, struct amdgpu_bo *bo,
- ib->ptr[i] = PACKET2(0);
- ib->length_dw = 16;
-
-- r = amdgpu_sched_ib_submit_kernel_helper(adev, ring, ib, 1,
-- &amdgpu_uvd_free_job,
-- AMDGPU_FENCE_OWNER_UNDEFINED,
-- &f);
- if (direct) {
- r = amdgpu_ib_schedule(ring, 1, ib, NULL, NULL, &f);
- job->fence = f;
-@@ -945,10 +930,8 @@ static int amdgpu_uvd_send_msg(struct amdgpu_ring *ring, struct amdgpu_bo *bo,
- fence_put(f);
-
- return 0;
--err2:
-- amdgpu_ib_free(ring->adev, ib);
--err1:
-- kfree(ib);
-+err_free:
-+ amdgpu_job_free(job);
- err:
- ttm_eu_backoff_reservation(&ticket, &head);
- return r;
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
-index db7509c..7aa7342 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
-@@ -371,14 +371,6 @@ void amdgpu_vce_free_handles(struct amdgpu_device *adev, struct drm_file *filp)
- }
- }
-
--static int amdgpu_vce_free_job(
-- struct amdgpu_job *job)
--{
-- amdgpu_ib_free(job->adev, job->ibs);
-- kfree(job->ibs);
-- return 0;
--}
--
- /**
- * amdgpu_vce_get_create_msg - generate a VCE create msg
- *
-@@ -393,22 +385,17 @@ int amdgpu_vce_get_create_msg(struct amdgpu_ring *ring, uint32_t handle,
- struct fence **fence)
- {
- const unsigned ib_size_dw = 1024;
-+ struct amdgpu_job *job;
- struct amdgpu_ib *ib = NULL;
- struct fence *f = NULL;
-- struct amdgpu_device *adev = ring->adev;
- uint64_t dummy;
- int i, r;
-
-- ib = kzalloc(sizeof(struct amdgpu_ib), GFP_KERNEL);
-- if (!ib)
-- return -ENOMEM;
-- r = amdgpu_ib_get(adev, NULL, ib_size_dw * 4, ib);
-- if (r) {
-- DRM_ERROR("amdgpu: failed to get ib (%d).\n", r);
-- kfree(ib);
-+ r = amdgpu_job_alloc_with_ib(ring->adev, ib_size_dw * 4, &job);
-+ if (r)
- return r;
-- }
-
-+ ib = &job->ibs[0];
- dummy = ib->gpu_addr + 1024;
-
- /* stitch together an VCE create msg */
-@@ -448,10 +435,6 @@ int amdgpu_vce_get_create_msg(struct amdgpu_ring *ring, uint32_t handle,
- for (i = ib->length_dw; i < ib_size_dw; ++i)
- ib->ptr[i] = 0x0;
-
-- r = amdgpu_sched_ib_submit_kernel_helper(adev, ring, ib, 1,
-- &amdgpu_vce_free_job,
-- AMDGPU_FENCE_OWNER_UNDEFINED,
-- &f);
- r = amdgpu_ib_schedule(ring, 1, ib, NULL, NULL, &f);
- job->fence = f;
- if (r)
-@@ -463,8 +446,7 @@ int amdgpu_vce_get_create_msg(struct amdgpu_ring *ring, uint32_t handle,
- fence_put(f);
- return 0;
- err:
-- amdgpu_ib_free(adev, ib);
-- kfree(ib);
-+ amdgpu_job_free(job);
- return r;
- }
-
-@@ -482,23 +464,17 @@ int amdgpu_vce_get_destroy_msg(struct amdgpu_ring *ring, uint32_t handle,
- bool direct, struct fence **fence)
- {
- const unsigned ib_size_dw = 1024;
-- struct amdgpu_ib *ib = NULL;
-+ struct amdgpu_job *job;
-+ struct amdgpu_ib *ib;
- struct fence *f = NULL;
-- struct amdgpu_device *adev = ring->adev;
- uint64_t dummy;
- int i, r;
-
-- ib = kzalloc(sizeof(struct amdgpu_ib), GFP_KERNEL);
-- if (!ib)
-- return -ENOMEM;
--
-- r = amdgpu_ib_get(adev, NULL, ib_size_dw * 4, ib);
-- if (r) {
-- kfree(ib);
-- DRM_ERROR("amdgpu: failed to get ib (%d).\n", r);
-+ r = amdgpu_job_alloc_with_ib(ring->adev, ib_size_dw * 4, &job);
-+ if (r)
- return r;
-- }
--
-+
-+ ib = &job->ibs[0];
- dummy = ib->gpu_addr + 1024;
-
- /* stitch together an VCE destroy msg */
-@@ -518,13 +494,10 @@ int amdgpu_vce_get_destroy_msg(struct amdgpu_ring *ring, uint32_t handle,
-
- for (i = ib->length_dw; i < ib_size_dw; ++i)
- ib->ptr[i] = 0x0;
-- r = amdgpu_sched_ib_submit_kernel_helper(adev, ring, ib, 1,
-- &amdgpu_vce_free_job,
-- AMDGPU_FENCE_OWNER_UNDEFINED,
-- &f);
-
- if (direct) {
- r = amdgpu_ib_schedule(ring, 1, ib, NULL, NULL, &f);
-+ job->fence = f;
- if (r)
- goto err;
-
-@@ -541,8 +514,7 @@ int amdgpu_vce_get_destroy_msg(struct amdgpu_ring *ring, uint32_t handle,
- fence_put(f);
- return 0;
- err:
-- amdgpu_ib_free(adev, ib);
-- kfree(ib);
-+ amdgpu_job_free(job);
- return r;
- }
-
-@@ -787,7 +759,7 @@ out:
- * @ib: the IB to execute
- *
- */
--void amdgpu_vce_ring_emit_ib(struct amdgpu_ring *ring, struct amdgpu_ib *ib)
-+void amdgpu_vce_ring_emit_ib(struct amdgpu_ring *ring, struct amdgpu_ib *ib, bool ctx_switch)
- {
- amdgpu_ring_write(ring, VCE_CMD_IB);
- amdgpu_ring_write(ring, lower_32_bits(ib->gpu_addr));
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.h
-index ef99d23..40d0650 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.h
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.h
-@@ -34,7 +34,7 @@ int amdgpu_vce_get_destroy_msg(struct amdgpu_ring *ring, uint32_t handle,
- bool direct, struct fence **fence);
- void amdgpu_vce_free_handles(struct amdgpu_device *adev, struct drm_file *filp);
- int amdgpu_vce_ring_parse_cs(struct amdgpu_cs_parser *p, uint32_t ib_idx);
--void amdgpu_vce_ring_emit_ib(struct amdgpu_ring *ring, struct amdgpu_ib *ib);
-+void amdgpu_vce_ring_emit_ib(struct amdgpu_ring *ring, struct amdgpu_ib *ib, bool ctx_switch);
- void amdgpu_vce_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64 seq,
- unsigned flags);
- int amdgpu_vce_ring_test_ring(struct amdgpu_ring *ring);
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
-index d5c079f..7eee8ae 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
-@@ -113,14 +113,6 @@ void amdgpu_vm_get_pt_bos(struct amdgpu_vm *vm, struct list_head *duplicates)
- unsigned i;
-
- /* add the vm page table to the list */
-- list[0].robj = vm->page_directory;
-- list[0].prefered_domains = AMDGPU_GEM_DOMAIN_VRAM;
-- list[0].allowed_domains = AMDGPU_GEM_DOMAIN_VRAM;
-- list[0].priority = 0;
-- list[0].tv.bo = &vm->page_directory->tbo;
-- list[0].tv.shared = true;
-- list_add(&list[0].tv.head, validated);
--
- for (i = 0; i <= vm->max_pde_used; ++i) {
- struct amdgpu_bo_list_entry *entry = &vm->page_tables[i].entry;
-
-@@ -481,7 +473,7 @@ static int amdgpu_vm_clear_bo(struct amdgpu_device *adev,
- if (r)
- goto error_free;
-
-- amdgpu_bo_fence(bo, fence, true)
-+ amdgpu_bo_fence(bo, fence, true);
- fence_put(fence);
- return 0;
-
-@@ -611,6 +603,7 @@ int amdgpu_vm_update_page_directory(struct amdgpu_device *adev,
- fence_put(fence);
- } else {
- amdgpu_job_free(job);
-+ }
-
- return 0;
-
-@@ -727,9 +720,6 @@ static void amdgpu_vm_update_ptes(struct amdgpu_device *adev,
- uint64_t start, uint64_t end,
- uint64_t dst, uint32_t flags)
- {
-- uint64_t mask = AMDGPU_VM_PTE_COUNT - 1;
-- uint64_t last_pte = ~0, last_dst = ~0;
-- unsigned count = 0;
- const uint64_t mask = AMDGPU_VM_PTE_COUNT - 1;
-
- uint64_t last_pe_start = ~0, last_pe_end = ~0, last_dst = ~0;
-@@ -1382,7 +1372,6 @@ void amdgpu_vm_bo_invalidate(struct amdgpu_device *adev,
- */
- int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm)
- {
-- struct amdgpu_ring *ring = adev->vm_manager.vm_pte_funcs_ring;
- const unsigned align = min(AMDGPU_VM_PTB_ALIGN_SIZE,
- AMDGPU_VM_PTE_COUNT * 8);
- unsigned pd_size, pd_entries;
-@@ -1432,7 +1421,10 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm)
- goto error_free_sched_entity;
-
- r = amdgpu_bo_reserve(vm->page_directory, false);
-- r = amdgpu_vm_clear_bo(adev, vm->page_directory);
-+ if (r)
-+ goto error_free_page_directory;
-+
-+ r = amdgpu_vm_clear_bo(adev, vm, vm->page_directory);
- amdgpu_bo_unreserve(vm->page_directory);
- if (r)
- goto error_free_page_directory;
-@@ -1502,6 +1494,7 @@ void amdgpu_vm_manager_init(struct amdgpu_device *adev)
-
- /* skip over VMID 0, since it is the system VM */
- for (i = 1; i < adev->vm_manager.num_ids; ++i) {
-+ amdgpu_vm_reset_id(adev, i);
- amdgpu_sync_create(&adev->vm_manager.ids[i].active);
- list_add_tail(&adev->vm_manager.ids[i].list,
- &adev->vm_manager.ids_lru);
-diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
-index 609aa36..8f27dd5 100644
---- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
-+++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
-@@ -3726,7 +3726,7 @@ static void dce_v10_0_encoder_add(struct amdgpu_device *adev,
- case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1:
- case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2:
- drm_encoder_init(dev, encoder, &dce_v10_0_encoder_funcs,
-- DRM_MODE_ENCODER_DAC, NULL);
-+ DRM_MODE_ENCODER_DAC);
- drm_encoder_helper_add(encoder, &dce_v10_0_dac_helper_funcs);
- break;
- case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DVO1:
-@@ -3737,15 +3737,15 @@ static void dce_v10_0_encoder_add(struct amdgpu_device *adev,
- if (amdgpu_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) {
- amdgpu_encoder->rmx_type = RMX_FULL;
- drm_encoder_init(dev, encoder, &dce_v10_0_encoder_funcs,
-- DRM_MODE_ENCODER_LVDS, NULL);
-+ DRM_MODE_ENCODER_LVDS);
- amdgpu_encoder->enc_priv = amdgpu_atombios_encoder_get_lcd_info(amdgpu_encoder);
- } else if (amdgpu_encoder->devices & (ATOM_DEVICE_CRT_SUPPORT)) {
- drm_encoder_init(dev, encoder, &dce_v10_0_encoder_funcs,
-- DRM_MODE_ENCODER_DAC, NULL);
-+ DRM_MODE_ENCODER_DAC);
- amdgpu_encoder->enc_priv = amdgpu_atombios_encoder_get_dig_info(amdgpu_encoder);
- } else {
- drm_encoder_init(dev, encoder, &dce_v10_0_encoder_funcs,
-- DRM_MODE_ENCODER_TMDS, NULL);
-+ DRM_MODE_ENCODER_TMDS);
- amdgpu_encoder->enc_priv = amdgpu_atombios_encoder_get_dig_info(amdgpu_encoder);
- }
- drm_encoder_helper_add(encoder, &dce_v10_0_dig_helper_funcs);
-@@ -3763,13 +3763,13 @@ static void dce_v10_0_encoder_add(struct amdgpu_device *adev,
- amdgpu_encoder->is_ext_encoder = true;
- if (amdgpu_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT))
- drm_encoder_init(dev, encoder, &dce_v10_0_encoder_funcs,
-- DRM_MODE_ENCODER_LVDS, NULL);
-+ DRM_MODE_ENCODER_LVDS);
- else if (amdgpu_encoder->devices & (ATOM_DEVICE_CRT_SUPPORT))
- drm_encoder_init(dev, encoder, &dce_v10_0_encoder_funcs,
-- DRM_MODE_ENCODER_DAC, NULL);
-+ DRM_MODE_ENCODER_DAC);
- else
- drm_encoder_init(dev, encoder, &dce_v10_0_encoder_funcs,
-- DRM_MODE_ENCODER_TMDS, NULL);
-+ DRM_MODE_ENCODER_TMDS);
- drm_encoder_helper_add(encoder, &dce_v10_0_ext_helper_funcs);
- break;
- }
-diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
-index 9c7ea3c..b95abde 100644
---- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
-+++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
-@@ -3789,7 +3789,7 @@ static void dce_v11_0_encoder_add(struct amdgpu_device *adev,
- case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1:
- case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2:
- drm_encoder_init(dev, encoder, &dce_v11_0_encoder_funcs,
-- DRM_MODE_ENCODER_DAC, NULL);
-+ DRM_MODE_ENCODER_DAC);
- drm_encoder_helper_add(encoder, &dce_v11_0_dac_helper_funcs);
- break;
- case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DVO1:
-@@ -3800,15 +3800,15 @@ static void dce_v11_0_encoder_add(struct amdgpu_device *adev,
- if (amdgpu_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) {
- amdgpu_encoder->rmx_type = RMX_FULL;
- drm_encoder_init(dev, encoder, &dce_v11_0_encoder_funcs,
-- DRM_MODE_ENCODER_LVDS, NULL);
-+ DRM_MODE_ENCODER_LVDS);
- amdgpu_encoder->enc_priv = amdgpu_atombios_encoder_get_lcd_info(amdgpu_encoder);
- } else if (amdgpu_encoder->devices & (ATOM_DEVICE_CRT_SUPPORT)) {
- drm_encoder_init(dev, encoder, &dce_v11_0_encoder_funcs,
-- DRM_MODE_ENCODER_DAC, NULL);
-+ DRM_MODE_ENCODER_DAC);
- amdgpu_encoder->enc_priv = amdgpu_atombios_encoder_get_dig_info(amdgpu_encoder);
- } else {
- drm_encoder_init(dev, encoder, &dce_v11_0_encoder_funcs,
-- DRM_MODE_ENCODER_TMDS, NULL);
-+ DRM_MODE_ENCODER_TMDS);
- amdgpu_encoder->enc_priv = amdgpu_atombios_encoder_get_dig_info(amdgpu_encoder);
- }
- drm_encoder_helper_add(encoder, &dce_v11_0_dig_helper_funcs);
-@@ -3826,13 +3826,13 @@ static void dce_v11_0_encoder_add(struct amdgpu_device *adev,
- amdgpu_encoder->is_ext_encoder = true;
- if (amdgpu_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT))
- drm_encoder_init(dev, encoder, &dce_v11_0_encoder_funcs,
-- DRM_MODE_ENCODER_LVDS, NULL);
-+ DRM_MODE_ENCODER_LVDS);
- else if (amdgpu_encoder->devices & (ATOM_DEVICE_CRT_SUPPORT))
- drm_encoder_init(dev, encoder, &dce_v11_0_encoder_funcs,
-- DRM_MODE_ENCODER_DAC, NULL);
-+ DRM_MODE_ENCODER_DAC);
- else
- drm_encoder_init(dev, encoder, &dce_v11_0_encoder_funcs,
-- DRM_MODE_ENCODER_TMDS, NULL);
-+ DRM_MODE_ENCODER_TMDS);
- drm_encoder_helper_add(encoder, &dce_v11_0_ext_helper_funcs);
- break;
- }
-diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
-index ef1a800..ea19760 100644
---- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
-+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
-@@ -2029,9 +2029,8 @@ static void gfx_v7_0_ring_emit_fence_compute(struct amdgpu_ring *ring,
- * on the gfx ring for execution by the GPU.
- */
- static void gfx_v7_0_ring_emit_ib_gfx(struct amdgpu_ring *ring,
-- struct amdgpu_ib *ib)
-+ struct amdgpu_ib *ib, bool ctx_switch)
- {
-- bool need_ctx_switch = ring->current_ctx != ib->ctx;
- u32 header, control = 0;
- u32 next_rptr = ring->wptr + 5;
-
-@@ -2039,7 +2038,7 @@ static void gfx_v7_0_ring_emit_ib_gfx(struct amdgpu_ring *ring,
- if ((ib->flags & AMDGPU_IB_FLAG_PREAMBLE) && !need_ctx_switch)
- return;
-
-- if (need_ctx_switch)
-+ if (ctx_switch)
- next_rptr += 2;
-
- next_rptr += 4;
-@@ -2050,7 +2049,7 @@ static void gfx_v7_0_ring_emit_ib_gfx(struct amdgpu_ring *ring,
- amdgpu_ring_write(ring, next_rptr);
-
- /* insert SWITCH_BUFFER packet before first IB in the ring frame */
-- if (need_ctx_switch) {
-+ if (ctx_switch) {
- amdgpu_ring_write(ring, PACKET3(PACKET3_SWITCH_BUFFER, 0));
- amdgpu_ring_write(ring, 0);
- }
-@@ -2073,7 +2072,7 @@ static void gfx_v7_0_ring_emit_ib_gfx(struct amdgpu_ring *ring,
- }
-
- static void gfx_v7_0_ring_emit_ib_compute(struct amdgpu_ring *ring,
-- struct amdgpu_ib *ib)
-+ struct amdgpu_ib *ib, bool ctx_switch)
- {
- u32 header, control = 0;
- u32 next_rptr = ring->wptr + 5;
-diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
-index ba8d786..d35fa43 100644
---- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
-+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
-@@ -5644,17 +5644,16 @@ static void gfx_v8_0_ring_emit_hdp_invalidate(struct amdgpu_ring *ring)
- }
-
- static void gfx_v8_0_ring_emit_ib_gfx(struct amdgpu_ring *ring,
-- struct amdgpu_ib *ib)
-+ struct amdgpu_ib *ib, bool ctx_switch)
- {
-- bool need_ctx_switch = ring->current_ctx != ib->ctx;
- u32 header, control = 0;
- u32 next_rptr = ring->wptr + 5;
-
- /* drop the CE preamble IB for the same context */
-- if ((ib->flags & AMDGPU_IB_FLAG_PREAMBLE) && !need_ctx_switch)
-+ if ((ib->flags & AMDGPU_IB_FLAG_PREAMBLE) && !ctx_switch)
- return;
-
-- if (need_ctx_switch)
-+ if (ctx_switch)
- next_rptr += 2;
-
- next_rptr += 4;
-@@ -5665,7 +5664,7 @@ static void gfx_v8_0_ring_emit_ib_gfx(struct amdgpu_ring *ring,
- amdgpu_ring_write(ring, next_rptr);
-
- /* insert SWITCH_BUFFER packet before first IB in the ring frame */
-- if (need_ctx_switch) {
-+ if (ctx_switch) {
- amdgpu_ring_write(ring, PACKET3(PACKET3_SWITCH_BUFFER, 0));
- amdgpu_ring_write(ring, 0);
- }
-@@ -5688,7 +5687,7 @@ static void gfx_v8_0_ring_emit_ib_gfx(struct amdgpu_ring *ring,
- }
-
- static void gfx_v8_0_ring_emit_ib_compute(struct amdgpu_ring *ring,
-- struct amdgpu_ib *ib)
-+ struct amdgpu_ib *ib, bool ctx_switch)
- {
- u32 header, control = 0;
- u32 next_rptr = ring->wptr + 5;
-diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
-index cae8f26..b7a96db 100644
---- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
-+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
-@@ -1054,7 +1054,6 @@ static int gmc_v7_0_suspend(void *handle)
- struct amdgpu_device *adev = (struct amdgpu_device *)handle;
-
- if (adev->vm_manager.enabled) {
-- amdgpu_vm_manager_fini(adev);
- gmc_v7_0_vm_fini(adev);
- adev->vm_manager.enabled = false;
- }
-diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
-index 6bfdb3f..474d6f1 100644
---- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
-+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
-@@ -242,7 +242,7 @@ static void sdma_v2_4_ring_insert_nop(struct amdgpu_ring *ring, uint32_t count)
- * Schedule an IB in the DMA ring (VI).
- */
- static void sdma_v2_4_ring_emit_ib(struct amdgpu_ring *ring,
-- struct amdgpu_ib *ib)
-+ struct amdgpu_ib *ib, bool ctx_switch)
- {
- u32 vmid = ib->vm_id & 0xf;
- u32 next_rptr = ring->wptr + 5;
-diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
-index 798d39b..77186f5 100644
---- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
-+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
-@@ -400,7 +400,7 @@ static void sdma_v3_0_ring_insert_nop(struct amdgpu_ring *ring, uint32_t count)
- * Schedule an IB in the DMA ring (VI).
- */
- static void sdma_v3_0_ring_emit_ib(struct amdgpu_ring *ring,
-- struct amdgpu_ib *ib)
-+ struct amdgpu_ib *ib, bool ctx_switch)
- {
- u32 vmid = ib->vm_id & 0xf;
- u32 next_rptr = ring->wptr + 5;
-diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c b/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c
-index abd37a7..b9c2a49 100644
---- a/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c
-+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c
-@@ -489,7 +489,7 @@ static int uvd_v4_2_ring_test_ring(struct amdgpu_ring *ring)
- * Write ring commands to execute the indirect buffer
- */
- static void uvd_v4_2_ring_emit_ib(struct amdgpu_ring *ring,
-- struct amdgpu_ib *ib)
-+ struct amdgpu_ib *ib, bool ctx_switch)
- {
- amdgpu_ring_write(ring, PACKET0(mmUVD_RBC_IB_BASE, 0));
- amdgpu_ring_write(ring, ib->gpu_addr);
-diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c
-index 1c1a0e2..465b77c 100644
---- a/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c
-+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c
-@@ -539,7 +539,7 @@ static int uvd_v5_0_ring_test_ring(struct amdgpu_ring *ring)
- * Write ring commands to execute the indirect buffer
- */
- static void uvd_v5_0_ring_emit_ib(struct amdgpu_ring *ring,
-- struct amdgpu_ib *ib)
-+ struct amdgpu_ib *ib, bool ctx_switch)
- {
- amdgpu_ring_write(ring, PACKET0(mmUVD_LMI_RBC_IB_64BIT_BAR_LOW, 0));
- amdgpu_ring_write(ring, lower_32_bits(ib->gpu_addr));
-diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
-index d015cb0..c2f790b 100644
---- a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
-+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
-@@ -631,7 +631,7 @@ static int uvd_v6_0_ring_test_ring(struct amdgpu_ring *ring)
- * Write ring commands to execute the indirect buffer
- */
- static void uvd_v6_0_ring_emit_ib(struct amdgpu_ring *ring,
-- struct amdgpu_ib *ib)
-+ struct amdgpu_ib *ib, bool ctx_switch)
- {
- amdgpu_ring_write(ring, PACKET0(mmUVD_LMI_RBC_IB_64BIT_BAR_LOW, 0));
- amdgpu_ring_write(ring, lower_32_bits(ib->gpu_addr));
-diff --git a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c
-index 9468c52..eed16c4 100644
---- a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c
-+++ b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_mst_types.c
-@@ -267,8 +267,7 @@ dm_dp_create_fake_mst_encoder(struct amdgpu_connector *connector)
- dev,
- &amdgpu_encoder->base,
- NULL,
-- DRM_MODE_ENCODER_DPMST,
-- NULL);
-+ DRM_MODE_ENCODER_DPMST);
-
- drm_encoder_helper_add(encoder, &amdgpu_dm_encoder_helper_funcs);
-
-diff --git a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_types.c b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_types.c
-index 669b1ff..12fbb0b 100644
---- a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_types.c
-+++ b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_types.c
-@@ -1526,7 +1526,7 @@ int amdgpu_dm_crtc_init(struct amdgpu_display_manager *dm,
- &dm_plane_funcs,
- rgb_formats,
- ARRAY_SIZE(rgb_formats),
-- DRM_PLANE_TYPE_PRIMARY, NULL);
-+ DRM_PLANE_TYPE_PRIMARY);
-
- primary_plane->crtc = &acrtc->base;
-
-@@ -1537,7 +1537,7 @@ int amdgpu_dm_crtc_init(struct amdgpu_display_manager *dm,
- &acrtc->base,
- primary_plane,
- NULL,
-- &amdgpu_dm_crtc_funcs, NULL);
-+ &amdgpu_dm_crtc_funcs);
-
- if (res)
- goto fail;
-@@ -1955,8 +1955,7 @@ int amdgpu_dm_encoder_init(
- int res = drm_encoder_init(dev,
- &aencoder->base,
- &amdgpu_dm_encoder_funcs,
-- DRM_MODE_ENCODER_TMDS,
-- NULL);
-+ DRM_MODE_ENCODER_TMDS);
-
- aencoder->base.possible_crtcs = amdgpu_dm_get_encoder_crtc_mask(adev);
-
-diff --git a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
-index c16248c..3e21bfc 100644
---- a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
-+++ b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
-@@ -382,27 +382,28 @@ void amd_sched_entity_push_job(struct amd_sched_job *sched_job)
-
- /* init a sched_job with basic field */
- int amd_sched_job_init(struct amd_sched_job *job,
-- struct amd_gpu_scheduler *sched,
-- struct amd_sched_entity *entity,
-- void (*timeout_cb)(struct work_struct *work),
-- void (*free_cb)(struct kref *refcount),
-- void *owner, struct fence **fence)
-+ struct amd_gpu_scheduler *sched,
-+ struct amd_sched_entity *entity,
-+ void (*timeout_cb)(struct work_struct *work),
-+ void (*free_cb)(struct kref *refcount),
-+ void *owner, struct fence **fence)
- {
-- INIT_LIST_HEAD(&job->node);
-- kref_init(&job->refcount);
-- job->sched = sched;
-- job->s_entity = entity;
-- job->s_fence = amd_sched_fence_create(entity, owner);
-- if (!job->s_fence)
-- return -ENOMEM;
--
-- job->s_fence->s_job = job;
-- job->timeout_callback = timeout_cb;
-- job->free_callback = free_cb;
--
-- if (fence)
-- *fence = &job->s_fence->base;
-- return 0;
-+ INIT_LIST_HEAD(&job->node);
-+ kref_init(&job->refcount);
-+ job->sched = sched;
-+ job->s_entity = entity;
-+ job->fence_context = entity->fence_context;
-+ job->s_fence = amd_sched_fence_create(entity, owner);
-+ if (!job->s_fence)
-+ return -ENOMEM;
-+
-+ job->s_fence->s_job = job;
-+ job->timeout_callback = timeout_cb;
-+ job->free_callback = free_cb;
-+
-+ if (fence)
-+ *fence = &job->s_fence->base;
-+ return 0;
- }
-
- /**
-diff --git a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.h b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.h
-index 070095a..c237e8d 100644
---- a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.h
-+++ b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.h
-@@ -87,6 +87,7 @@ struct amd_sched_job {
- struct work_struct work_free_job;
- struct list_head node;
- struct delayed_work work_tdr;
-+ uint64_t fence_context;
- void (*timeout_callback) (struct work_struct *work);
- void (*free_callback)(struct kref *refcount);
- };
-diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c
-index ef53475..6b4cf25 100644
---- a/drivers/gpu/drm/drm_crtc_helper.c
-+++ b/drivers/gpu/drm/drm_crtc_helper.c
-@@ -818,7 +818,7 @@ EXPORT_SYMBOL(drm_helper_connector_dpms);
- * metadata fields.
- */
- void drm_helper_mode_fill_fb_struct(struct drm_framebuffer *fb,
-- struct drm_mode_fb_cmd2 *mode_cmd)
-+ const struct drm_mode_fb_cmd2 *mode_cmd)
- {
- int i;
-
-diff --git a/drivers/gpu/drm/drm_pci.c b/drivers/gpu/drm/drm_pci.c
-index fcd2a86..528d3a7 100644
---- a/drivers/gpu/drm/drm_pci.c
-+++ b/drivers/gpu/drm/drm_pci.c
-@@ -321,6 +321,26 @@ err_free:
- }
- EXPORT_SYMBOL(drm_get_pci_dev);
-
-+int drm_pcie_get_max_link_width(struct drm_device *dev, u32 *mlw)
-+{
-+ struct pci_dev *root;
-+ u32 lnkcap;
-+
-+ *mlw = 0;
-+ if (!dev->pdev)
-+ return -EINVAL;
-+
-+ root = dev->pdev->bus->self;
-+
-+ pcie_capability_read_dword(root, PCI_EXP_LNKCAP, &lnkcap);
-+
-+ *mlw = (lnkcap & PCI_EXP_LNKCAP_MLW) >> 4;
-+
-+ DRM_INFO("probing mlw for device %x:%x = %x\n", root->vendor, root->device, lnkcap);
-+ return 0;
-+}
-+EXPORT_SYMBOL(drm_pcie_get_max_link_width);
-+
- /**
- * drm_pci_init - Register matching PCI devices with the DRM subsystem
- * @driver: DRM device driver
-diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
-index 745e996..8d65957 100644
---- a/drivers/gpu/drm/ttm/ttm_bo.c
-+++ b/drivers/gpu/drm/ttm/ttm_bo.c
-@@ -228,6 +228,18 @@ void ttm_bo_del_sub_from_lru(struct ttm_buffer_object *bo)
- }
- EXPORT_SYMBOL(ttm_bo_del_sub_from_lru);
-
-+void ttm_bo_move_to_lru_tail(struct ttm_buffer_object *bo)
-+{
-+ int put_count = 0;
-+
-+ lockdep_assert_held(&bo->resv->lock.base);
-+
-+ put_count = ttm_bo_del_from_lru(bo);
-+ ttm_bo_list_ref_sub(bo, put_count, true);
-+ ttm_bo_add_to_lru(bo);
-+}
-+EXPORT_SYMBOL(ttm_bo_move_to_lru_tail);
-+
- /*
- * Call bo->mutex locked.
- */
-diff --git a/include/drm/drmP.h b/include/drm/drmP.h
-index 0a271ca..1664f2b 100644
---- a/include/drm/drmP.h
-+++ b/include/drm/drmP.h
-@@ -1108,6 +1108,7 @@ static inline int drm_pci_set_busid(struct drm_device *dev,
- #define DRM_PCIE_SPEED_80 4
-
- extern int drm_pcie_get_speed_cap_mask(struct drm_device *dev, u32 *speed_mask);
-+extern int drm_pcie_get_max_link_width(struct drm_device *dev, u32 *mlw);
-
- /* platform section */
- extern int drm_platform_init(struct drm_driver *driver, struct platform_device *platform_device);
-diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
-index 3f0c690..bd27364 100644
---- a/include/drm/drm_crtc.h
-+++ b/include/drm/drm_crtc.h
-@@ -992,7 +992,7 @@ struct drm_mode_set {
- struct drm_mode_config_funcs {
- struct drm_framebuffer *(*fb_create)(struct drm_device *dev,
- struct drm_file *file_priv,
-- struct drm_mode_fb_cmd2 *mode_cmd);
-+ const struct drm_mode_fb_cmd2 *mode_cmd);
- void (*output_poll_changed)(struct drm_device *dev);
-
- int (*atomic_check)(struct drm_device *dev,
-diff --git a/include/drm/drm_crtc_helper.h b/include/drm/drm_crtc_helper.h
-index 3febb4b..e22ab29 100644
---- a/include/drm/drm_crtc_helper.h
-+++ b/include/drm/drm_crtc_helper.h
-@@ -197,7 +197,7 @@ extern int drm_helper_connector_dpms(struct drm_connector *connector, int mode);
- extern void drm_helper_move_panel_connectors_to_head(struct drm_device *);
-
- extern void drm_helper_mode_fill_fb_struct(struct drm_framebuffer *fb,
-- struct drm_mode_fb_cmd2 *mode_cmd);
-+ const struct drm_mode_fb_cmd2 *mode_cmd);
-
- static inline void drm_crtc_helper_add(struct drm_crtc *crtc,
- const struct drm_crtc_helper_funcs *funcs)
-diff --git a/include/drm/ttm/ttm_bo_api.h b/include/drm/ttm/ttm_bo_api.h
-index c768ddf..afae231 100644
---- a/include/drm/ttm/ttm_bo_api.h
-+++ b/include/drm/ttm/ttm_bo_api.h
-@@ -383,6 +383,16 @@ extern void ttm_bo_add_to_lru(struct ttm_buffer_object *bo);
- */
- extern int ttm_bo_del_from_lru(struct ttm_buffer_object *bo);
-
-+/**
-+ * ttm_bo_move_to_lru_tail
-+ *
-+ * @bo: The buffer object.
-+ *
-+ * Move this BO to the tail of all lru lists used to lookup and reserve an
-+ * object. This function must be called with struct ttm_bo_global::lru_lock
-+ * held, and is used to make a BO less likely to be considered for eviction.
-+ */
-+extern void ttm_bo_move_to_lru_tail(struct ttm_buffer_object *bo);
-
- /**
- * ttm_bo_lock_delayed_workqueue
-diff --git a/include/drm/ttm/ttm_bo_driver.h b/include/drm/ttm/ttm_bo_driver.h
-index 813042c..d5f692c 100644
---- a/include/drm/ttm/ttm_bo_driver.h
-+++ b/include/drm/ttm/ttm_bo_driver.h
-@@ -434,6 +434,18 @@ struct ttm_bo_driver {
- */
- int (*io_mem_reserve)(struct ttm_bo_device *bdev, struct ttm_mem_reg *mem);
- void (*io_mem_free)(struct ttm_bo_device *bdev, struct ttm_mem_reg *mem);
-+
-+ /**
-+ * Optional driver callback for when BO is removed from the LRU.
-+ * Called with LRU lock held immediately before the removal.
-+ */
-+ void (*lru_removal)(struct ttm_buffer_object *bo);
-+
-+ /**
-+ * Return the list_head after which a BO should be inserted in the LRU.
-+ */
-+ struct list_head *(*lru_tail)(struct ttm_buffer_object *bo);
-+ struct list_head *(*swap_lru_tail)(struct ttm_buffer_object *bo);
- };
-
- /**
---
-2.7.4
-