From: Shai Brandes <shaib...@amazon.com>

Currently admin_queue->stats.aborted_cmd counter is incremented if an
admin command status is ENA_CMD_ABORTED and only if the admin queue is
in polling mode.
This commit fixes handling the case of incrementing
admin_queue->stats.aborted_cmd if the admin queue is in interrupt
mode as well.
Also added a verification that the command status is a valid
completion status which is currently verified only if the admin queue
is in polling mode.

Signed-off-by: Shai Brandes <shaib...@amazon.com>
Reviewed-by: Amit Bernstein <amitb...@amazon.com>
---
 drivers/net/ena/hal/ena_com.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/drivers/net/ena/hal/ena_com.c b/drivers/net/ena/hal/ena_com.c
index 053e095585..b98540ba63 100644
--- a/drivers/net/ena/hal/ena_com.c
+++ b/drivers/net/ena/hal/ena_com.c
@@ -824,8 +824,19 @@ static int 
ena_com_wait_and_process_admin_cq_interrupts(struct ena_comp_ctx *com
                        ret = ENA_COM_TIMER_EXPIRED;
                        goto err;
                }
+       } else if (unlikely(comp_ctx->status == ENA_CMD_ABORTED)) {
+               ena_trc_err(admin_queue->ena_dev, "Command was aborted\n");
+               ENA_SPINLOCK_LOCK(admin_queue->q_lock, flags);
+               admin_queue->stats.aborted_cmd++;
+               ENA_SPINLOCK_UNLOCK(admin_queue->q_lock, flags);
+               ret = ENA_COM_NO_DEVICE;
+               goto err;
        }
 
+       ENA_WARN(comp_ctx->status != ENA_CMD_COMPLETED,
+                admin_queue->ena_dev, "Invalid comp status %d\n",
+                comp_ctx->status);
+
        ret = ena_com_comp_status_to_errno(admin_queue, comp_ctx->comp_status);
 err:
        comp_ctxt_release(admin_queue, comp_ctx);
-- 
2.17.1

Reply via email to