From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <aburakov@ecsmtp.ir.intel.com>
Received: from mga06.intel.com (mga06.intel.com [134.134.136.31])
 by dpdk.org (Postfix) with ESMTP id 5F50E5B38
 for <dev@dpdk.org>; Tue, 11 Dec 2018 17:43:37 +0100 (CET)
X-Amp-Result: SKIPPED(no attachment in message)
X-Amp-File-Uploaded: False
Received: from orsmga005.jf.intel.com ([10.7.209.41])
 by orsmga104.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;
 11 Dec 2018 08:43:36 -0800
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="5.56,342,1539673200"; d="scan'208";a="282736509"
Received: from irvmail001.ir.intel.com ([163.33.26.43])
 by orsmga005.jf.intel.com with ESMTP; 11 Dec 2018 08:43:34 -0800
Received: from sivswdev05.ir.intel.com (sivswdev05.ir.intel.com [10.243.17.64])
 by irvmail001.ir.intel.com (8.14.3/8.13.6/MailSET/Hub) with ESMTP id
 wBBGhX6a026222; Tue, 11 Dec 2018 16:43:33 GMT
Received: from sivswdev05.ir.intel.com (localhost [127.0.0.1])
 by sivswdev05.ir.intel.com with ESMTP id wBBGhXAl007068;
 Tue, 11 Dec 2018 16:43:33 GMT
Received: (from aburakov@localhost)
 by sivswdev05.ir.intel.com with LOCAL id wBBGhXmr007064;
 Tue, 11 Dec 2018 16:43:33 GMT
From: Anatoly Burakov <anatoly.burakov@intel.com>
To: dev@dpdk.org
Cc: przemyslawx.lal@intel.com, kuralamudhan.ramakrishnan@intel.com,
 ivan.coughlan@intel.com, tiwei.bie@intel.com, ray.kinsella@intel.com,
 maxime.coquelin@redhat.com
Date: Tue, 11 Dec 2018 16:43:32 +0000
Message-Id: <e31a2cde4f69ad12c1d1ec04d3aa47ca225b74d1.1544546363.git.anatoly.burakov@intel.com>
X-Mailer: git-send-email 1.7.0.7
In-Reply-To: <cover.1544546363.git.anatoly.burakov@intel.com>
References: <cover.1544546363.git.anatoly.burakov@intel.com>
In-Reply-To: <cover.1544546363.git.anatoly.burakov@intel.com>
References: <cover.1542130721.git.anatoly.burakov@intel.com>
 <cover.1544546363.git.anatoly.burakov@intel.com>
Subject: [dpdk-dev] [PATCH v2 5/5] test: add segment fd API test
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Tue, 11 Dec 2018 16:43:37 -0000

Use memory autotest to also test segment fd API. This will not do
any checks - just see if the relevant API's return success or
indicate that the API is not supported.

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
 test/test/test_memory.c | 43 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)

diff --git a/test/test/test_memory.c b/test/test/test_memory.c
index b96bca771..3da803e4e 100644
--- a/test/test/test_memory.c
+++ b/test/test/test_memory.c
@@ -37,10 +37,44 @@ check_mem(const struct rte_memseg_list *msl __rte_unused,
 	return 0;
 }
 
+static int
+check_seg_fds(const struct rte_memseg_list *msl, const struct rte_memseg *ms,
+		void *arg __rte_unused)
+{
+	size_t offset;
+	int ret;
+
+	/* skip external segments */
+	if (msl->external)
+		return 0;
+
+	/* try segment fd first. we're in a callback, so thread-unsafe */
+	ret = rte_memseg_get_fd_thread_unsafe(ms);
+	if (ret < 0) {
+		/* ENOTSUP means segment is valid, but there is not support for
+		 * segment fd API (e.g. on FreeBSD).
+		 */
+		if (errno == ENOTSUP)
+			return 1;
+		/* all other errors are treated as failures */
+		return -1;
+	}
+
+	/* we're able to get memseg fd - try getting its offset */
+	ret = rte_memseg_get_fd_offset_thread_unsafe(ms, &offset);
+	if (ret < 0) {
+		if (errno == ENOTSUP)
+			return 1;
+		return -1;
+	}
+	return 0;
+}
+
 static int
 test_memory(void)
 {
 	uint64_t s;
+	int ret;
 
 	/*
 	 * dump the mapped memory: the python-expect script checks
@@ -59,6 +93,15 @@ test_memory(void)
 	/* try to read memory (should not segfault) */
 	rte_memseg_walk(check_mem, NULL);
 
+	/* check segment fd support */
+	ret = rte_memseg_walk(check_seg_fds, NULL);
+	if (ret == 1) {
+		printf("Segment fd API is unsupported\n");
+	} else if (ret == -1) {
+		printf("Error getting segment fd's\n");
+		return -1;
+	}
+
 	return 0;
 }
 
-- 
2.17.1