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. > return ret; > } > > -- > 2.34.1 > > -- With best wishes Dmitry
