drm/msm: Crashdump prep for sparse mappings
In this case, userspace could request dumping partial GEM obj mappings. Also drop use of should_dump() helper, which really only makes sense in the old submit->bos[] table world. Signed-off-by: Rob Clark <robdclark@chromium.org> Signed-off-by: Rob Clark <robin.clark@oss.qualcomm.com> Tested-by: Antonino Maniscalco <antomani103@gmail.com> Reviewed-by: Antonino Maniscalco <antomani103@gmail.com> Patchwork: https://patchwork.freedesktop.org/patch/661496/
This commit is contained in:
@@ -219,13 +219,14 @@ static void msm_gpu_devcoredump_free(void *data)
|
||||
}
|
||||
|
||||
static void msm_gpu_crashstate_get_bo(struct msm_gpu_state *state,
|
||||
struct drm_gem_object *obj, u64 iova, bool full)
|
||||
struct drm_gem_object *obj, u64 iova,
|
||||
bool full, size_t offset, size_t size)
|
||||
{
|
||||
struct msm_gpu_state_bo *state_bo = &state->bos[state->nr_bos];
|
||||
struct msm_gem_object *msm_obj = to_msm_bo(obj);
|
||||
|
||||
/* Don't record write only objects */
|
||||
state_bo->size = obj->size;
|
||||
state_bo->size = size;
|
||||
state_bo->flags = msm_obj->flags;
|
||||
state_bo->iova = iova;
|
||||
|
||||
@@ -236,7 +237,7 @@ static void msm_gpu_crashstate_get_bo(struct msm_gpu_state *state,
|
||||
if (full) {
|
||||
void *ptr;
|
||||
|
||||
state_bo->data = kvmalloc(obj->size, GFP_KERNEL);
|
||||
state_bo->data = kvmalloc(size, GFP_KERNEL);
|
||||
if (!state_bo->data)
|
||||
goto out;
|
||||
|
||||
@@ -249,7 +250,7 @@ static void msm_gpu_crashstate_get_bo(struct msm_gpu_state *state,
|
||||
goto out;
|
||||
}
|
||||
|
||||
memcpy(state_bo->data, ptr, obj->size);
|
||||
memcpy(state_bo->data, ptr + offset, size);
|
||||
msm_gem_put_vaddr(obj);
|
||||
}
|
||||
out:
|
||||
@@ -281,6 +282,7 @@ static void msm_gpu_crashstate_capture(struct msm_gpu *gpu,
|
||||
state->fault_info = *fault_info;
|
||||
|
||||
if (submit) {
|
||||
extern bool rd_full;
|
||||
int i;
|
||||
|
||||
if (state->fault_info.ttbr0) {
|
||||
@@ -296,9 +298,10 @@ static void msm_gpu_crashstate_capture(struct msm_gpu *gpu,
|
||||
sizeof(struct msm_gpu_state_bo), GFP_KERNEL);
|
||||
|
||||
for (i = 0; state->bos && i < submit->nr_bos; i++) {
|
||||
msm_gpu_crashstate_get_bo(state, submit->bos[i].obj,
|
||||
submit->bos[i].iova,
|
||||
should_dump(submit, i));
|
||||
struct drm_gem_object *obj = submit->bos[i].obj;
|
||||
bool dump = rd_full || (submit->bos[i].flags & MSM_SUBMIT_BO_DUMP);
|
||||
msm_gpu_crashstate_get_bo(state, obj, submit->bos[i].iova,
|
||||
dump, 0, obj->size);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user