From patchwork Mon Feb 2 15:42:15 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ola Liljedahl X-Patchwork-Id: 44151 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-wi0-f200.google.com (mail-wi0-f200.google.com [209.85.212.200]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 117812034D for ; Mon, 2 Feb 2015 15:43:05 +0000 (UTC) Received: by mail-wi0-f200.google.com with SMTP id fb4sf19871411wid.3 for ; Mon, 02 Feb 2015 07:43:03 -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=mXIHUU8phXEM7ox09MY/8TdPjIqGdp4VUBIjjSwXsSa0maCpZEObv0h0bIEzziTMVI RTBnhcfiJpiMT+oAaN5sYWVQf/ZyZ7vnqNCZ2mFVZ5n1lbpFK2R1mbeLg7FeH4x1+X0T qhE4xqmZogFEXVntUmCaX7jKqI+8NyQfDWiw/CzJqU7gNBD5bbiN2b7oD1tRo0a/pyom wNFfoxqWvSy5+clnG8Aj53NA00YDQT/tImNmlIAbt7ukDzMpIVKB+L8p5OjpDWKHP/VW HWhxG0+quJMFhGcbvOyAZfaAc2SZ8YRAK35I8Ja1j7rSS6/qFskXl/q3zFBoZAU8U+kp ZuRQ== X-Gm-Message-State: ALoCoQmis+8JjvAG0DXbViLjaQkNIUthi4Tn9BmtmKsuys8CeNzo57s9aVGpRxCtqpebU9v0rWdH X-Received: by 10.180.87.72 with SMTP id v8mr1325468wiz.3.1422891782729; Mon, 02 Feb 2015 07:43:02 -0800 (PST) X-BeenThere: patchwork-forward@linaro.org Received: by 10.152.203.231 with SMTP id kt7ls653264lac.52.gmail; Mon, 02 Feb 2015 07:43:02 -0800 (PST) X-Received: by 10.112.135.196 with SMTP id pu4mr20182831lbb.41.1422891782495; Mon, 02 Feb 2015 07:43:02 -0800 (PST) Received: from mail-la0-f50.google.com (mail-la0-f50.google.com. [209.85.215.50]) by mx.google.com with ESMTPS id dc2si13624232lac.4.2015.02.02.07.43.02 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Mon, 02 Feb 2015 07:43:02 -0800 (PST) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.215.50 as permitted sender) client-ip=209.85.215.50; Received: by mail-la0-f50.google.com with SMTP id hs14so42003665lab.9 for ; Mon, 02 Feb 2015 07:43:02 -0800 (PST) X-Received: by 10.152.228.161 with SMTP id sj1mr6362143lac.74.1422891782373; Mon, 02 Feb 2015 07:43:02 -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 h5csp1371667lbj; Mon, 2 Feb 2015 07:43:01 -0800 (PST) X-Received: by 10.224.28.198 with SMTP id n6mr42567420qac.15.1422891778899; Mon, 02 Feb 2015 07:42:58 -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 k10si3584901qay.73.2015.02.02.07.42.57 (version=TLSv1 cipher=RC4-SHA bits=128/128); Mon, 02 Feb 2015 07:42:58 -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 1YIJ9L-0001mV-UY; Mon, 02 Feb 2015 15:42:55 +0000 Received: from mail-la0-f46.google.com ([209.85.215.46]) by ip-10-35-177-41.ec2.internal with esmtp (Exim 4.76) (envelope-from ) id 1YIJ91-0001kZ-T1 for lng-odp@lists.linaro.org; Mon, 02 Feb 2015 15:42:36 +0000 Received: by mail-la0-f46.google.com with SMTP id s18so42247006lam.5 for ; Mon, 02 Feb 2015 07:42:30 -0800 (PST) X-Received: by 10.152.183.196 with SMTP id eo4mr20342847lac.0.1422891750385; Mon, 02 Feb 2015 07:42:30 -0800 (PST) Received: from macmini.lan (78-82-118-111.tn.glocalnet.net. [78.82.118.111]) by mx.google.com with ESMTPSA id w1sm4461682lal.49.2015.02.02.07.42.29 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 02 Feb 2015 07:42:29 -0800 (PST) From: Ola Liljedahl To: lng-odp@lists.linaro.org Date: Mon, 2 Feb 2015 16:42:15 +0100 Message-Id: <1422891740-5347-5-git-send-email-ola.liljedahl@linaro.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1422891740-5347-1-git-send-email-ola.liljedahl@linaro.org> References: <1422891740-5347-1-git-send-email-ola.liljedahl@linaro.org> X-Topics: patch Subject: [lng-odp] [PATCHv3 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.50 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,