From patchwork Tue Feb 3 14:53:07 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ola Liljedahl X-Patchwork-Id: 44232 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-we0-f199.google.com (mail-we0-f199.google.com [74.125.82.199]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id A613A2034D for ; Tue, 3 Feb 2015 14:54:06 +0000 (UTC) Received: by mail-we0-f199.google.com with SMTP id u56sf21269042wes.2 for ; Tue, 03 Feb 2015 06:54:05 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:delivered-to:from:to:date:message-id:in-reply-to :references:subject:precedence:list-id:list-unsubscribe:list-archive :list-post:list-help:list-subscribe:mime-version:content-type :content-transfer-encoding:errors-to:sender:x-original-sender :x-original-authentication-results:mailing-list; bh=ED29IKmBYxtZgnlPUQSJ7HwP/f7m9xdnaagc0cpL2B4=; b=GFdRBeormbQSrOuxHNjpT1pPJ3JHMEQm9sJev/nH6qTcAeQJVEJ7GgQ9hSovRl5M8d SZCMDtRZA0pOJ7RQJFbfCziaSh0JtCoL3zhlkmDJnswcEtCmxVPk09J9O/sQUERnsDzb jBMZQf4qMXWqkOlw5uNewMG9CosntM/83sOg75D57tiswnyRusWSlF0emSy3hbLUkLC2 F+A0j5EbgycplgxFvt92+L/o1XK4so7libsnvkTVeQBQm2Q+TjsR5VKQ+1/Y9Zr6femH FSKw4bCtNCzG2VVpQGJe/z0DIEUE3dRRXGECs0IsD9P+YWKd8MLx50u35lZ0qDX4atAd w1jA== X-Gm-Message-State: ALoCoQlTOjTbonh5joV/00ni9Ge5bEJFNtuqQQWfRfQGnXOn7h4fK5paG8TX+9ohNOdQn743RIaM X-Received: by 10.152.121.65 with SMTP id li1mr3177470lab.0.1422975245925; Tue, 03 Feb 2015 06:54:05 -0800 (PST) X-BeenThere: patchwork-forward@linaro.org Received: by 10.152.25.229 with SMTP id f5ls449947lag.15.gmail; Tue, 03 Feb 2015 06:54:05 -0800 (PST) X-Received: by 10.112.176.236 with SMTP id cl12mr5621541lbc.3.1422975245772; Tue, 03 Feb 2015 06:54:05 -0800 (PST) Received: from mail-la0-f54.google.com (mail-la0-f54.google.com. [209.85.215.54]) by mx.google.com with ESMTPS id zy1si19391785lbb.12.2015.02.03.06.54.05 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 03 Feb 2015 06:54:05 -0800 (PST) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.215.54 as permitted sender) client-ip=209.85.215.54; Received: by mail-la0-f54.google.com with SMTP id hv19so52302501lab.13 for ; Tue, 03 Feb 2015 06:54:05 -0800 (PST) X-Received: by 10.152.36.162 with SMTP id r2mr11788245laj.9.1422975245673; Tue, 03 Feb 2015 06:54:05 -0800 (PST) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.112.35.133 with SMTP id h5csp1987789lbj; Tue, 3 Feb 2015 06:54:04 -0800 (PST) X-Received: by 10.224.97.72 with SMTP id k8mr54017770qan.52.1422975240783; Tue, 03 Feb 2015 06:54:00 -0800 (PST) Received: from ip-10-35-177-41.ec2.internal (lists.linaro.org. [54.225.227.206]) by mx.google.com with ESMTPS id p3si28969375qga.128.2015.02.03.06.53.59 (version=TLSv1 cipher=RC4-SHA bits=128/128); Tue, 03 Feb 2015 06:54:00 -0800 (PST) Received-SPF: none (google.com: lng-odp-bounces@lists.linaro.org does not designate permitted sender hosts) client-ip=54.225.227.206; Received: from localhost ([127.0.0.1] helo=ip-10-35-177-41.ec2.internal) by ip-10-35-177-41.ec2.internal with esmtp (Exim 4.76) (envelope-from ) id 1YIerV-0001an-Oa; Tue, 03 Feb 2015 14:53:57 +0000 Received: from mail-la0-f43.google.com ([209.85.215.43]) by ip-10-35-177-41.ec2.internal with esmtp (Exim 4.76) (envelope-from ) id 1YIerB-0001Xp-D2 for lng-odp@lists.linaro.org; Tue, 03 Feb 2015 14:53:37 +0000 Received: by mail-la0-f43.google.com with SMTP id pn19so6443278lab.2 for ; Tue, 03 Feb 2015 06:53:31 -0800 (PST) X-Received: by 10.152.9.170 with SMTP id a10mr24756582lab.1.1422975211297; Tue, 03 Feb 2015 06:53:31 -0800 (PST) Received: from localhost.localdomain (78-82-118-111.tn.glocalnet.net. [78.82.118.111]) by mx.google.com with ESMTPSA id jf3sm5082572lbc.44.2015.02.03.06.53.29 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 03 Feb 2015 06:53:30 -0800 (PST) From: Ola Liljedahl To: lng-odp@lists.linaro.org Date: Tue, 3 Feb 2015 15:53:07 +0100 Message-Id: <1422975201-3364-5-git-send-email-ola.liljedahl@linaro.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1422975201-3364-1-git-send-email-ola.liljedahl@linaro.org> References: <1422975201-3364-1-git-send-email-ola.liljedahl@linaro.org> X-Topics: patch Subject: [lng-odp] [PATCHv4 04/18] api: odp_queue.h: odp_queue_enq_multi() returns partial success X-BeenThere: lng-odp@lists.linaro.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: , List-Help: , List-Subscribe: , MIME-Version: 1.0 Errors-To: lng-odp-bounces@lists.linaro.org Sender: lng-odp-bounces@lists.linaro.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: ola.liljedahl@linaro.org X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.215.54 as permitted sender) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 Changed the definition of odp_queue_enq_multi() to support partial success (e.g. enqueued some but not all of the events specified). Returns the number of events enqueued (equivalent to odp_queue_deq_multi()). This change is necessary to support ODP implementations that use fixed size queues (e.g. ODP linux-dpdk). Updated the implementation in odp_queue.c to conform to the new semantics. Updated the necessary test/validation/performance programs. Signed-off-by: Ola Liljedahl --- (This document/code contribution attached is provided under the terms of agreement LES-LTM-21309) include/odp/api/queue.h | 9 +++++---- platform/linux-generic/odp_packet_io.c | 4 ++-- platform/linux-generic/odp_queue.c | 4 ++-- test/performance/odp_scheduling.c | 10 +++++++--- test/validation/odp_pktio.c | 16 ++++++++++------ test/validation/odp_queue.c | 3 ++- 6 files changed, 28 insertions(+), 18 deletions(-) diff --git a/include/odp/api/queue.h b/include/odp/api/queue.h index b63cc34..377a7da 100644 --- a/include/odp/api/queue.h +++ b/include/odp/api/queue.h @@ -224,12 +224,13 @@ int odp_queue_enq(odp_queue_t queue, odp_event_t ev); * Enqueue multiple events to a queue * * @param queue Queue handle - * @param ev Event handles - * @param num Number of event handles + * @param[in] events Array of event handles + * @param num Number of event handles to enqueue * - * @return 0 if succesful + * @return Number of events actually enqueued (0 ... num) + * @retval <0 on failure */ -int odp_queue_enq_multi(odp_queue_t queue, odp_event_t ev[], int num); +int odp_queue_enq_multi(odp_queue_t queue, const odp_event_t events[], int num); /** * Queue dequeue diff --git a/platform/linux-generic/odp_packet_io.c b/platform/linux-generic/odp_packet_io.c index f156dd3..86620a1 100644 --- a/platform/linux-generic/odp_packet_io.c +++ b/platform/linux-generic/odp_packet_io.c @@ -410,7 +410,7 @@ static int enq_loopback(pktio_entry_t *pktio_entry, odp_packet_t pkt_tbl[], hdr_tbl[i] = odp_buf_to_hdr(_odp_packet_to_buffer(pkt_tbl[i])); qentry = queue_to_qentry(pktio_entry->s.loopq); - return queue_enq_multi(qentry, hdr_tbl, len) == 0 ? len : 0; + return queue_enq_multi(qentry, hdr_tbl, len); } int odp_pktio_send(odp_pktio_t id, odp_packet_t pkt_table[], unsigned len) @@ -552,7 +552,7 @@ int pktout_enq_multi(queue_entry_t *qentry, odp_buffer_hdr_t *buf_hdr[], pkt_tbl[i] = _odp_packet_from_buffer(buf_hdr[i]->handle.handle); nbr = odp_pktio_send(qentry->s.pktout, pkt_tbl, num); - return (nbr == num ? 0 : -1); + return nbr; } int pktout_deq_multi(queue_entry_t *qentry ODP_UNUSED, diff --git a/platform/linux-generic/odp_queue.c b/platform/linux-generic/odp_queue.c index 60be9c2..76bf4d7 100644 --- a/platform/linux-generic/odp_queue.c +++ b/platform/linux-generic/odp_queue.c @@ -369,7 +369,7 @@ int queue_enq_multi(queue_entry_t *queue, odp_buffer_hdr_t *buf_hdr[], int num) if (sched == 1) odp_schedule_queue(queue->s.handle, queue->s.param.sched.prio); - return 0; + return num; /* All events enqueued */ } int queue_enq_dummy(queue_entry_t *queue ODP_UNUSED, @@ -385,7 +385,7 @@ int queue_enq_multi_dummy(queue_entry_t *queue ODP_UNUSED, return -1; } -int odp_queue_enq_multi(odp_queue_t handle, odp_event_t ev[], int num) +int odp_queue_enq_multi(odp_queue_t handle, const odp_event_t ev[], int num) { odp_buffer_hdr_t *buf_hdr[QUEUE_MULTI_MAX]; queue_entry_t *queue; diff --git a/test/performance/odp_scheduling.c b/test/performance/odp_scheduling.c index ba13d8e..2f4d8a1 100644 --- a/test/performance/odp_scheduling.c +++ b/test/performance/odp_scheduling.c @@ -526,7 +526,9 @@ static int test_schedule_multi(const char *str, int thr, ev[j] = odp_buffer_to_event(buf); } - if (odp_queue_enq_multi(queue, ev, MULTI_BUFS_MAX)) { + /* Assume we can enqueue all events */ + if (odp_queue_enq_multi(queue, ev, MULTI_BUFS_MAX) != + MULTI_BUFS_MAX) { LOG_ERR(" [%i] Queue enqueue failed.\n", thr); return -1; } @@ -541,7 +543,8 @@ static int test_schedule_multi(const char *str, int thr, tot += num; - if (odp_queue_enq_multi(queue, ev, num)) { + /* Assume we can enqueue all events */ + if (odp_queue_enq_multi(queue, ev, num) != num) { LOG_ERR(" [%i] Queue enqueue failed.\n", thr); return -1; } @@ -559,7 +562,8 @@ static int test_schedule_multi(const char *str, int thr, tot += num; - if (odp_queue_enq_multi(queue, ev, num)) { + /* Assume we can enqueue all events */ + if (odp_queue_enq_multi(queue, ev, num) != num) { LOG_ERR(" [%i] Queue enqueue failed.\n", thr); return -1; } diff --git a/test/validation/odp_pktio.c b/test/validation/odp_pktio.c index e1ca793..9df4887 100644 --- a/test/validation/odp_pktio.c +++ b/test/validation/odp_pktio.c @@ -325,14 +325,18 @@ static void pktio_txrx_multi(pktio_info_t *pktio_a, pktio_info_t *pktio_b, } /* send packet(s) out */ - if (num_pkts == 1) + if (num_pkts == 1) { ret = odp_queue_enq(pktio_a->outq, tx_ev[0]); - else + if (ret != 0) { + CU_FAIL("failed to enqueue test packet"); + return; + } + } else { ret = odp_queue_enq_multi(pktio_a->outq, tx_ev, num_pkts); - - if (ret != 0) { - CU_FAIL("failed to enqueue test packets"); - return; + if (ret != num_pkts) { + CU_FAIL("failed to enqueue test packets"); + return; + } } /* and wait for them to arrive back */ diff --git a/test/validation/odp_queue.c b/test/validation/odp_queue.c index 198b4e2..91a32dc 100644 --- a/test/validation/odp_queue.c +++ b/test/validation/odp_queue.c @@ -83,9 +83,10 @@ static void test_odp_queue_sunnyday(void) /* * odp_queue_enq_multi may return 0..n buffers due to the resource * constraints in the implementation at that given point of time. + * But here we assume that we succeed in enqueuing all buffers. */ ret = odp_queue_enq_multi(queue_id, enev, MAX_BUFFER_QUEUE); - CU_ASSERT(0 == ret); + CU_ASSERT(MAX_BUFFER_QUEUE == ret); pev_tmp = deev; do { deq_ret = odp_queue_deq_multi(queue_id, pev_tmp,