Commit 6ba5daa5 authored by Rob Clark's avatar Rob Clark

drm/msm: Use drm_gem_object in submit bos table

Basically everywhere wants the base ptr type.  So store that instead of
msm_gem_object.
Signed-off-by: default avatarRob Clark <robdclark@chromium.org>
Patchwork: https://patchwork.freedesktop.org/patch/551021/
parent 1a8b612e
...@@ -66,7 +66,7 @@ void a5xx_flush(struct msm_gpu *gpu, struct msm_ringbuffer *ring, ...@@ -66,7 +66,7 @@ void a5xx_flush(struct msm_gpu *gpu, struct msm_ringbuffer *ring,
static void a5xx_submit_in_rb(struct msm_gpu *gpu, struct msm_gem_submit *submit) static void a5xx_submit_in_rb(struct msm_gpu *gpu, struct msm_gem_submit *submit)
{ {
struct msm_ringbuffer *ring = submit->ring; struct msm_ringbuffer *ring = submit->ring;
struct msm_gem_object *obj; struct drm_gem_object *obj;
uint32_t *ptr, dwords; uint32_t *ptr, dwords;
unsigned int i; unsigned int i;
...@@ -83,7 +83,7 @@ static void a5xx_submit_in_rb(struct msm_gpu *gpu, struct msm_gem_submit *submit ...@@ -83,7 +83,7 @@ static void a5xx_submit_in_rb(struct msm_gpu *gpu, struct msm_gem_submit *submit
obj = submit->bos[submit->cmd[i].idx].obj; obj = submit->bos[submit->cmd[i].idx].obj;
dwords = submit->cmd[i].size; dwords = submit->cmd[i].size;
ptr = msm_gem_get_vaddr(&obj->base); ptr = msm_gem_get_vaddr(obj);
/* _get_vaddr() shouldn't fail at this point, /* _get_vaddr() shouldn't fail at this point,
* since we've already mapped it once in * since we've already mapped it once in
...@@ -103,7 +103,7 @@ static void a5xx_submit_in_rb(struct msm_gpu *gpu, struct msm_gem_submit *submit ...@@ -103,7 +103,7 @@ static void a5xx_submit_in_rb(struct msm_gpu *gpu, struct msm_gem_submit *submit
OUT_RING(ring, ptr[i]); OUT_RING(ring, ptr[i]);
} }
msm_gem_put_vaddr(&obj->base); msm_gem_put_vaddr(obj);
break; break;
} }
......
...@@ -301,7 +301,7 @@ struct msm_gem_submit { ...@@ -301,7 +301,7 @@ struct msm_gem_submit {
#define BO_VMA_PINNED 0x1000 /* vma (virtual address) is pinned */ #define BO_VMA_PINNED 0x1000 /* vma (virtual address) is pinned */
uint32_t flags; uint32_t flags;
union { union {
struct msm_gem_object *obj; struct drm_gem_object *obj;
uint32_t handle; uint32_t handle;
}; };
uint64_t iova; uint64_t iova;
......
...@@ -165,7 +165,7 @@ static int submit_lookup_objects(struct msm_gem_submit *submit, ...@@ -165,7 +165,7 @@ static int submit_lookup_objects(struct msm_gem_submit *submit,
drm_gem_object_get(obj); drm_gem_object_get(obj);
submit->bos[i].obj = to_msm_bo(obj); submit->bos[i].obj = obj;
} }
out_unlock: out_unlock:
...@@ -251,7 +251,7 @@ static int submit_lookup_cmds(struct msm_gem_submit *submit, ...@@ -251,7 +251,7 @@ static int submit_lookup_cmds(struct msm_gem_submit *submit,
static void submit_cleanup_bo(struct msm_gem_submit *submit, int i, static void submit_cleanup_bo(struct msm_gem_submit *submit, int i,
unsigned cleanup_flags) unsigned cleanup_flags)
{ {
struct drm_gem_object *obj = &submit->bos[i].obj->base; struct drm_gem_object *obj = submit->bos[i].obj;
unsigned flags = submit->bos[i].flags & cleanup_flags; unsigned flags = submit->bos[i].flags & cleanup_flags;
/* /*
...@@ -287,7 +287,7 @@ static int submit_lock_objects(struct msm_gem_submit *submit) ...@@ -287,7 +287,7 @@ static int submit_lock_objects(struct msm_gem_submit *submit)
retry: retry:
for (i = 0; i < submit->nr_bos; i++) { for (i = 0; i < submit->nr_bos; i++) {
struct msm_gem_object *msm_obj = submit->bos[i].obj; struct drm_gem_object *obj = submit->bos[i].obj;
if (slow_locked == i) if (slow_locked == i)
slow_locked = -1; slow_locked = -1;
...@@ -295,7 +295,7 @@ static int submit_lock_objects(struct msm_gem_submit *submit) ...@@ -295,7 +295,7 @@ static int submit_lock_objects(struct msm_gem_submit *submit)
contended = i; contended = i;
if (!(submit->bos[i].flags & BO_LOCKED)) { if (!(submit->bos[i].flags & BO_LOCKED)) {
ret = dma_resv_lock_interruptible(msm_obj->base.resv, ret = dma_resv_lock_interruptible(obj->resv,
&submit->ticket); &submit->ticket);
if (ret) if (ret)
goto fail; goto fail;
...@@ -321,9 +321,9 @@ static int submit_lock_objects(struct msm_gem_submit *submit) ...@@ -321,9 +321,9 @@ static int submit_lock_objects(struct msm_gem_submit *submit)
submit_unlock_unpin_bo(submit, slow_locked); submit_unlock_unpin_bo(submit, slow_locked);
if (ret == -EDEADLK) { if (ret == -EDEADLK) {
struct msm_gem_object *msm_obj = submit->bos[contended].obj; struct drm_gem_object *obj = submit->bos[contended].obj;
/* we lost out in a seqno race, lock and retry.. */ /* we lost out in a seqno race, lock and retry.. */
ret = dma_resv_lock_slow_interruptible(msm_obj->base.resv, ret = dma_resv_lock_slow_interruptible(obj->resv,
&submit->ticket); &submit->ticket);
if (!ret) { if (!ret) {
submit->bos[contended].flags |= BO_LOCKED; submit->bos[contended].flags |= BO_LOCKED;
...@@ -346,7 +346,7 @@ static int submit_fence_sync(struct msm_gem_submit *submit, bool no_implicit) ...@@ -346,7 +346,7 @@ static int submit_fence_sync(struct msm_gem_submit *submit, bool no_implicit)
int i, ret = 0; int i, ret = 0;
for (i = 0; i < submit->nr_bos; i++) { for (i = 0; i < submit->nr_bos; i++) {
struct drm_gem_object *obj = &submit->bos[i].obj->base; struct drm_gem_object *obj = submit->bos[i].obj;
bool write = submit->bos[i].flags & MSM_SUBMIT_BO_WRITE; bool write = submit->bos[i].flags & MSM_SUBMIT_BO_WRITE;
/* NOTE: _reserve_shared() must happen before /* NOTE: _reserve_shared() must happen before
...@@ -389,7 +389,7 @@ static int submit_pin_objects(struct msm_gem_submit *submit) ...@@ -389,7 +389,7 @@ static int submit_pin_objects(struct msm_gem_submit *submit)
submit->valid = true; submit->valid = true;
for (i = 0; i < submit->nr_bos; i++) { for (i = 0; i < submit->nr_bos; i++) {
struct drm_gem_object *obj = &submit->bos[i].obj->base; struct drm_gem_object *obj = submit->bos[i].obj;
struct msm_gem_vma *vma; struct msm_gem_vma *vma;
/* if locking succeeded, pin bo: */ /* if locking succeeded, pin bo: */
...@@ -424,7 +424,7 @@ static void submit_attach_object_fences(struct msm_gem_submit *submit) ...@@ -424,7 +424,7 @@ static void submit_attach_object_fences(struct msm_gem_submit *submit)
int i; int i;
for (i = 0; i < submit->nr_bos; i++) { for (i = 0; i < submit->nr_bos; i++) {
struct drm_gem_object *obj = &submit->bos[i].obj->base; struct drm_gem_object *obj = submit->bos[i].obj;
if (submit->bos[i].flags & MSM_SUBMIT_BO_WRITE) if (submit->bos[i].flags & MSM_SUBMIT_BO_WRITE)
dma_resv_add_fence(obj->resv, submit->user_fence, dma_resv_add_fence(obj->resv, submit->user_fence,
...@@ -436,7 +436,7 @@ static void submit_attach_object_fences(struct msm_gem_submit *submit) ...@@ -436,7 +436,7 @@ static void submit_attach_object_fences(struct msm_gem_submit *submit)
} }
static int submit_bo(struct msm_gem_submit *submit, uint32_t idx, static int submit_bo(struct msm_gem_submit *submit, uint32_t idx,
struct msm_gem_object **obj, uint64_t *iova, bool *valid) struct drm_gem_object **obj, uint64_t *iova, bool *valid)
{ {
if (idx >= submit->nr_bos) { if (idx >= submit->nr_bos) {
DRM_ERROR("invalid buffer index: %u (out of %u)\n", DRM_ERROR("invalid buffer index: %u (out of %u)\n",
...@@ -455,7 +455,7 @@ static int submit_bo(struct msm_gem_submit *submit, uint32_t idx, ...@@ -455,7 +455,7 @@ static int submit_bo(struct msm_gem_submit *submit, uint32_t idx,
} }
/* process the reloc's and patch up the cmdstream as needed: */ /* process the reloc's and patch up the cmdstream as needed: */
static int submit_reloc(struct msm_gem_submit *submit, struct msm_gem_object *obj, static int submit_reloc(struct msm_gem_submit *submit, struct drm_gem_object *obj,
uint32_t offset, uint32_t nr_relocs, struct drm_msm_gem_submit_reloc *relocs) uint32_t offset, uint32_t nr_relocs, struct drm_msm_gem_submit_reloc *relocs)
{ {
uint32_t i, last_offset = 0; uint32_t i, last_offset = 0;
...@@ -473,7 +473,7 @@ static int submit_reloc(struct msm_gem_submit *submit, struct msm_gem_object *ob ...@@ -473,7 +473,7 @@ static int submit_reloc(struct msm_gem_submit *submit, struct msm_gem_object *ob
/* For now, just map the entire thing. Eventually we probably /* For now, just map the entire thing. Eventually we probably
* to do it page-by-page, w/ kmap() if not vmap()d.. * to do it page-by-page, w/ kmap() if not vmap()d..
*/ */
ptr = msm_gem_get_vaddr_locked(&obj->base); ptr = msm_gem_get_vaddr_locked(obj);
if (IS_ERR(ptr)) { if (IS_ERR(ptr)) {
ret = PTR_ERR(ptr); ret = PTR_ERR(ptr);
...@@ -497,7 +497,7 @@ static int submit_reloc(struct msm_gem_submit *submit, struct msm_gem_object *ob ...@@ -497,7 +497,7 @@ static int submit_reloc(struct msm_gem_submit *submit, struct msm_gem_object *ob
/* offset in dwords: */ /* offset in dwords: */
off = submit_reloc.submit_offset / 4; off = submit_reloc.submit_offset / 4;
if ((off >= (obj->base.size / 4)) || if ((off >= (obj->size / 4)) ||
(off < last_offset)) { (off < last_offset)) {
DRM_ERROR("invalid offset %u at reloc %u\n", off, i); DRM_ERROR("invalid offset %u at reloc %u\n", off, i);
ret = -EINVAL; ret = -EINVAL;
...@@ -524,7 +524,7 @@ static int submit_reloc(struct msm_gem_submit *submit, struct msm_gem_object *ob ...@@ -524,7 +524,7 @@ static int submit_reloc(struct msm_gem_submit *submit, struct msm_gem_object *ob
} }
out: out:
msm_gem_put_vaddr_locked(&obj->base); msm_gem_put_vaddr_locked(obj);
return ret; return ret;
} }
...@@ -542,10 +542,10 @@ static void submit_cleanup(struct msm_gem_submit *submit, bool error) ...@@ -542,10 +542,10 @@ static void submit_cleanup(struct msm_gem_submit *submit, bool error)
cleanup_flags |= BO_VMA_PINNED | BO_OBJ_PINNED; cleanup_flags |= BO_VMA_PINNED | BO_OBJ_PINNED;
for (i = 0; i < submit->nr_bos; i++) { for (i = 0; i < submit->nr_bos; i++) {
struct msm_gem_object *msm_obj = submit->bos[i].obj; struct drm_gem_object *obj = submit->bos[i].obj;
submit_cleanup_bo(submit, i, cleanup_flags); submit_cleanup_bo(submit, i, cleanup_flags);
if (error) if (error)
drm_gem_object_put(&msm_obj->base); drm_gem_object_put(obj);
} }
} }
...@@ -554,7 +554,7 @@ void msm_submit_retire(struct msm_gem_submit *submit) ...@@ -554,7 +554,7 @@ void msm_submit_retire(struct msm_gem_submit *submit)
int i; int i;
for (i = 0; i < submit->nr_bos; i++) { for (i = 0; i < submit->nr_bos; i++) {
struct drm_gem_object *obj = &submit->bos[i].obj->base; struct drm_gem_object *obj = submit->bos[i].obj;
drm_gem_object_put(obj); drm_gem_object_put(obj);
} }
...@@ -861,17 +861,17 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data, ...@@ -861,17 +861,17 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
goto out; goto out;
for (i = 0; i < args->nr_cmds; i++) { for (i = 0; i < args->nr_cmds; i++) {
struct msm_gem_object *msm_obj; struct drm_gem_object *obj;
uint64_t iova; uint64_t iova;
ret = submit_bo(submit, submit->cmd[i].idx, ret = submit_bo(submit, submit->cmd[i].idx,
&msm_obj, &iova, NULL); &obj, &iova, NULL);
if (ret) if (ret)
goto out; goto out;
if (!submit->cmd[i].size || if (!submit->cmd[i].size ||
((submit->cmd[i].size + submit->cmd[i].offset) > ((submit->cmd[i].size + submit->cmd[i].offset) >
msm_obj->base.size / 4)) { obj->size / 4)) {
DRM_ERROR("invalid cmdstream size: %u\n", submit->cmd[i].size * 4); DRM_ERROR("invalid cmdstream size: %u\n", submit->cmd[i].size * 4);
ret = -EINVAL; ret = -EINVAL;
goto out; goto out;
...@@ -892,7 +892,7 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data, ...@@ -892,7 +892,7 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
continue; continue;
} }
ret = submit_reloc(submit, msm_obj, submit->cmd[i].offset * 4, ret = submit_reloc(submit, obj, submit->cmd[i].offset * 4,
submit->cmd[i].nr_relocs, submit->cmd[i].relocs); submit->cmd[i].nr_relocs, submit->cmd[i].relocs);
if (ret) if (ret)
goto out; goto out;
......
...@@ -219,36 +219,36 @@ static void msm_gpu_devcoredump_free(void *data) ...@@ -219,36 +219,36 @@ static void msm_gpu_devcoredump_free(void *data)
} }
static void msm_gpu_crashstate_get_bo(struct msm_gpu_state *state, static void msm_gpu_crashstate_get_bo(struct msm_gpu_state *state,
struct msm_gem_object *obj, u64 iova, bool full) struct drm_gem_object *obj, u64 iova, bool full)
{ {
struct msm_gpu_state_bo *state_bo = &state->bos[state->nr_bos]; struct msm_gpu_state_bo *state_bo = &state->bos[state->nr_bos];
/* Don't record write only objects */ /* Don't record write only objects */
state_bo->size = obj->base.size; state_bo->size = obj->size;
state_bo->iova = iova; state_bo->iova = iova;
BUILD_BUG_ON(sizeof(state_bo->name) != sizeof(obj->name)); BUILD_BUG_ON(sizeof(state_bo->name) != sizeof(to_msm_bo(obj)->name));
memcpy(state_bo->name, obj->name, sizeof(state_bo->name)); memcpy(state_bo->name, to_msm_bo(obj)->name, sizeof(state_bo->name));
if (full) { if (full) {
void *ptr; void *ptr;
state_bo->data = kvmalloc(obj->base.size, GFP_KERNEL); state_bo->data = kvmalloc(obj->size, GFP_KERNEL);
if (!state_bo->data) if (!state_bo->data)
goto out; goto out;
msm_gem_lock(&obj->base); msm_gem_lock(obj);
ptr = msm_gem_get_vaddr_active(&obj->base); ptr = msm_gem_get_vaddr_active(obj);
msm_gem_unlock(&obj->base); msm_gem_unlock(obj);
if (IS_ERR(ptr)) { if (IS_ERR(ptr)) {
kvfree(state_bo->data); kvfree(state_bo->data);
state_bo->data = NULL; state_bo->data = NULL;
goto out; goto out;
} }
memcpy(state_bo->data, ptr, obj->base.size); memcpy(state_bo->data, ptr, obj->size);
msm_gem_put_vaddr(&obj->base); msm_gem_put_vaddr(obj);
} }
out: out:
state->nr_bos++; state->nr_bos++;
......
...@@ -310,7 +310,7 @@ static void snapshot_buf(struct msm_rd_state *rd, ...@@ -310,7 +310,7 @@ static void snapshot_buf(struct msm_rd_state *rd,
struct msm_gem_submit *submit, int idx, struct msm_gem_submit *submit, int idx,
uint64_t iova, uint32_t size, bool full) uint64_t iova, uint32_t size, bool full)
{ {
struct msm_gem_object *obj = submit->bos[idx].obj; struct drm_gem_object *obj = submit->bos[idx].obj;
unsigned offset = 0; unsigned offset = 0;
const char *buf; const char *buf;
...@@ -318,7 +318,7 @@ static void snapshot_buf(struct msm_rd_state *rd, ...@@ -318,7 +318,7 @@ static void snapshot_buf(struct msm_rd_state *rd,
offset = iova - submit->bos[idx].iova; offset = iova - submit->bos[idx].iova;
} else { } else {
iova = submit->bos[idx].iova; iova = submit->bos[idx].iova;
size = obj->base.size; size = obj->size;
} }
/* /*
...@@ -335,7 +335,7 @@ static void snapshot_buf(struct msm_rd_state *rd, ...@@ -335,7 +335,7 @@ static void snapshot_buf(struct msm_rd_state *rd,
if (!(submit->bos[idx].flags & MSM_SUBMIT_BO_READ)) if (!(submit->bos[idx].flags & MSM_SUBMIT_BO_READ))
return; return;
buf = msm_gem_get_vaddr_active(&obj->base); buf = msm_gem_get_vaddr_active(obj);
if (IS_ERR(buf)) if (IS_ERR(buf))
return; return;
...@@ -343,7 +343,7 @@ static void snapshot_buf(struct msm_rd_state *rd, ...@@ -343,7 +343,7 @@ static void snapshot_buf(struct msm_rd_state *rd,
rd_write_section(rd, RD_BUFFER_CONTENTS, buf, size); rd_write_section(rd, RD_BUFFER_CONTENTS, buf, size);
msm_gem_put_vaddr_locked(&obj->base); msm_gem_put_vaddr_locked(obj);
} }
/* called under gpu->lock */ /* called under gpu->lock */
......
...@@ -24,7 +24,7 @@ static struct dma_fence *msm_job_run(struct drm_sched_job *job) ...@@ -24,7 +24,7 @@ static struct dma_fence *msm_job_run(struct drm_sched_job *job)
mutex_lock(&priv->lru.lock); mutex_lock(&priv->lru.lock);
for (i = 0; i < submit->nr_bos; i++) { for (i = 0; i < submit->nr_bos; i++) {
struct drm_gem_object *obj = &submit->bos[i].obj->base; struct drm_gem_object *obj = submit->bos[i].obj;
msm_gem_vma_unpin_fenced(submit->bos[i].vma, fctx); msm_gem_vma_unpin_fenced(submit->bos[i].vma, fctx);
msm_gem_unpin_active(obj); msm_gem_unpin_active(obj);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment