net: ena: optimise calculations for CQ doorbell

This patch initially checks if CQ doorbell
is needed before proceeding with the calculations.

Signed-off-by: Igor Chauskin <igorch@amazon.com>
Signed-off-by: Sameeh Jubran <sameehj@amazon.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Sameeh Jubran 2019-06-03 17:43:27 +03:00 committed by David S. Miller
parent cdf449eccc
commit d91860989d
1 changed files with 10 additions and 8 deletions

View File

@ -195,15 +195,17 @@ static inline int ena_com_update_dev_comp_head(struct ena_com_io_cq *io_cq)
u16 unreported_comp, head; u16 unreported_comp, head;
bool need_update; bool need_update;
head = io_cq->head; if (unlikely(io_cq->cq_head_db_reg)) {
unreported_comp = head - io_cq->last_head_update; head = io_cq->head;
need_update = unreported_comp > (io_cq->q_depth / ENA_COMP_HEAD_THRESH); unreported_comp = head - io_cq->last_head_update;
need_update = unreported_comp > (io_cq->q_depth / ENA_COMP_HEAD_THRESH);
if (io_cq->cq_head_db_reg && need_update) { if (unlikely(need_update)) {
pr_debug("Write completion queue doorbell for queue %d: head: %d\n", pr_debug("Write completion queue doorbell for queue %d: head: %d\n",
io_cq->qid, head); io_cq->qid, head);
writel(head, io_cq->cq_head_db_reg); writel(head, io_cq->cq_head_db_reg);
io_cq->last_head_update = head; io_cq->last_head_update = head;
}
} }
return 0; return 0;