Move the command queue tail pointer when an error is
detected. Always return the error.

Signed-off-by: Gary R Hook <gary.h...@amd.com>
---
 drivers/crypto/ccp/ccp-dev-v5.c |    7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/crypto/ccp/ccp-dev-v5.c b/drivers/crypto/ccp/ccp-dev-v5.c
index 5fb6c8c..d9e1876 100644
--- a/drivers/crypto/ccp/ccp-dev-v5.c
+++ b/drivers/crypto/ccp/ccp-dev-v5.c
@@ -250,17 +250,20 @@ static int ccp5_do_cmd(struct ccp5_desc *desc,
                ret = wait_event_interruptible(cmd_q->int_queue,
                                               cmd_q->int_rcvd);
                if (ret || cmd_q->cmd_error) {
+                       /* Log the error and flush the queue by
+                        * moving the head pointer
+                        */
                        if (cmd_q->cmd_error)
                                ccp_log_error(cmd_q->ccp,
                                              cmd_q->cmd_error);
-                       /* A version 5 device doesn't use Job IDs... */
+                       iowrite32(tail, cmd_q->reg_head_lo);
                        if (!ret)
                                ret = -EIO;
                }
                cmd_q->int_rcvd = 0;
        }
 
-       return 0;
+       return ret;
 }
 
 static int ccp5_perform_aes(struct ccp_op *op)

Reply via email to