diff --git a/drivers/mailbox/imx-mailbox.c b/drivers/mailbox/imx-mailbox.c index 2a8c3e8aefb5..1ed86994859e 100644 --- a/drivers/mailbox/imx-mailbox.c +++ b/drivers/mailbox/imx-mailbox.c @@ -279,7 +279,7 @@ static int imx_mu_seco_rxdb(struct imx_mu_priv *priv, struct imx_mu_con_priv *cp struct imx_sc_rpc_msg_max msg; u32 *data = (u32 *)&msg; u32 byte_size; - int err; + int err = 0; int i; dev_dbg(priv->dev, "Receiving message\n"); @@ -291,7 +291,8 @@ static int imx_mu_seco_rxdb(struct imx_mu_priv *priv, struct imx_mu_con_priv *cp if (byte_size > sizeof(msg)) { dev_err(priv->dev, "Exceed max msg size (%li) on RX, got: %i\n", sizeof(msg), byte_size); - return -EINVAL; + err = -EINVAL; + goto error; } /* Read message waiting they are written */ @@ -300,7 +301,7 @@ static int imx_mu_seco_rxdb(struct imx_mu_priv *priv, struct imx_mu_con_priv *cp err = imx_mu_rx_waiting_read(priv, i, data++); if (err) { dev_err(priv->dev, "Timeout rx %d\n", i); - return err; + goto error; } } @@ -314,7 +315,13 @@ static int imx_mu_seco_rxdb(struct imx_mu_priv *priv, struct imx_mu_con_priv *cp dev_dbg(priv->dev, "Sending message to client\n"); mbox_chan_received_data(cp->chan, (void *)&msg); - return 0; + goto exit; + +error: + mbox_chan_received_data(cp->chan, ERR_PTR(err)); + +exit: + return err; } static void imx_mu_txdb_tasklet(unsigned long data)