firmware: arm_scpi: reinit completion instead of full init_completion()
authorAlexey Klimov <alexey.klimov@arm.com>
Wed, 29 Mar 2017 18:16:27 +0000 (19:16 +0100)
committerSudeep Holla <sudeep.holla@arm.com>
Fri, 31 Mar 2017 10:00:23 +0000 (11:00 +0100)
Instead of performing full initialization of the completion structure
on each transfer in scpi_send_message(), we initialize it at boot time
(more specifically, in the relevant probe() function) and use
reinit_completion() to reset ->done counter on each message transfer.

Signed-off-by: Alexey Klimov <alexey.klimov@arm.com>
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
drivers/firmware/arm_scpi.c

index 9ad0b19..f6cfc31 100644 (file)
@@ -538,7 +538,7 @@ static int scpi_send_message(u8 idx, void *tx_buf, unsigned int tx_len,
        msg->tx_len = tx_len;
        msg->rx_buf = rx_buf;
        msg->rx_len = rx_len;
-       init_completion(&msg->done);
+       reinit_completion(&msg->done);
 
        ret = mbox_send_message(scpi_chan->chan, msg);
        if (ret < 0 || !rx_buf)
@@ -872,8 +872,11 @@ static int scpi_alloc_xfer_list(struct device *dev, struct scpi_chan *ch)
                return -ENOMEM;
 
        ch->xfers = xfers;
-       for (i = 0; i < MAX_SCPI_XFERS; i++, xfers++)
+       for (i = 0; i < MAX_SCPI_XFERS; i++, xfers++) {
+               init_completion(&xfers->done);
                list_add_tail(&xfers->node, &ch->xfers_list);
+       }
+
        return 0;
 }