aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/etnaviv/etnaviv_dump.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_dump.c b/drivers/gpu/drm/etnaviv/etnaviv_dump.c
index 33854c94cb85..515515ef24f9 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_dump.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_dump.c
@@ -125,6 +125,8 @@ void etnaviv_core_dump(struct etnaviv_gpu *gpu)
125 return; 125 return;
126 etnaviv_dump_core = false; 126 etnaviv_dump_core = false;
127 127
128 mutex_lock(&gpu->mmu->lock);
129
128 mmu_size = etnaviv_iommu_dump_size(gpu->mmu); 130 mmu_size = etnaviv_iommu_dump_size(gpu->mmu);
129 131
130 /* We always dump registers, mmu, ring and end marker */ 132 /* We always dump registers, mmu, ring and end marker */
@@ -167,6 +169,7 @@ void etnaviv_core_dump(struct etnaviv_gpu *gpu)
167 iter.start = __vmalloc(file_size, GFP_KERNEL | __GFP_NOWARN | __GFP_NORETRY, 169 iter.start = __vmalloc(file_size, GFP_KERNEL | __GFP_NOWARN | __GFP_NORETRY,
168 PAGE_KERNEL); 170 PAGE_KERNEL);
169 if (!iter.start) { 171 if (!iter.start) {
172 mutex_unlock(&gpu->mmu->lock);
170 dev_warn(gpu->dev, "failed to allocate devcoredump file\n"); 173 dev_warn(gpu->dev, "failed to allocate devcoredump file\n");
171 return; 174 return;
172 } 175 }
@@ -234,6 +237,8 @@ void etnaviv_core_dump(struct etnaviv_gpu *gpu)
234 obj->base.size); 237 obj->base.size);
235 } 238 }
236 239
240 mutex_unlock(&gpu->mmu->lock);
241
237 etnaviv_core_dump_header(&iter, ETDUMP_BUF_END, iter.data); 242 etnaviv_core_dump_header(&iter, ETDUMP_BUF_END, iter.data);
238 243
239 dev_coredumpv(gpu->dev, iter.start, iter.data - iter.start, GFP_KERNEL); 244 dev_coredumpv(gpu->dev, iter.start, iter.data - iter.start, GFP_KERNEL);