From patchwork Fri Oct 30 09:27:29 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxim Uvarov X-Patchwork-Id: 55824 Delivered-To: patch@linaro.org Received: by 10.112.61.134 with SMTP id p6csp1079238lbr; Fri, 30 Oct 2015 02:29:47 -0700 (PDT) X-Received: by 10.55.17.129 with SMTP id 1mr8574783qkr.25.1446197387830; Fri, 30 Oct 2015 02:29:47 -0700 (PDT) Return-Path: Received: from lists.linaro.org (lists.linaro.org. [54.225.227.206]) by mx.google.com with ESMTP id e32si5099816qkh.24.2015.10.30.02.29.47; Fri, 30 Oct 2015 02:29:47 -0700 (PDT) Received-SPF: pass (google.com: domain of lng-odp-bounces@lists.linaro.org designates 54.225.227.206 as permitted sender) client-ip=54.225.227.206; Authentication-Results: mx.google.com; spf=pass (google.com: domain of lng-odp-bounces@lists.linaro.org designates 54.225.227.206 as permitted sender) smtp.mailfrom=lng-odp-bounces@lists.linaro.org; dkim=neutral (body hash did not verify) header.i=@linaro_org.20150623.gappssmtp.com Received: by lists.linaro.org (Postfix, from userid 109) id 7C85662C2A; Fri, 30 Oct 2015 09:29:47 +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.5 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, T_DKIM_INVALID, URIBL_BLOCKED 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 DC22E61B51; Fri, 30 Oct 2015 09:28:47 +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 2727F61A43; Fri, 30 Oct 2015 09:28:42 +0000 (UTC) Received: from mail-lf0-f42.google.com (mail-lf0-f42.google.com [209.85.215.42]) by lists.linaro.org (Postfix) with ESMTPS id 7C6EE62C28 for ; Fri, 30 Oct 2015 09:27:33 +0000 (UTC) Received: by lffz202 with SMTP id z202so30324524lff.3 for ; Fri, 30 Oct 2015 02:27:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro_org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id; bh=QxVasfv91THueW4Jk5rUaV7xvN0Kvw/e/D5kJeOUZ1E=; b=XAziKLgQNHxBgdX4CAXlL9mY+X+x6CFDfbbQQl6S70MvQ1iMMrtuWEFCPcf0byCIW/ xMrbAuhy4CO0Xq6TLHqMZAKeUA2zMPCVuK4bgNP7dVPvinQwZuJNYfuYM766h/mkE9hW Iqq1xxj5F5GqHLG43wSH+XZseSu80CXovcYr+wzi3a6Gliey9YrDDt/lQ0hqK7Sz8gro 3xr29c7Q2bj1QFLZIFjW4SG8doZggPWc+WLFaVRrdfxm4mk4HqoJKYnUAPjfaRFujc/x i1BnkMLJIxCwFlCkzwXWOetPKxppi7SkhSQHE5GB/s2DGAueoRnPJiDfgK4HUpsmAzte aApA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=QxVasfv91THueW4Jk5rUaV7xvN0Kvw/e/D5kJeOUZ1E=; b=nNYCg2CeEd99mYim8wAXcu1VZ9wmOabxouHsRN+SHOf3qFrOC9d1TR01vCJGj/VBN/ Fj1QIvrvWJZDbpgbioXSz8cMk3oOBXkoxmHObifQb0YD5VP9AA0yPUC8HOmnTt5+CsvD Y9VnDG9bPw3jtilX2TVInlRDti0YA0wvN5qR12PaGo7q+xD4m2L2+fjYLQbkG5CUD9RC dJGCF3MeqTNp6LC0bMvtn5Yvya6b5KcNi4aJ6tZjsok8z+OMDSeiKzqgH1Y6w+7znAS1 zt7xBm2sbb4C+yLXGNtv/w4/hQRlW1CICEy+OG7IGpo/ox09EDWgT4bfQFgMoY2jCx4U 2hfQ== X-Gm-Message-State: ALoCoQmUy4iDbuoycL3BKKsW9BujnDvoWjAG2VLDLRqnvTE81zC7b0kIEZ/rJnGvxPjROO3LrtY1 X-Received: by 10.25.18.71 with SMTP id h68mr2250016lfi.94.1446197252212; Fri, 30 Oct 2015 02:27:32 -0700 (PDT) Received: from localhost.localdomain (ppp91-76-161-180.pppoe.mtu-net.ru. [91.76.161.180]) by smtp.gmail.com with ESMTPSA id p198sm1079462lfe.39.2015.10.30.02.27.31 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 30 Oct 2015 02:27:31 -0700 (PDT) From: Maxim Uvarov To: lng-odp@lists.linaro.org Date: Fri, 30 Oct 2015 12:27:29 +0300 Message-Id: <1446197249-20852-1-git-send-email-maxim.uvarov@linaro.org> X-Mailer: git-send-email 1.9.1 X-Topics: patch Subject: [lng-odp] [PATCH] linux-generic: check return codes in odp_pktio_term_global 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: , MIME-Version: 1.0 Errors-To: lng-odp-bounces@lists.linaro.org Sender: "lng-odp" According to API odp_pktio_close() can be called only for stopped pktio. So in odp_pktio_term_global try to stop it first then call close. Also check all returns codes. https://bugs.linaro.org/show_bug.cgi?id=1854 Signed-off-by: Maxim Uvarov --- platform/linux-generic/odp_packet_io.c | 57 +++++++++++++++++++++------------- 1 file changed, 36 insertions(+), 21 deletions(-) diff --git a/platform/linux-generic/odp_packet_io.c b/platform/linux-generic/odp_packet_io.c index 1246bff..feae796 100644 --- a/platform/linux-generic/odp_packet_io.c +++ b/platform/linux-generic/odp_packet_io.c @@ -30,6 +30,21 @@ static pktio_table_t *pktio_tbl; /* pktio pointer entries ( for inlines) */ void *pktio_entry_ptr[ODP_CONFIG_PKTIO_ENTRIES]; +static int is_free(pktio_entry_t *entry) +{ + return (entry->s.taken == 0); +} + +static void set_free(pktio_entry_t *entry) +{ + entry->s.taken = 0; +} + +static void set_taken(pktio_entry_t *entry) +{ + entry->s.taken = 1; +} + int odp_pktio_init_global(void) { char name[ODP_QUEUE_NAME_LEN]; @@ -91,17 +106,32 @@ int odp_pktio_term_global(void) int id; int pktio_if; - for (id = 1; id <= ODP_CONFIG_PKTIO_ENTRIES; ++id) { - pktio_entry = &pktio_tbl->entries[id - 1]; - odp_pktio_close(pktio_entry->s.handle); - odp_queue_destroy(pktio_entry->s.outq_default); + for (id = 0; id < ODP_CONFIG_PKTIO_ENTRIES; ++id) { + pktio_entry = &pktio_tbl->entries[id]; + + ret = odp_queue_destroy(pktio_entry->s.outq_default); + if (ret) + ODP_ABORT("unable to destroy outq %s\n", + pktio_entry->s.name); + if (is_free(pktio_entry)) + continue; + if (pktio_entry->s.state != STATE_STOP) { + ret = odp_pktio_stop(pktio_entry->s.handle); + if (ret) + ODP_ABORT("unable to stop pktio %s\n", + pktio_entry->s.name); + } + ret = odp_pktio_close(pktio_entry->s.handle); + if (ret) + ODP_ABORT("unable to close pktio %s\n", + pktio_entry->s.name); } for (pktio_if = 0; pktio_if_ops[pktio_if]; ++pktio_if) { if (pktio_if_ops[pktio_if]->term) if (pktio_if_ops[pktio_if]->term()) - ODP_ERR("failed to terminate pktio type %d", - pktio_if); + ODP_ABORT("failed to terminate pktio type %d", + pktio_if); } ret = odp_shm_free(odp_shm_lookup("odp_pktio_entries")); @@ -116,21 +146,6 @@ int odp_pktio_init_local(void) return 0; } -static int is_free(pktio_entry_t *entry) -{ - return (entry->s.taken == 0); -} - -static void set_free(pktio_entry_t *entry) -{ - entry->s.taken = 0; -} - -static void set_taken(pktio_entry_t *entry) -{ - entry->s.taken = 1; -} - static void lock_entry(pktio_entry_t *entry) { odp_ticketlock_lock(&entry->s.lock);