diff options
| -rw-r--r-- | drivers/gpu/drm/etnaviv/etnaviv_dump.c | 5 |
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); |
