From patchwork Wed Jan 24 21:00:19 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Github ODP bot X-Patchwork-Id: 125713 Delivered-To: patch@linaro.org Received: by 10.46.66.141 with SMTP id h13csp663819ljf; Wed, 24 Jan 2018 13:01:07 -0800 (PST) X-Google-Smtp-Source: AH8x224Z7v6ZsGIqIsg9X/kQgIM+yEGYP4Xab6GPUGVxjX+J+eD7q/7ZpyAbCwYsT6+kbHHampT0 X-Received: by 10.200.45.109 with SMTP id o42mr11652478qta.263.1516827666905; Wed, 24 Jan 2018 13:01:06 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1516827666; cv=none; d=google.com; s=arc-20160816; b=h0WizqxQLZkreC+eln3JGpFXsDOFV4J8ix9eMqPjJ2Gab5M1m9tvN3iTOIjZUU0OQx tVZpLqt87UcGtdfRsb/6A7W9/IkNBKDj2eCvUnrZ4xoRW2zk9WwuRUaRyZOmRPBPUbL+ wKGo88wHyNAh307A2nBRkRbby1eoabWJcTMAYeuLsSMJtGmC0QN0jQ9pVXwXCSj7puQX 0OiSllDKgWl6OfhBAc2m/Qg/3xhvtoa5S8XgjeSiZ+DMR3cKZBtgasqoL5rv7JHzR4wD x1pPmswnS+f6TI7vLOdCmRWMsyZPK8CSlgD0OE4AnBYGoqEAIfKOsP3xC3shKEgWy+NZ SwZg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:github-pr-num :references:in-reply-to:message-id:date:to:from:delivered-to :arc-authentication-results; bh=arA5kPXbSeGSEZPLdfEKktcnx5UqbIAiHb8fWTPuCmg=; b=vRjQh+p+fsoaLOtDc5sxpRQIB4LDtU23m6SDS7aCLwxuN5K5f2VdokR6deKyX+WRXZ b4CyngmGucJ04faTo3z4+Lclgh6r12bRHZNK1luetANQAX9+cNhRqsC6vifufgdbzOxO uT5Qz+t/MYpOgYk69ko/KOWbLK9zdEJQG8+eAVrvBNCALtGyRAS1d29YUiDxk8PrYu5X mozuED7pyjLsnXBdHjZszRVXTs7tPYVkBFDSzIlGIZLf86YaRPy/G5UVxA90h8c/y17z F9/HApdIJOxl04YbYzJ05k8Mho2u6zUGz0EXTO7S5Cfl9maD2s0PEsk1HlMULip3xjdv fIyA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of lng-odp-bounces@lists.linaro.org designates 54.197.127.237 as permitted sender) smtp.mailfrom=lng-odp-bounces@lists.linaro.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=yandex.ru Return-Path: Received: from lists.linaro.org (ec2-54-197-127-237.compute-1.amazonaws.com. [54.197.127.237]) by mx.google.com with ESMTP id v185si1024476qkc.465.2018.01.24.13.01.06; Wed, 24 Jan 2018 13:01:06 -0800 (PST) Received-SPF: pass (google.com: domain of lng-odp-bounces@lists.linaro.org designates 54.197.127.237 as permitted sender) client-ip=54.197.127.237; Authentication-Results: mx.google.com; spf=pass (google.com: domain of lng-odp-bounces@lists.linaro.org designates 54.197.127.237 as permitted sender) smtp.mailfrom=lng-odp-bounces@lists.linaro.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=yandex.ru Received: by lists.linaro.org (Postfix, from userid 109) id 8A92661750; Wed, 24 Jan 2018 21:01:06 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on ip-10-142-244-252 X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL autolearn=disabled version=3.4.0 Received: from [127.0.0.1] (localhost [127.0.0.1]) by lists.linaro.org (Postfix) with ESMTP id 98CCB61753; Wed, 24 Jan 2018 21:00:30 +0000 (UTC) X-Original-To: lng-odp@lists.linaro.org Delivered-To: lng-odp@lists.linaro.org Received: by lists.linaro.org (Postfix, from userid 109) id A0890609A8; Wed, 24 Jan 2018 21:00:26 +0000 (UTC) Received: from forward105j.mail.yandex.net (forward105j.mail.yandex.net [5.45.198.248]) by lists.linaro.org (Postfix) with ESMTPS id B75E560929 for ; Wed, 24 Jan 2018 21:00:24 +0000 (UTC) Received: from mxback17j.mail.yandex.net (mxback17j.mail.yandex.net [IPv6:2a02:6b8:0:1619::93]) by forward105j.mail.yandex.net (Yandex) with ESMTP id 6836E183528 for ; Thu, 25 Jan 2018 00:00:23 +0300 (MSK) Received: from smtp2o.mail.yandex.net (smtp2o.mail.yandex.net [2a02:6b8:0:1a2d::26]) by mxback17j.mail.yandex.net (nwsmtp/Yandex) with ESMTP id mu0N9Vyxd9-0Nh4qU2I; Thu, 25 Jan 2018 00:00:23 +0300 Received: by smtp2o.mail.yandex.net (nwsmtp/Yandex) with ESMTPSA id cBLphPGQu0-0MWWDo56; Thu, 25 Jan 2018 00:00:22 +0300 (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (Client certificate not present) From: Github ODP bot To: lng-odp@lists.linaro.org Date: Thu, 25 Jan 2018 00:00:19 +0300 Message-Id: <1516827620-4105-3-git-send-email-odpbot@yandex.ru> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1516827620-4105-1-git-send-email-odpbot@yandex.ru> References: <1516827620-4105-1-git-send-email-odpbot@yandex.ru> Github-pr-num: 410 Subject: [lng-odp] [PATCH API-NEXT v5 2/3] linux-generic: pktio: drop support for indefinite waits in recv_tmo X-BeenThere: lng-odp@lists.linaro.org X-Mailman-Version: 2.1.16 Precedence: list List-Id: "The OpenDataPlane \(ODP\) List" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: lng-odp-bounces@lists.linaro.org Sender: "lng-odp" From: Bill Fischofer Drop support for the deprecated ODP_PKTIN_WAIT option on odp_pktin_recv_tmo() and odp_pktin_recv_mq_tmo() Signed-off-by: Bill Fischofer --- /** Email created from pull request 410 (Bill-Fischofer-Linaro:pktio-dropwait) ** https://github.com/Linaro/odp/pull/410 ** Patch: https://github.com/Linaro/odp/pull/410.patch ** Base sha: 44974a09b01c79adb9637a5dff38539598a76737 ** Merge commit sha: 13b0f1705d8327e73979c073c91b9b72984873fb **/ include/odp/api/abi-default/packet_io.h | 1 - platform/linux-generic/odp_packet_io.c | 73 ++++++++++++++--------------- platform/linux-generic/pktio/netmap.c | 6 +-- platform/linux-generic/pktio/pktio_common.c | 3 +- platform/linux-generic/pktio/socket.c | 6 +-- platform/linux-generic/pktio/socket_mmap.c | 6 +-- 6 files changed, 43 insertions(+), 52 deletions(-) diff --git a/include/odp/api/abi-default/packet_io.h b/include/odp/api/abi-default/packet_io.h index 4795f8fc3..7cd3edd75 100644 --- a/include/odp/api/abi-default/packet_io.h +++ b/include/odp/api/abi-default/packet_io.h @@ -46,7 +46,6 @@ typedef struct odp_pktout_queue_t { #define ODP_PKTIO_MACADDR_MAXSIZE 16 #define ODP_PKTIN_NO_WAIT 0 -#define ODP_PKTIN_WAIT UINT64_MAX /** * @} diff --git a/platform/linux-generic/odp_packet_io.c b/platform/linux-generic/odp_packet_io.c index 095f6be12..3ad366fbb 100644 --- a/platform/linux-generic/odp_packet_io.c +++ b/platform/linux-generic/odp_packet_io.c @@ -1699,33 +1699,31 @@ int odp_pktin_recv_tmo(odp_pktin_queue_t queue, odp_packet_t packets[], int num, while (1) { ret = entry->s.ops->recv(entry, queue.index, packets, num); - if (ret != 0) + if (ret != 0 || wait == 0) return ret; - if (wait == 0) - return 0; - - if (wait != ODP_PKTIN_WAIT) { - /* Avoid unnecessary system calls. Record the start time - * only when needed and after the first call to recv. */ - if (odp_unlikely(!started)) { - odp_time_t t; - - t = odp_time_local_from_ns(wait * 1000); - started = 1; - t1 = odp_time_sum(odp_time_local(), t); - } + /* Avoid unnecessary system calls. Record the start time + * only when needed and after the first call to recv. */ + if (odp_unlikely(!started)) { + odp_time_t t; + + /* Avoid overflow issues for large wait times */ + if (wait > odp_pktin_wait_time(UINT64_MAX / 2)) + wait /= 2; + t = odp_time_local_from_ns(wait * 1000); + started = 1; + t1 = odp_time_sum(odp_time_local(), t); + } - /* Check every SLEEP_CHECK rounds if total wait time - * has been exceeded. */ - if ((++sleep_round & (SLEEP_CHECK - 1)) == 0) { - t2 = odp_time_local(); + /* Check every SLEEP_CHECK rounds if total wait time + * has been exceeded. */ + if ((++sleep_round & (SLEEP_CHECK - 1)) == 0) { + t2 = odp_time_local(); - if (odp_time_cmp(t2, t1) > 0) - return 0; - } - wait = wait > SLEEP_USEC ? wait - SLEEP_USEC : 0; + if (odp_time_cmp(t2, t1) > 0) + return 0; } + wait = wait > SLEEP_USEC ? wait - SLEEP_USEC : 0; nanosleep(&ts, NULL); } @@ -1779,25 +1777,26 @@ int odp_pktin_recv_mq_tmo(const odp_pktin_queue_t queues[], unsigned num_q, if (wait == 0) return 0; - if (wait != ODP_PKTIN_WAIT) { - if (odp_unlikely(!started)) { - odp_time_t t; + if (odp_unlikely(!started)) { + odp_time_t t; - t = odp_time_local_from_ns(wait * 1000); - started = 1; - t1 = odp_time_sum(odp_time_local(), t); - } + /* Avoid overflow issues for large wait times */ + if (wait > odp_pktin_wait_time(UINT64_MAX / 2)) + wait /= 2; + t = odp_time_local_from_ns(wait * 1000); + started = 1; + t1 = odp_time_sum(odp_time_local(), t); + } - /* Check every SLEEP_CHECK rounds if total wait time - * has been exceeded. */ - if ((++sleep_round & (SLEEP_CHECK - 1)) == 0) { - t2 = odp_time_local(); + /* Check every SLEEP_CHECK rounds if total wait time + * has been exceeded. */ + if ((++sleep_round & (SLEEP_CHECK - 1)) == 0) { + t2 = odp_time_local(); - if (odp_time_cmp(t2, t1) > 0) - return 0; - } - wait = wait > SLEEP_USEC ? wait - SLEEP_USEC : 0; + if (odp_time_cmp(t2, t1) > 0) + return 0; } + wait = wait > SLEEP_USEC ? wait - SLEEP_USEC : 0; nanosleep(&ts, NULL); } diff --git a/platform/linux-generic/pktio/netmap.c b/platform/linux-generic/pktio/netmap.c index 7200ceea8..bbd0d6cdf 100644 --- a/platform/linux-generic/pktio/netmap.c +++ b/platform/linux-generic/pktio/netmap.c @@ -834,8 +834,7 @@ static int netmap_recv_tmo(pktio_entry_t *pktio_entry, int index, FD_ZERO(&readfds); maxfd = netmap_fd_set(pktio_entry, index, &readfds); - if (select(maxfd + 1, &readfds, NULL, NULL, - usecs == ODP_PKTIN_WAIT ? NULL : &timeout) == 0) + if (select(maxfd + 1, &readfds, NULL, NULL, &timeout) == 0) return 0; return netmap_recv(pktio_entry, index, pkt_table, num); @@ -872,8 +871,7 @@ static int netmap_recv_mq_tmo(pktio_entry_t *pktio_entry[], int index[], timeout.tv_sec = usecs / (1000 * 1000); timeout.tv_usec = usecs - timeout.tv_sec * (1000ULL * 1000ULL); - if (select(maxfd + 1, &readfds, NULL, NULL, - usecs == ODP_PKTIN_WAIT ? NULL : &timeout) == 0) + if (select(maxfd + 1, &readfds, NULL, NULL, &timeout) == 0) return 0; for (i = 0; i < num_q; i++) { diff --git a/platform/linux-generic/pktio/pktio_common.c b/platform/linux-generic/pktio/pktio_common.c index f6fb4a73d..c7a1c3ab9 100644 --- a/platform/linux-generic/pktio/pktio_common.c +++ b/platform/linux-generic/pktio/pktio_common.c @@ -107,8 +107,7 @@ static int sock_recv_mq_tmo_select(pktio_entry_t * const *entry, timeout.tv_sec = usecs / (1000 * 1000); timeout.tv_usec = usecs - timeout.tv_sec * (1000ULL * 1000ULL); - if (select(maxfd + 1, readfds, NULL, NULL, - usecs == ODP_PKTIN_WAIT ? NULL : &timeout) == 0) + if (select(maxfd + 1, readfds, NULL, NULL, &timeout) == 0) return 0; for (i = 0; i < num_q; i++) { diff --git a/platform/linux-generic/pktio/socket.c b/platform/linux-generic/pktio/socket.c index 2d0296b8a..5abf05e34 100644 --- a/platform/linux-generic/pktio/socket.c +++ b/platform/linux-generic/pktio/socket.c @@ -726,8 +726,7 @@ static int sock_recv_tmo(pktio_entry_t *pktio_entry, int index, FD_ZERO(&readfds); maxfd = sock_fd_set(pktio_entry, index, &readfds); - if (select(maxfd + 1, &readfds, NULL, NULL, - usecs == ODP_PKTIN_WAIT ? NULL : &timeout) == 0) + if (select(maxfd + 1, &readfds, NULL, NULL, &timeout) == 0) return 0; return sock_mmsg_recv(pktio_entry, index, pkt_table, num); @@ -764,8 +763,7 @@ static int sock_recv_mq_tmo(pktio_entry_t *pktio_entry[], int index[], maxfd = maxfd2; } - if (select(maxfd + 1, &readfds, NULL, NULL, - usecs == ODP_PKTIN_WAIT ? NULL : &timeout) == 0) + if (select(maxfd + 1, &readfds, NULL, NULL, &timeout) == 0) return 0; for (i = 0; i < num_q; i++) { diff --git a/platform/linux-generic/pktio/socket_mmap.c b/platform/linux-generic/pktio/socket_mmap.c index f16670960..04c44bc85 100644 --- a/platform/linux-generic/pktio/socket_mmap.c +++ b/platform/linux-generic/pktio/socket_mmap.c @@ -692,8 +692,7 @@ static int sock_mmap_recv_tmo(pktio_entry_t *pktio_entry, int index, FD_ZERO(&readfds); maxfd = sock_mmap_fd_set(pktio_entry, index, &readfds); - if (select(maxfd + 1, &readfds, NULL, NULL, - usecs == ODP_PKTIN_WAIT ? NULL : &timeout) == 0) + if (select(maxfd + 1, &readfds, NULL, NULL, &timeout) == 0) return 0; return sock_mmap_recv(pktio_entry, index, pkt_table, num); @@ -730,8 +729,7 @@ static int sock_mmap_recv_mq_tmo(pktio_entry_t *pktio_entry[], int index[], timeout.tv_sec = usecs / (1000 * 1000); timeout.tv_usec = usecs - timeout.tv_sec * (1000ULL * 1000ULL); - if (select(maxfd + 1, &readfds, NULL, NULL, - usecs == ODP_PKTIN_WAIT ? NULL : &timeout) == 0) + if (select(maxfd + 1, &readfds, NULL, NULL, &timeout) == 0) return 0; for (i = 0; i < num_q; i++) {