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)  		return;  	etnaviv_dump_core = false; +	mutex_lock(&gpu->mmu->lock); +  	mmu_size = etnaviv_iommu_dump_size(gpu->mmu);  	/* We always dump registers, mmu, ring and end marker */ @@ -167,6 +169,7 @@ void etnaviv_core_dump(struct etnaviv_gpu *gpu)  	iter.start = __vmalloc(file_size, GFP_KERNEL | __GFP_NOWARN | __GFP_NORETRY,  			       PAGE_KERNEL);  	if (!iter.start) { +		mutex_unlock(&gpu->mmu->lock);  		dev_warn(gpu->dev, "failed to allocate devcoredump file\n");  		return;  	} @@ -234,6 +237,8 @@ void etnaviv_core_dump(struct etnaviv_gpu *gpu)  					 obj->base.size);  	} +	mutex_unlock(&gpu->mmu->lock); +  	etnaviv_core_dump_header(&iter, ETDUMP_BUF_END, iter.data);  	dev_coredumpv(gpu->dev, iter.start, iter.data - iter.start, GFP_KERNEL);  | 

