The reference taken on the parent's device node with of_node_get() is normally dropped by i3c_masterdev_release() once the master device is unregistered. When i3c_master_rpm_get() fails, the function returns before device_initialize(), so put_device() is never called and the node reference is leaked. Release the device node reference on the runtime PM failure path. Fixes: 3a379bbcea0a ("i3c: Add core I3C infrastructure") Cc: stable@vger.kernel.org Signed-off-by: Wentao Liang --- drivers/i3c/master.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c index 5cd4e5da2233..23f490a00591 100644 --- a/drivers/i3c/master.c +++ b/drivers/i3c/master.c @@ -3033,8 +3033,10 @@ int i3c_master_register(struct i3c_master_controller *master, INIT_LIST_HEAD(&master->boardinfo.i3c); ret = i3c_master_rpm_get(master); - if (ret) + if (ret) { + of_node_put(master->dev.of_node); return ret; + } device_initialize(&master->dev); -- 2.34.1