Loading drivers/gpu/msm/adreno_snapshot.c +31 −9 Original line number Diff line number Diff line Loading @@ -183,7 +183,17 @@ void adreno_parse_ib(struct kgsl_device *device, * then push it into the static blob otherwise put it in the dynamic * list */ if (gpuaddr == snapshot->ib1base) { if (kgsl_addr_range_overlap(gpuaddr, dwords, snapshot->ib1base, snapshot->ib1size)) { /* * During restore after preemption, ib1base in the register * can be updated by CP. In such scenarios, to dump complete * IB1 in snapshot, we should consider ib1base from ringbuffer. */ if (gpuaddr != snapshot->ib1base) { snapshot->ib1base = gpuaddr; snapshot->ib1size = dwords; } kgsl_snapshot_push_object(device, process, gpuaddr, dwords); return; } Loading Loading @@ -287,15 +297,28 @@ static void snapshot_rb_ibs(struct kgsl_device *device, } if (adreno_cmd_is_ib(adreno_dev, rbptr[index])) { if (ADRENO_LEGACY_PM4(adreno_dev)) { if (rbptr[index + 1] == snapshot->ib1base) break; } else { uint64_t ibaddr; uint64_t ibsize; if (ADRENO_LEGACY_PM4(adreno_dev)) { ibaddr = rbptr[index + 1]; ibsize = rbptr[index + 2]; } else { ibaddr = rbptr[index + 2]; ibaddr = ibaddr << 32 | rbptr[index + 1]; if (ibaddr == snapshot->ib1base) ibsize = rbptr[index + 3]; } if (kgsl_addr_range_overlap(ibaddr, ibsize, snapshot->ib1base, snapshot->ib1size)) { /* * During restore after preemption, ib1base in * the register can be updated by CP. In such * scenario, to dump complete IB1 in snapshot, * we should consider ib1base from ringbuffer. */ snapshot->ib1base = ibaddr; snapshot->ib1size = ibsize; break; } } Loading Loading @@ -884,8 +907,7 @@ void adreno_snapshot(struct kgsl_device *device, struct kgsl_snapshot *snapshot, * figure how often this really happens. */ if (-ENOENT == find_object(snapshot->ib1base, snapshot->process) && snapshot->ib1size) { if (-ENOENT == find_object(snapshot->ib1base, snapshot->process)) { struct kgsl_mem_entry *entry; u64 ibsize; Loading Loading
drivers/gpu/msm/adreno_snapshot.c +31 −9 Original line number Diff line number Diff line Loading @@ -183,7 +183,17 @@ void adreno_parse_ib(struct kgsl_device *device, * then push it into the static blob otherwise put it in the dynamic * list */ if (gpuaddr == snapshot->ib1base) { if (kgsl_addr_range_overlap(gpuaddr, dwords, snapshot->ib1base, snapshot->ib1size)) { /* * During restore after preemption, ib1base in the register * can be updated by CP. In such scenarios, to dump complete * IB1 in snapshot, we should consider ib1base from ringbuffer. */ if (gpuaddr != snapshot->ib1base) { snapshot->ib1base = gpuaddr; snapshot->ib1size = dwords; } kgsl_snapshot_push_object(device, process, gpuaddr, dwords); return; } Loading Loading @@ -287,15 +297,28 @@ static void snapshot_rb_ibs(struct kgsl_device *device, } if (adreno_cmd_is_ib(adreno_dev, rbptr[index])) { if (ADRENO_LEGACY_PM4(adreno_dev)) { if (rbptr[index + 1] == snapshot->ib1base) break; } else { uint64_t ibaddr; uint64_t ibsize; if (ADRENO_LEGACY_PM4(adreno_dev)) { ibaddr = rbptr[index + 1]; ibsize = rbptr[index + 2]; } else { ibaddr = rbptr[index + 2]; ibaddr = ibaddr << 32 | rbptr[index + 1]; if (ibaddr == snapshot->ib1base) ibsize = rbptr[index + 3]; } if (kgsl_addr_range_overlap(ibaddr, ibsize, snapshot->ib1base, snapshot->ib1size)) { /* * During restore after preemption, ib1base in * the register can be updated by CP. In such * scenario, to dump complete IB1 in snapshot, * we should consider ib1base from ringbuffer. */ snapshot->ib1base = ibaddr; snapshot->ib1size = ibsize; break; } } Loading Loading @@ -884,8 +907,7 @@ void adreno_snapshot(struct kgsl_device *device, struct kgsl_snapshot *snapshot, * figure how often this really happens. */ if (-ENOENT == find_object(snapshot->ib1base, snapshot->process) && snapshot->ib1size) { if (-ENOENT == find_object(snapshot->ib1base, snapshot->process)) { struct kgsl_mem_entry *entry; u64 ibsize; Loading