From: Cristian Marussi Date: Sun, 6 Jun 2021 22:12:24 +0000 (+0100) Subject: firmware: arm_scmi: Move reinit_completion from scmi_xfer_get to do_xfer X-Git-Tag: v5.14-rc1~21^2~14^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e30d91d4ffda0b30839bb5e7d2a123654de95045;p=thirdparty%2Fkernel%2Flinux.git firmware: arm_scmi: Move reinit_completion from scmi_xfer_get to do_xfer Re-using timed out xfers in a loop can lead to issue if completion was not properly reinitialized. Move reinit_completion from scmi_xfer_get to do_xfer to avoid the issue. Link: https://lore.kernel.org/r/20210606221232.33768-3-cristian.marussi@arm.com Signed-off-by: Cristian Marussi [sudeep.holla: moved reinit_completion instead of adding another one] Signed-off-by: Sudeep Holla --- diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi/driver.c index 74986bf96656f..80010d3f59751 100644 --- a/drivers/firmware/arm_scmi/driver.c +++ b/drivers/firmware/arm_scmi/driver.c @@ -241,7 +241,6 @@ static struct scmi_xfer *scmi_xfer_get(const struct scmi_handle *handle, xfer = &minfo->xfer_block[xfer_id]; xfer->hdr.seq = xfer_id; - reinit_completion(&xfer->done); xfer->transfer_id = atomic_inc_return(&transfer_last_id); return xfer; @@ -438,6 +437,7 @@ static int do_xfer(const struct scmi_protocol_handle *ph, * the scmi_xfer structure. */ xfer->hdr.protocol_id = pi->proto->id; + reinit_completion(&xfer->done); cinfo = idr_find(&info->tx_idr, xfer->hdr.protocol_id); if (unlikely(!cinfo))