Commit 6bbdb46c authored by Qinglang Miao's avatar Qinglang Miao Committed by Sudeep Holla
Browse files

firmware: arm_scmi: Fix missing destroy_workqueue()

destroy_workqueue is required before the return from scmi_notification_init
in case devm_kcalloc fails to allocate registered_protocols. Fix this by
simply moving registered_protocols allocation before alloc_workqueue.

Link: https://lore.kernel.org/r/20201110074221.41235-1-miaoqinglang@huawei.com


Fixes: bd31b249 ("firmware: arm_scmi: Add notification dispatch and delivery")
Suggested-by: default avatarCristian Marussi <cristian.marussi@arm.com>
Reviewed-by: default avatarCristian Marussi <cristian.marussi@arm.com>
Signed-off-by: default avatarQinglang Miao <miaoqinglang@huawei.com>
Signed-off-by: default avatarSudeep Holla <sudeep.holla@arm.com>
parent 3cea11cd
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -1474,17 +1474,17 @@ int scmi_notification_init(struct scmi_handle *handle)
	ni->gid = gid;
	ni->handle = handle;

	ni->registered_protocols = devm_kcalloc(handle->dev, SCMI_MAX_PROTO,
						sizeof(char *), GFP_KERNEL);
	if (!ni->registered_protocols)
		goto err;

	ni->notify_wq = alloc_workqueue(dev_name(handle->dev),
					WQ_UNBOUND | WQ_FREEZABLE | WQ_SYSFS,
					0);
	if (!ni->notify_wq)
		goto err;

	ni->registered_protocols = devm_kcalloc(handle->dev, SCMI_MAX_PROTO,
						sizeof(char *), GFP_KERNEL);
	if (!ni->registered_protocols)
		goto err;

	mutex_init(&ni->pending_mtx);
	hash_init(ni->pending_events_handlers);