On 13/08/2025 10:37, Dikshita Agarwal wrote:
One internal buffer which is allocated only once per session was not
being freed during session close because it was not being tracked as
part of internal buffer list which resulted in a memory leak.
Add the necessary logic to explicitly free the untracked internal buffer
during session close to ensure all allocated memory is released
properly.
Fixes: 73702f45db81 ("media: iris: allocate, initialize and queue internal buffers")
Reviewed-by: Vikash Garodia <quic_vgarodia@xxxxxxxxxxx>
Tested-by: Vikash Garodia <quic_vgarodia@xxxxxxxxxxx> # X1E80100
Signed-off-by: Dikshita Agarwal <quic_dikshita@xxxxxxxxxxx>
---
drivers/media/platform/qcom/iris/iris_buffer.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/drivers/media/platform/qcom/iris/iris_buffer.c b/drivers/media/platform/qcom/iris/iris_buffer.c
index 6425e4919e3b0b849ba801ca9e01921c114144cd..9f664c241149362d44d3a8fa65e2266f9c2e80e0 100644
--- a/drivers/media/platform/qcom/iris/iris_buffer.c
+++ b/drivers/media/platform/qcom/iris/iris_buffer.c
@@ -413,6 +413,16 @@ static int iris_destroy_internal_buffers(struct iris_inst *inst, u32 plane, bool
}
}
+ if (force) {
+ buffers = &inst->buffers[BUF_PERSIST];
+
+ list_for_each_entry_safe(buf, next, &buffers->list, list) {
+ ret = iris_destroy_internal_buffer(inst, buf);
+ if (ret)
+ return ret;
+ }
+ }
+
return 0;
}
Why is the logic here not to simply release every index of the enum
iris_buffer_type ?
If I'm reading the code right here, len indicates the list of linked
lists to free, adding BUF_PERSIST appends to the list that may be freed
if force is true but, then what about the remaining entries BUF_SCRATCH_1 ?
Is it valid to leave this routine with force = true but BUF_SCRATCH_1
not specifically indexed, if so why ?
---
bod