diff --git a/drivers/gpu/msm/kgsl_snapshot.c b/drivers/gpu/msm/kgsl_snapshot.c index d3aa3de2bc7c..f75fa57fa30f 100644 --- a/drivers/gpu/msm/kgsl_snapshot.c +++ b/drivers/gpu/msm/kgsl_snapshot.c @@ -687,13 +687,18 @@ static void kgsl_device_snapshot_atomic(struct kgsl_device *device) } device->snapshot_memory_atomic.size = device->snapshot_memory.size; - device->snapshot_memory_atomic.ptr = devm_kzalloc(&device->pdev->dev, - device->snapshot_memory_atomic.size, GFP_ATOMIC); + if (!device->snapshot_faultcount) { + /* Use non-atomic snapshot memory if it is unused */ + device->snapshot_memory_atomic.ptr = device->snapshot_memory.ptr; + } else { + device->snapshot_memory_atomic.ptr = devm_kzalloc(&device->pdev->dev, + device->snapshot_memory_atomic.size, GFP_ATOMIC); - if (!device->snapshot_memory_atomic.ptr) { - dev_err(device->dev, - "KGSL failed to allocate memory for atomic snapshot\n"); - return; + if (!device->snapshot_memory_atomic.ptr) { + dev_err(device->dev, + "KGSL failed to allocate memory for atomic snapshot\n"); + return; + } } /* Allocate memory for the snapshot instance */