From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by dpdk.space (Postfix) with ESMTP id CBDE2A045E for ; Wed, 29 May 2019 23:01:55 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 5B32E37A2; Wed, 29 May 2019 23:01:53 +0200 (CEST) Received: from rcdn-iport-6.cisco.com (rcdn-iport-6.cisco.com [173.37.86.77]) by dpdk.org (Postfix) with ESMTP id 443F42AB for ; Wed, 29 May 2019 23:01:51 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=cisco.com; i=@cisco.com; l=3034; q=dns/txt; s=iport; t=1559163712; x=1560373312; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=0TT8kKnJWJeKGosAQwK0eh9KVXBLQMabWL7OpvgjD9E=; b=e4mnL2j05T6UbF/rUQBELElAVjVZiXp6VYWgHsNo+S1tSBBTKhoq/6RQ HBzeP8lVUALHOxO1rlCabCeUrgm3jyHDCr14pyws0K/C7QWWVBxXtFzZw +O0fhABLX+/klVIdEMFhDaixN2xqeI6ZU5NEGuM8PubBni14aJ91Rdgh1 o=; X-IronPort-AV: E=Sophos;i="5.60,527,1549929600"; d="scan'208";a="566966380" Received: from rcdn-core-2.cisco.com ([173.37.93.153]) by rcdn-iport-6.cisco.com with ESMTP/TLS/DHE-RSA-SEED-SHA; 29 May 2019 21:01:50 +0000 Received: from cpp-rtpbld-31.cisco.com (cpp-rtpbld-31.cisco.com [172.18.5.114]) by rcdn-core-2.cisco.com (8.15.2/8.15.2) with ESMTP id x4TL1oeU012780; Wed, 29 May 2019 21:01:51 GMT Received: by cpp-rtpbld-31.cisco.com (Postfix, from userid 140087) id C680BB0B; Wed, 29 May 2019 17:01:50 -0400 (EDT) From: David Harton To: dev@dpdk.org, mw@semihalf.com, mk@semihalf.com, gtzalik@amazon.com, evgenys@amazon.com Cc: David Harton Date: Wed, 29 May 2019 17:01:39 -0400 Message-Id: <20190529210139.26766-1-dharton@cisco.com> X-Mailer: git-send-email 2.19.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Outbound-SMTP-Client: 172.18.5.114, cpp-rtpbld-31.cisco.com X-Outbound-Node: rcdn-core-2.cisco.com Subject: [dpdk-dev] [PATCH] net/ena: Fix admin cq polling for 32-bit apps X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Recent modifications to admin command queue polling logic did not support 32-bit applications. Updated the driver to work for 32 or 64 bit applications as well as avoiding roll-over possibility. Fixes: 3adcba9a89 ("net/ena: update HAL to the newer version") Signed-off-by: David Harton --- drivers/net/ena/base/ena_com.c | 10 +++++++--- drivers/net/ena/base/ena_plat_dpdk.h | 6 +----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/net/ena/base/ena_com.c b/drivers/net/ena/base/ena_com.c index b688067f7..b96adde3c 100644 --- a/drivers/net/ena/base/ena_com.c +++ b/drivers/net/ena/base/ena_com.c @@ -547,10 +547,13 @@ static int ena_com_wait_and_process_admin_cq_polling(struct ena_comp_ctx *comp_c struct ena_com_admin_queue *admin_queue) { unsigned long flags = 0; - unsigned long timeout; + u32 timeout_ms; int ret; - timeout = ENA_GET_SYSTEM_TIMEOUT(admin_queue->completion_timeout); + /* Calculate ms granularity timeout from us completion_timeout + * making sure we retry once if we have at least 1ms + */ + timeout_ms = (admin_queue->completion_timeout / 1000) + (ENA_POLL_MS - 1); while (1) { ENA_SPINLOCK_LOCK(admin_queue->q_lock, flags); @@ -560,7 +563,7 @@ static int ena_com_wait_and_process_admin_cq_polling(struct ena_comp_ctx *comp_c if (comp_ctx->status != ENA_CMD_SUBMITTED) break; - if (ENA_TIME_EXPIRE(timeout)) { + if (timeout_ms < ENA_POLL_MS) { ena_trc_err("Wait for completion (polling) timeout\n"); /* ENA didn't have any completion */ ENA_SPINLOCK_LOCK(admin_queue->q_lock, flags); @@ -573,6 +576,7 @@ static int ena_com_wait_and_process_admin_cq_polling(struct ena_comp_ctx *comp_c } ENA_MSLEEP(ENA_POLL_MS); + timeout_ms -= ENA_POLL_MS; } if (unlikely(comp_ctx->status == ENA_CMD_ABORTED)) { diff --git a/drivers/net/ena/base/ena_plat_dpdk.h b/drivers/net/ena/base/ena_plat_dpdk.h index 902d91efb..0cb837e4f 100644 --- a/drivers/net/ena/base/ena_plat_dpdk.h +++ b/drivers/net/ena/base/ena_plat_dpdk.h @@ -178,7 +178,7 @@ do { \ do { \ struct timespec wait; \ struct timeval now; \ - unsigned long timeout_us; \ + uint64_t timeout_us; \ gettimeofday(&now, NULL); \ wait.tv_sec = now.tv_sec + timeout / 1000000UL; \ timeout_us = timeout % 1000000UL; \ @@ -196,10 +196,6 @@ do { \ #define ena_wait_event_t ena_wait_queue_t #define ENA_MIGHT_SLEEP() -#define ENA_TIME_EXPIRE(timeout) (timeout < rte_get_timer_cycles()) -#define ENA_GET_SYSTEM_TIMEOUT(timeout_us) \ - (timeout_us * rte_get_timer_hz() / 1000000 + rte_get_timer_cycles()) - /* * Each rte_memzone should have unique name. * To satisfy it, count number of allocations and add it to name. -- 2.19.1