Skip to content

Commit

Permalink
net: ena: improve ENA driver boot time.
Browse files Browse the repository at this point in the history
The ena admin commands timeout is in resolutions of 100ms.
Therefore, When the driver works in polling mode, it sleeps for 100ms
each time. The overall boot time of the ENA driver is ~1.5 sec.
To reduce the boot time, This change modifies the granularity of
the sleeps to 5ms.
This change improves the boot time to 220ms.

Signed-off-by: Netanel Belgazal <netanel@amazon.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Netanel Belgazal authored and David S. Miller committed Oct 19, 2017
1 parent c057c68 commit 88aef2f
Showing 1 changed file with 8 additions and 4 deletions.
12 changes: 8 additions & 4 deletions drivers/net/ethernet/amazon/ena/ena_com.c
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@

#define ENA_REGS_ADMIN_INTR_MASK 1

#define ENA_POLL_MS 5

/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************/
Expand Down Expand Up @@ -533,7 +535,7 @@ static int ena_com_wait_and_process_admin_cq_polling(struct ena_comp_ctx *comp_c
goto err;
}

msleep(100);
msleep(ENA_POLL_MS);
}

if (unlikely(comp_ctx->status == ENA_CMD_ABORTED)) {
Expand Down Expand Up @@ -746,6 +748,9 @@ static int wait_for_reset_state(struct ena_com_dev *ena_dev, u32 timeout,
{
u32 val, i;

/* Convert timeout from resolution of 100ms to ENA_POLL_MS */
timeout = (timeout * 100) / ENA_POLL_MS;

for (i = 0; i < timeout; i++) {
val = ena_com_reg_bar_read32(ena_dev, ENA_REGS_DEV_STS_OFF);

Expand All @@ -758,8 +763,7 @@ static int wait_for_reset_state(struct ena_com_dev *ena_dev, u32 timeout,
exp_state)
return 0;

/* The resolution of the timeout is 100ms */
msleep(100);
msleep(ENA_POLL_MS);
}

return -ETIME;
Expand Down Expand Up @@ -1253,7 +1257,7 @@ void ena_com_wait_for_abort_completion(struct ena_com_dev *ena_dev)
spin_lock_irqsave(&admin_queue->q_lock, flags);
while (atomic_read(&admin_queue->outstanding_cmds) != 0) {
spin_unlock_irqrestore(&admin_queue->q_lock, flags);
msleep(20);
msleep(ENA_POLL_MS);
spin_lock_irqsave(&admin_queue->q_lock, flags);
}
spin_unlock_irqrestore(&admin_queue->q_lock, flags);
Expand Down

0 comments on commit 88aef2f

Please sign in to comment.