mirror of
https://github.com/torvalds/linux.git
synced 2026-06-08 14:42:37 +02:00
drm/etnaviv: lock MMU while dumping core
[ Upstream commit1396500d67] The devcoredump needs to operate on a stable state of the MMU while it is writing the MMU state to the coredump. The missing lock allowed both the userspace submit, as well as the GPU job finish paths to mutate the MMU state while a coredump is under way. Fixes:a8c21a5451(drm/etnaviv: add initial etnaviv DRM driver) Reported-by: David Jander <david@protonic.nl> Signed-off-by: Lucas Stach <l.stach@pengutronix.de> Tested-by: David Jander <david@protonic.nl> Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
ee61fb4de9
commit
b7ca3f331d
|
|
@ -124,6 +124,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 */
|
||||
|
|
@ -166,6 +168,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;
|
||||
}
|
||||
|
|
@ -233,6 +236,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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user