On 20-05-2026 19:57, Dmitry Baryshkov wrote:
> On Tue, May 19, 2026 at 11:45:57AM +0530, Ekansh Gupta via B4 Relay wrote:
>> From: Ekansh Gupta <[email protected]>
>>
>> Introduce the QDA memory manager (qda_memory_manager) to track and
>> manage the IOMMU devices that back each compute context bank (CB).
>>
>> Each CB device registered on the qda-compute-cb bus is assigned a
>> unique ID via an XArray and wrapped in a qda_iommu_device descriptor
>> that records the device pointer and its stream ID. This registry
>> allows the driver to look up the correct IOMMU domain for a given
>> session when mapping DSP buffers.
>>
>> The memory manager is initialised in qda_init_device() before CB
>> devices are populated and torn down in qda_deinit_device() after they
>> are destroyed, ensuring no dangling references remain in the XArray.
>>
>> qda_cb.c is extended with qda_cb_setup_device(), which is called
>> immediately after a CB device is registered on the bus. It allocates
>> a qda_iommu_device, registers it with the memory manager, and stores
>> it as the CB device's driver data so that qda_destroy_cb_device() can
>> retrieve and unregister it during teardown.
>>
>> Assisted-by: Claude:claude-4-6-sonnet
>> Signed-off-by: Ekansh Gupta <[email protected]>
>> ---
>> drivers/accel/qda/Makefile | 1 +
>> drivers/accel/qda/qda_cb.c | 47 ++++++++++++++
>> drivers/accel/qda/qda_drv.c | 34 ++++++++++
>> drivers/accel/qda/qda_drv.h | 5 ++
>> drivers/accel/qda/qda_memory_manager.c | 111
>> +++++++++++++++++++++++++++++++++
>> drivers/accel/qda/qda_memory_manager.h | 49 +++++++++++++++
>> drivers/accel/qda/qda_rpmsg.c | 7 +++
>> 7 files changed, 254 insertions(+)
>>
>> @@ -61,14 +62,20 @@ static int qda_rpmsg_probe(struct rpmsg_device *rpdev)
>> }
>> qdev->dsp_name = label;
>>
>> + ret = qda_init_device(qdev);
>> + if (ret)
>> + return ret;
>> +
>> ret = qda_cb_populate(qdev, rpdev->dev.of_node);
>> if (ret) {
>> dev_err(qdev->dev, "Failed to populate child devices: %d\n",
>> ret);
>> + qda_deinit_device(qdev);
>> return ret;
>> }
>>
>> ret = qda_register_device(qdev);
>> if (ret) {
>> + qda_deinit_device(qdev);
>> qda_cb_unpopulate(qdev);
>
> No, this is not how you unwind in the error case in the kernel. Follow
> the established patterns.
Okay, I see your point and the same you highlighted on previous patch.
I'll update this.>
>> return ret;
>> }
>>
>> --
>> 2.34.1
>>
>>
>