All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joyce Kong <joyce.kong@arm.com>
To: dev@dpdk.org
Cc: nd@arm.com, thomas@monjalon.net, jerinj@marvell.com,
	stephen@networkplumber.org, mb@smartsharesystems.com,
	david.marchand@redhat.com, honnappa.nagarahalli@arm.com,
	gavin.hu@arm.com, ravi1.kumar@amd.com, rmody@marvell.com,
	shshaikh@marvell.com, xuanziyang2@huawei.com,
	cloud.wangxiaoyun@huawei.com, zhouguoyang@huawei.com
Subject: [dpdk-dev] [PATCH v4 2/6] test/bitops: add bit operation test case
Date: Wed, 20 Nov 2019 18:12:03 +0800	[thread overview]
Message-ID: <1574244727-6003-3-git-send-email-joyce.kong@arm.com> (raw)
In-Reply-To: <1574244727-6003-1-git-send-email-joyce.kong@arm.com>
In-Reply-To: <1571125801-45773-1-git-send-email-joyce.kong@arm.com>

Add test cases for set bit, clear bit, test and set bit,
test and clear bit operations.

Signed-off-by: Joyce Kong <joyce.kong@arm.com>
Reviewed-by: Gavin Hu <gavin.hu@arm.com>
Reviewed-by: Phil Yang <phil.yang@arm.com>
---
 app/test/Makefile         |   1 +
 app/test/autotest_data.py |   6 +
 app/test/meson.build      |   2 +
 app/test/test_bitops.c    | 305 ++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 314 insertions(+)
 create mode 100644 app/test/test_bitops.c

diff --git a/app/test/Makefile b/app/test/Makefile
index 57930c0..4f33274 100644
--- a/app/test/Makefile
+++ b/app/test/Makefile
@@ -70,6 +70,7 @@ SRCS-y += test_ticketlock.c
 SRCS-y += test_memory.c
 SRCS-y += test_memzone.c
 SRCS-y += test_bitmap.c
+SRCS-y += test_bitops.c
 SRCS-y += test_reciprocal_division.c
 SRCS-y += test_reciprocal_division_perf.c
 SRCS-y += test_fbarray.c
diff --git a/app/test/autotest_data.py b/app/test/autotest_data.py
index 6deb97b..7db2df1 100644
--- a/app/test/autotest_data.py
+++ b/app/test/autotest_data.py
@@ -405,6 +405,12 @@
         "Report":  None,
     },
     {
+        "Name":    "Bitops test",
+        "Command": "bitops_autotest",
+        "Func":    default_autotest,
+        "Report":  None,
+    },
+    {
         "Name":    "Hash multiwriter autotest",
         "Command": "hash_multiwriter_autotest",
         "Func":    default_autotest,
diff --git a/app/test/meson.build b/app/test/meson.build
index ff59c31..33b4135 100644
--- a/app/test/meson.build
+++ b/app/test/meson.build
@@ -14,6 +14,7 @@ test_sources = files('commands.c',
 	'test_atomic.c',
 	'test_barrier.c',
 	'test_bitratestats.c',
+	'test_bitops.c',
 	'test_bpf.c',
 	'test_byteorder.c',
 	'test_cmdline.c',
@@ -167,6 +168,7 @@ fast_test_names = [
         'alarm_autotest',
         'atomic_autotest',
         'byteorder_autotest',
+        'bitops_autotest',
         'cmdline_autotest',
         'common_autotest',
         'cpuflags_autotest',
diff --git a/app/test/test_bitops.c b/app/test/test_bitops.c
new file mode 100644
index 0000000..3859ca8
--- /dev/null
+++ b/app/test/test_bitops.c
@@ -0,0 +1,305 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2019 Arm Limited
+ */
+
+#include <rte_bitops.h>
+#include <rte_launch.h>
+#include "test.h"
+
+uint32_t val32;
+uint64_t val64;
+unsigned int synchro;
+unsigned int count32;
+unsigned int count64;
+
+#define MAX_BITS_32 32
+#define MAX_BITS_64 64
+/*
+ * Bitops functions
+ * ================
+ *
+ * - The main test function performs several subtests.
+ * - For relaxed version, check bit operations on one core.
+ *   - Initialize valXX to specified values, then set each bit of valXX
+ *     to 1 one by one in "test_bitops_set_relaxed".
+ *
+ *   - Clear each bit of valXX to 0 one by one in "test_bitops_clear_relaxed".
+ *
+ *   - Function "test_bitops_test_set_clear_relaxed" checks whether each bit
+ *     of valXX can do "test and set" and "test and clear" correctly.
+ *
+ * - For C11 atomic barrier version, check bit operations on multi cores.
+ *   - Per bit of valXX is set to 1, then cleared to 0 on each core in
+ *     "test_bitops_set_clear". The function checks that once all lcores finish
+ *     their set_clear, the value of valXX would still be zero.
+ *
+ *   - The cores are waiting for a synchro which is triggered by the main test
+ *     function. Then all cores would do "rte_test_and_set_bitXX" or
+ *     "rte_test_and_clear_bitXX" at the same time, "countXX" which is checked
+ *     as the result later would inc by one or not according to the original
+ *     bit value.
+ *
+ */
+
+static int
+test_bitops_set_relaxed(void)
+{
+	unsigned int i;
+
+	for (i = 0; i < MAX_BITS_32; i++)
+		rte_set_bit32_relaxed(i, &val32);
+
+	for (i = 0; i < MAX_BITS_32; i++)
+		if (!rte_get_bit32_relaxed(i, &val32)) {
+			printf("Failed to set bit in relaxed version.\n");
+			return TEST_FAILED;
+		}
+
+	for (i = 0; i < MAX_BITS_64; i++)
+		rte_set_bit64_relaxed(i, &val64);
+
+	for (i = 0; i < MAX_BITS_64; i++)
+		if (!rte_get_bit64_relaxed(i, &val64)) {
+			printf("Failed to set bit in relaxed version.\n");
+			return TEST_FAILED;
+		}
+
+	return TEST_SUCCESS;
+}
+
+static int
+test_bitops_clear_relaxed(void)
+{
+	unsigned int i;
+
+	for (i = 0; i < MAX_BITS_32; i++)
+		rte_clear_bit32_relaxed(i, &val32);
+
+	for (i = 0; i < MAX_BITS_32; i++)
+		if (rte_get_bit32_relaxed(i, &val32)) {
+			printf("Failed to clear bit in relaxed version.\n");
+			return TEST_FAILED;
+		}
+
+	for (i = 0; i < MAX_BITS_64; i++)
+		rte_clear_bit64_relaxed(i, &val64);
+
+	for (i = 0; i < MAX_BITS_64; i++)
+		if (rte_get_bit64_relaxed(i, &val64)) {
+			printf("Failed to clear bit in relaxed version.\n");
+			return TEST_FAILED;
+		}
+
+	return TEST_SUCCESS;
+}
+
+static int
+test_bitops_test_set_clear_relaxed(void)
+{
+	unsigned int i;
+
+	for (i = 0; i < MAX_BITS_32; i++)
+		rte_test_and_set_bit32_relaxed(i, &val32);
+
+	for (i = 0; i < MAX_BITS_32; i++)
+		if (!rte_test_and_clear_bit32_relaxed(i, &val32)) {
+			printf("Failed to set and test bit in relaxed version.\n");
+			return TEST_FAILED;
+	}
+
+	for (i = 0; i < MAX_BITS_32; i++)
+		if (rte_get_bit32_relaxed(i, &val32)) {
+			printf("Failed to test and clear bit in relaxed version.\n");
+			return TEST_FAILED;
+		}
+
+	for (i = 0; i < MAX_BITS_64; i++)
+		rte_test_and_set_bit64_relaxed(i, &val64);
+
+	for (i = 0; i < MAX_BITS_64; i++)
+		if (!rte_test_and_clear_bit64_relaxed(i, &val64)) {
+			printf("Failed to set and test bit in relaxed version.\n");
+			return TEST_FAILED;
+		}
+
+	for (i = 0; i < MAX_BITS_64; i++)
+		if (rte_get_bit64_relaxed(i, &val64)) {
+			printf("Failed to test and clear bit in relaxed version.\n");
+			return TEST_FAILED;
+		}
+
+	return TEST_SUCCESS;
+}
+
+static int
+test_bitops_set_clear(__attribute__((unused)) void *arg)
+{
+	while (__atomic_load_n(&synchro, __ATOMIC_RELAXED) == 0)
+		;
+
+	unsigned int i;
+
+	for (i = 0; i < MAX_BITS_32; i++)
+		rte_set_bit32(i, &val32);
+	for (i = 0; i < MAX_BITS_32; i++)
+		rte_clear_bit32(i, &val32);
+
+	for (i = 0; i < MAX_BITS_64; i++)
+		rte_set_bit64(i, &val64);
+	for (i = 0; i < MAX_BITS_64; i++)
+		rte_clear_bit64(i, &val64);
+
+	return TEST_SUCCESS;
+}
+
+/*
+ * rte_test_and_set_bitXX() returns the original bit value, then set it to 1.
+ * This functions checks that if the target bit is equal to 0, set it to 1 and
+ * increase the variable of "countXX" by one. If it is equal to 1, do nothing
+ * for "countXX". The value of "countXX" would be checked as the result later.
+ */
+static int
+test_bitops_test_set(__attribute__((unused)) void *arg)
+
+{
+	while (__atomic_load_n(&synchro, __ATOMIC_RELAXED) == 0)
+		;
+
+	unsigned int i;
+
+	for (i = 0; i < MAX_BITS_32; i++)
+		if (!rte_test_and_set_bit32(i, &val32))
+			__atomic_fetch_add(&count32, 1, __ATOMIC_ACQ_REL);
+
+	for (i = 0; i < MAX_BITS_64; i++)
+		if (!rte_test_and_set_bit64(i, &val64))
+			__atomic_fetch_add(&count64, 1, __ATOMIC_ACQ_REL);
+
+	return TEST_SUCCESS;
+}
+
+/*
+ * rte_test_and_set_bitXX() returns the original bit value, then clear it to 0.
+ * This functions checks that if the target bit is equal to 1, clear it to 0 and
+ * increase the variable of "countXX" by one. If it is equal to 0, do nothing
+ * for "countXX". The value of "countXX" would be checked as the result later.
+ */
+static int
+test_bitops_test_clear(__attribute__((unused)) void *arg)
+
+{
+	while (__atomic_load_n(&synchro, __ATOMIC_RELAXED) == 0)
+		;
+
+	unsigned int i;
+
+	for (i = 0; i < MAX_BITS_32; i++)
+		if (rte_test_and_clear_bit32(i, &val32))
+			__atomic_fetch_add(&count32, 1, __ATOMIC_ACQ_REL);
+
+	for (i = 0; i < MAX_BITS_64; i++)
+		if (rte_test_and_clear_bit64(i, &val64))
+			__atomic_fetch_add(&count64, 1, __ATOMIC_ACQ_REL);
+
+	return TEST_SUCCESS;
+}
+
+static int
+test_bitops(void)
+{
+	__atomic_store_n(&val32, 0, __ATOMIC_RELAXED);
+	__atomic_store_n(&val64, 0, __ATOMIC_RELAXED);
+	__atomic_store_n(&synchro, 0,  __ATOMIC_RELAXED);
+	__atomic_store_n(&count32, 0, __ATOMIC_RELAXED);
+	__atomic_store_n(&count64, 0, __ATOMIC_RTELAXED);
+
+	if (test_bitops_set_relaxed() < 0)
+		return TEST_FAILED;
+
+	if (test_bitops_clear_relaxed() < 0)
+		return TEST_FAILED;
+
+	if (test_bitops_test_set_clear_relaxed() < 0)
+		return TEST_FAILED;
+
+
+	rte_eal_mp_remote_launch(test_bitops_set_clear, NULL, SKIP_MASTER);
+	__atomic_store_n(&synchro, 1,  __ATOMIC_RELAXED);
+	rte_eal_mp_wait_lcore();
+	__atomic_store_n(&synchro, 0, __ATOMIC_RELAXED);
+
+	unsigned int i;
+
+	for (i = 0; i < MAX_BITS_32; i++)
+		if (rte_get_bit32(i, &val32)) {
+			printf("Failed to set and clear bit on multi cores.\n");
+			return TEST_FAILED;
+		}
+
+	for (i = 0; i < MAX_BITS_64; i++)
+		if (rte_get_bit64(i, &val64)) {
+			printf("Failed to set and clear bit on multi cores.\n");
+			return TEST_FAILED;
+		}
+
+	/*
+	 * Launch all slave lcores to do "rte_bitops_test_and_set_bitXX"
+	 * respectively.
+	 * Each lcore should have MAX_BITS_XX chances to check the target bit.
+	 * If it's equal to 0, set it to 1 and "countXX (which is initialized
+	 * to 0)" would be increased by one. If the target bit is 1, still set
+	 * it to 1 and do nothing for "countXX". There would be only one lcore
+	 * that finds the target bit is 0.
+	 * If the final value of "countXX" is equal to MAX_BITS_XX, all slave
+	 * lcores performed "rte_bitops_test_and_set_bitXX" correctly.
+	 */
+	__atomic_store_n(&count32, 0, __ATOMIC_RELAXED);
+	__atomic_store_n(&count64, 0, __ATOMIC_RELAXED);
+
+	rte_eal_mp_remote_launch(test_bitops_test_set, NULL, SKIP_MASTER);
+	__atomic_store_n(&synchro, 1,  __ATOMIC_RELAXED);
+	rte_eal_mp_wait_lcore();
+	__atomic_store_n(&synchro, 0, __ATOMIC_RELAXED);
+
+	if (__atomic_load_n(&count32, __ATOMIC_RELAXED) != MAX_BITS_32) {
+		printf("Failed to test and set on multi cores.\n");
+		return TEST_FAILED;
+	}
+	if (__atomic_load_n(&count64, __ATOMIC_RELAXED) != MAX_BITS_64) {
+		printf("Failed to test and set on multi cores.\n");
+		return TEST_FAILED;
+	}
+
+	/*
+	 * Launch all slave lcores to do "rte_bitops_test_and_clear_bitXX"
+	 * respectively.
+	 * Each lcore should have MAX_BITS_XX chances to check the target bit.
+	 * If it's equal to 1, clear it to 0 and "countXX (which is initialized
+	 * to 0)" would be increased by one. If the target bit is 0, still clear
+	 * it to 0 and do nothing for "countXX". There would be only one lcore
+	 * that finds the target bit is 1.
+	 * If the final value of "countXX" is equal to MAX_BITS_XX, all slave
+	 * lcores performed "rte_bitops_test_and_clear_bitXX" correctly.
+	 */
+
+	__atomic_store_n(&count32, 0, __ATOMIC_RELAXED);
+	__atomic_store_n(&count64, 0, __ATOMIC_RELAXED);
+
+	rte_eal_mp_remote_launch(test_bitops_test_clear, NULL, SKIP_MASTER);
+	__atomic_store_n(&synchro, 1,  __ATOMIC_RELAXED);
+	rte_eal_mp_wait_lcore();
+	__atomic_store_n(&synchro, 0, __ATOMIC_RELAXED);
+
+	if (__atomic_load_n(&count32, __ATOMIC_RELAXED) != MAX_BITS_32) {
+		printf("Failed to test and clear on multi cores.\n");
+		return TEST_FAILED;
+	}
+	if (__atomic_load_n(&count64, __ATOMIC_RELAXED) != MAX_BITS_64) {
+		printf("Failed to test and clear on multi cores.\n");
+		return TEST_FAILED;
+	}
+
+	return TEST_SUCCESS;
+}
+
+REGISTER_TEST_COMMAND(bitops_autotest, test_bitops);
-- 
2.7.4


  parent reply	other threads:[~2019-11-20 10:12 UTC|newest]

Thread overview: 141+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-15  7:49 [dpdk-dev] [PATCH v1 0/5] implement common rte bit operation APIs in PMDs Joyce Kong
2019-10-15  7:49 ` [dpdk-dev] [PATCH v1 1/5] lib/eal: implement the family of rte bit operation APIs Joyce Kong
2019-10-15 16:53   ` Stephen Hemminger
2019-10-18  9:00     ` Joyce Kong (Arm Technology China)
2019-10-16  7:54   ` Jerin Jacob
2019-10-18  9:02     ` Joyce Kong (Arm Technology China)
2019-10-23  3:12       ` Joyce Kong (Arm Technology China)
2019-10-16 19:05   ` Stephen Hemminger
2019-10-17 13:32   ` [dpdk-dev] [PATCH v1 1/5] lib/eal: implement the family of rte bitoperation APIs Morten Brørup
2019-10-18  8:58     ` Joyce Kong (Arm Technology China)
2019-10-23  3:07       ` Joyce Kong (Arm Technology China)
2019-10-23  7:45         ` Morten Brørup
2019-10-23 17:30           ` Honnappa Nagarahalli
2019-10-24  3:38             ` Gavin Hu (Arm Technology China)
2019-11-01 13:48               ` Honnappa Nagarahalli
2019-11-03 15:45                 ` Gavin Hu (Arm Technology China)
2019-10-15  7:49 ` [dpdk-dev] [PATCH v1 2/5] net/axgbe: use common rte bit operation APIs instead Joyce Kong
2019-10-15  7:49 ` [dpdk-dev] [PATCH v1 3/5] net/bnx2x: " Joyce Kong
2019-10-15  7:50 ` [dpdk-dev] [PATCH v1 4/5] net/hinic: " Joyce Kong
2019-10-15  7:50 ` [dpdk-dev] [PATCH v1 5/5] net/qede: " Joyce Kong
2019-10-15 16:51 ` [dpdk-dev] [PATCH v1 0/5] implement common rte bit operation APIs in PMDs Stephen Hemminger
2019-10-18  9:01   ` Joyce Kong (Arm Technology China)
2019-10-23  2:54 ` [dpdk-dev] [PATCH v2 0/6] " Joyce Kong
2019-10-25 13:14   ` David Marchand
2019-10-29 16:42   ` Thomas Monjalon
2019-10-30  9:55     ` Gavin Hu (Arm Technology China)
2019-10-30 10:17       ` Thomas Monjalon
2019-10-30 12:32       ` Jerin Jacob
2019-10-30 13:02         ` Morten Brørup
2019-10-31 10:39           ` Gavin Hu (Arm Technology China)
2019-10-23  2:54 ` [dpdk-dev] [PATCH v2 1/6] lib/eal: implement the family of rte bit operation APIs Joyce Kong
2019-10-23  3:09   ` Honnappa Nagarahalli
2019-10-23  4:56   ` Jerin Jacob
2019-10-23  7:46   ` Morten Brørup
2019-10-23  2:54 ` [dpdk-dev] [PATCH v2 2/6] test/iobitops: add io bit operation test case Joyce Kong
2019-10-23  2:54 ` [dpdk-dev] [PATCH v2 3/6] net/axgbe: use common rte bit operation APIs instead Joyce Kong
2019-10-23  3:16   ` Honnappa Nagarahalli
2019-10-23  2:54 ` [dpdk-dev] [PATCH v2 4/6] net/bnx2x: " Joyce Kong
2019-10-23  2:54 ` [dpdk-dev] [PATCH v2 5/6] net/hinic: " Joyce Kong
2019-10-23  2:54 ` [dpdk-dev] [PATCH v2 6/6] net/qede: " Joyce Kong
2019-11-18 10:06 ` [dpdk-dev] [PATCH v3 0/6] implement common rte bit operation APIs in PMDs Joyce Kong
2019-11-18 10:06 ` [dpdk-dev] [PATCH v3 1/6] lib/eal: implement the family of rte bit operation APIs Joyce Kong
2019-11-18 10:52   ` [dpdk-dev] [PATCH v3 1/6] lib/eal: implement the family of rte bitoperation APIs Morten Brørup
2019-11-19  9:22     ` Joyce Kong (Arm Technology China)
2019-11-18 10:06 ` [dpdk-dev] [PATCH v3 2/6] test/bitops: add bit operation test case Joyce Kong
2019-11-18 10:06 ` [dpdk-dev] [PATCH v3 3/6] net/axgbe: use common rte bit operation APIs instead Joyce Kong
2019-11-18 10:06 ` [dpdk-dev] [PATCH v3 4/6] net/bnx2x: " Joyce Kong
2019-11-18 10:06 ` [dpdk-dev] [PATCH v3 5/6] net/qede: " Joyce Kong
2019-11-18 10:06 ` [dpdk-dev] [PATCH v3 6/6] net/hinic: " Joyce Kong
2019-11-20 10:12 ` [dpdk-dev] [PATCH v4 0/6] implement common rte bit operation APIs in PMDs Joyce Kong
2019-11-20 10:12 ` [dpdk-dev] [PATCH v4 1/6] lib/eal: implement the family of rte bit operation APIs Joyce Kong
2019-11-20 13:40   ` [dpdk-dev] [PATCH v4 1/6] lib/eal: implement the family of rte bitoperation APIs Morten Brørup
2019-11-20 10:12 ` Joyce Kong [this message]
2019-11-20 10:12 ` [dpdk-dev] [PATCH v4 3/6] net/axgbe: use common rte bit operation APIs instead Joyce Kong
2019-11-20 10:12 ` [dpdk-dev] [PATCH v4 4/6] net/bnx2x: " Joyce Kong
2019-11-20 10:12 ` [dpdk-dev] [PATCH v4 5/6] net/qede: " Joyce Kong
2019-11-20 10:12 ` [dpdk-dev] [PATCH v4 6/6] net/hinic: " Joyce Kong
2019-11-28  6:44 ` [dpdk-dev] [PATCH v5 0/6] implement common rte bit operation APIs in PMDs Joyce Kong
2019-11-28  6:44 ` [dpdk-dev] [PATCH v5 1/6] lib/eal: implement the family of rte bit operation APIs Joyce Kong
2019-11-28  6:44 ` [dpdk-dev] [PATCH v5 2/6] test/bitops: add bit operation test case Joyce Kong
2019-11-28  6:44 ` [dpdk-dev] [PATCH v5 3/6] net/axgbe: use common rte bit operation APIs instead Joyce Kong
2019-12-02  6:09   ` Gavin Hu (Arm Technology China)
2019-12-02  9:12     ` Thomas Monjalon
2019-12-02  9:24       ` [dpdk-dev] [PATCH v5 3/6] net/axgbe: use common rte bitoperation " Morten Brørup
2019-12-02  9:30         ` Thomas Monjalon
2019-12-02 16:53         ` Stephen Hemminger
2019-12-03  6:52           ` Gavin Hu (Arm Technology China)
2019-11-28  6:44 ` [dpdk-dev] [PATCH v5 4/6] net/bnx2x: use common rte bit operation " Joyce Kong
2019-11-28  6:44 ` [dpdk-dev] [PATCH v5 5/6] net/qede: " Joyce Kong
2019-11-28  6:44 ` [dpdk-dev] [PATCH v5 6/6] net/hinic: " Joyce Kong
2019-12-18  6:00 ` [dpdk-dev] [PATCH v6 0/6] implement common rte bit operation APIs in PMDs Joyce Kong
2019-12-18  6:55   ` Gavin Hu
2020-01-17 13:03   ` David Marchand
2019-12-18  6:00 ` [dpdk-dev] [PATCH v6 1/6] lib/eal: implement the family of rte bit operation APIs Joyce Kong
2019-12-20  6:52   ` Honnappa Nagarahalli
2019-12-21 16:07     ` Honnappa Nagarahalli
2019-12-21 18:07       ` Stephen Hemminger
2019-12-23  5:04         ` Honnappa Nagarahalli
2019-12-23 16:36           ` Stephen Hemminger
2019-12-30  3:02             ` Gavin Hu
2020-01-07  0:44               ` Honnappa Nagarahalli
2020-01-07  1:26                 ` Stephen Hemminger
2020-01-07  4:41                   ` Honnappa Nagarahalli
2020-01-07  0:41             ` Honnappa Nagarahalli
2019-12-21 18:08       ` Stephen Hemminger
2019-12-23  5:45         ` Honnappa Nagarahalli
2019-12-23  8:59       ` Jerin Jacob
2019-12-18  6:00 ` [dpdk-dev] [PATCH v6 2/6] test/bitops: add bit operation test case Joyce Kong
2019-12-18  6:00 ` [dpdk-dev] [PATCH v6 3/6] net/axgbe: use common rte bit operation APIs instead Joyce Kong
2019-12-18  6:00 ` [dpdk-dev] [PATCH v6 4/6] net/bnx2x: " Joyce Kong
2019-12-18  6:00 ` [dpdk-dev] [PATCH v6 5/6] net/qede: " Joyce Kong
2019-12-18  6:00 ` [dpdk-dev] [PATCH v6 6/6] net/hinic: " Joyce Kong
2020-03-09  9:54 ` [dpdk-dev] [PATCH v7 0/6] implement common rte bit operation APIs in PMDs Joyce Kong
2020-03-09  9:54 ` [dpdk-dev] [PATCH v7 1/6] lib/eal: implement the family of PMD bit operation APIs Joyce Kong
2020-03-09 15:50   ` Stephen Hemminger
2020-03-31 22:35   ` Thomas Monjalon
2020-04-01  8:27     ` Gavin Hu
2020-04-01  9:45       ` Thomas Monjalon
2020-04-02  7:20         ` Gavin Hu
2020-04-02  8:07           ` Thomas Monjalon
2020-04-02  8:11             ` Jerin Jacob
2020-04-02  9:02               ` Gavin Hu
2020-03-09  9:54 ` [dpdk-dev] [PATCH v7 2/6] test/pmdbitops: add PMD bit operation test case Joyce Kong
2020-03-09  9:54 ` [dpdk-dev] [PATCH v7 3/6] net/axgbe: use common rte bit operation APIs instead Joyce Kong
2020-03-09  9:54 ` [dpdk-dev] [PATCH v7 4/6] net/bnx2x: " Joyce Kong
2020-03-09  9:54 ` [dpdk-dev] [PATCH v7 5/6] net/qede: " Joyce Kong
2020-03-09  9:54 ` [dpdk-dev] [PATCH v7 6/6] net/hinic: " Joyce Kong
2020-04-16  5:38 ` [dpdk-dev] [PATCH v8 0/6] implement common bit operation APIs Joyce Kong
2020-04-16  5:38 ` [dpdk-dev] [PATCH v8 1/6] lib/eal: implement the family of " Joyce Kong
2020-04-16 18:55   ` [dpdk-dev] [PATCH v8 1/6] lib/eal: implement the family of commonbit " Morten Brørup
2020-04-17  8:18     ` Joyce Kong
2020-04-17  9:38   ` [dpdk-dev] [PATCH v8 1/6] lib/eal: implement the family of common bit " Jerin Jacob
2020-04-20  2:46     ` Joyce Kong
2020-04-16  5:38 ` [dpdk-dev] [PATCH v8 2/6] test/bitops: add bit operation test case Joyce Kong
2020-04-16  5:38 ` [dpdk-dev] [PATCH v8 3/6] net/axgbe: use common rte bit operation APIs instead Joyce Kong
2020-04-16  5:38 ` [dpdk-dev] [PATCH v8 4/6] net/bnx2x: " Joyce Kong
2020-04-16  5:38 ` [dpdk-dev] [PATCH v8 5/6] net/qede: " Joyce Kong
2020-04-16  5:38 ` [dpdk-dev] [PATCH v8 6/6] net/hinic: " Joyce Kong
2020-04-24  3:21 ` [dpdk-dev] [PATCH v9 0/6] implement common bit operation APIs Joyce Kong
2020-04-24  3:21 ` [dpdk-dev] [PATCH v9 1/6] lib/eal: implement the family of " Joyce Kong
2020-04-24  8:08   ` Thomas Monjalon
2020-04-26  2:07     ` Joyce Kong
2020-04-25 19:59   ` Thomas Monjalon
2020-04-26  7:18     ` Joyce Kong
2020-04-26  9:23       ` Thomas Monjalon
2020-04-24  3:21 ` [dpdk-dev] [PATCH v9 2/6] test/bitops: add bit operation test case Joyce Kong
2020-04-24  3:21 ` [dpdk-dev] [PATCH v9 3/6] net/axgbe: use common rte bit operation APIs instead Joyce Kong
2020-04-24  3:21 ` [dpdk-dev] [PATCH v9 4/6] net/bnx2x: " Joyce Kong
2020-04-24  3:21 ` [dpdk-dev] [PATCH v9 5/6] net/qede: " Joyce Kong
2020-04-24  3:21 ` [dpdk-dev] [PATCH v9 6/6] net/hinic: " Joyce Kong
2020-04-27  7:58 ` [dpdk-dev] [PATCH v10 0/6] implement common bit operation APIs Joyce Kong
2020-06-16 12:36   ` Thomas Monjalon
2020-04-27  7:58 ` [dpdk-dev] [PATCH v10 1/6] lib/eal: implement the family of " Joyce Kong
2020-04-27  7:58 ` [dpdk-dev] [PATCH v10 2/6] test/bitops: add bit operation test case Joyce Kong
2020-04-27  7:58 ` [dpdk-dev] [PATCH v10 3/6] net/axgbe: use common rte bit operation APIs instead Joyce Kong
2020-04-27  7:58 ` [dpdk-dev] [PATCH v10 4/6] net/bnx2x: " Joyce Kong
2024-02-17 12:01   ` Mattias Rönnblom
2024-02-17 14:25     ` Thomas Monjalon
2020-04-27  7:58 ` [dpdk-dev] [PATCH v10 5/6] net/qede: " Joyce Kong
2020-04-27  7:58 ` [dpdk-dev] [PATCH v10 6/6] net/hinic: " Joyce Kong
2020-06-16 12:31   ` Thomas Monjalon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1574244727-6003-3-git-send-email-joyce.kong@arm.com \
    --to=joyce.kong@arm.com \
    --cc=cloud.wangxiaoyun@huawei.com \
    --cc=david.marchand@redhat.com \
    --cc=dev@dpdk.org \
    --cc=gavin.hu@arm.com \
    --cc=honnappa.nagarahalli@arm.com \
    --cc=jerinj@marvell.com \
    --cc=mb@smartsharesystems.com \
    --cc=nd@arm.com \
    --cc=ravi1.kumar@amd.com \
    --cc=rmody@marvell.com \
    --cc=shshaikh@marvell.com \
    --cc=stephen@networkplumber.org \
    --cc=thomas@monjalon.net \
    --cc=xuanziyang2@huawei.com \
    --cc=zhouguoyang@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.