From: "Ananyev, Konstantin" <konstantin.ananyev@intel.com>
To: 'Honnappa Nagarahalli' <honnappa.nagarahalli@arm.com>,
"dev@dpdk.org" <dev@dpdk.org>
Cc: "nd@arm.com" <nd@arm.com>,
"dharmik.thakkar@arm.com" <dharmik.thakkar@arm.com>,
"malvika.gupta@arm.com" <malvika.gupta@arm.com>,
"gavin.hu@arm.com" <gavin.hu@arm.com>
Subject: Re: [dpdk-dev] [RFC 2/3] tqs: add thread quiescent state library
Date: Sat, 24 Nov 2018 12:18:00 +0000 [thread overview]
Message-ID: <2601191342CEEE43887BDE71AB977258010CEBBBA9@IRSMSX106.ger.corp.intel.com> (raw)
In-Reply-To: <20181122033055.3431-3-honnappa.nagarahalli@arm.com>
Hi Honnappa,
> +
> +/* Allocate a new TQS variable with the name *name* in memory. */
> +struct rte_tqs * __rte_experimental
> +rte_tqs_alloc(const char *name, int socket_id, uint64_t lcore_mask)
> +{
> + char tqs_name[RTE_TQS_NAMESIZE];
> + struct rte_tailq_entry *te, *tmp_te;
> + struct rte_tqs_list *tqs_list;
> + struct rte_tqs *v, *tmp_v;
> + int ret;
> +
> + if (name == NULL) {
> + RTE_LOG(ERR, TQS, "Invalid input parameters\n");
> + rte_errno = -EINVAL;
> + return NULL;
> + }
> +
> + te = rte_zmalloc("TQS_TAILQ_ENTRY", sizeof(*te), 0);
> + if (te == NULL) {
> + RTE_LOG(ERR, TQS, "Cannot reserve memory for tailq\n");
> + rte_errno = -ENOMEM;
> + return NULL;
> + }
> +
> + snprintf(tqs_name, sizeof(tqs_name), "%s", name);
> + v = rte_zmalloc_socket(tqs_name, sizeof(struct rte_tqs),
> + RTE_CACHE_LINE_SIZE, socket_id);
> + if (v == NULL) {
> + RTE_LOG(ERR, TQS, "Cannot reserve memory for TQS variable\n");
> + rte_errno = -ENOMEM;
> + goto alloc_error;
> + }
> +
> + ret = snprintf(v->name, sizeof(v->name), "%s", name);
> + if (ret < 0 || ret >= (int)sizeof(v->name)) {
> + rte_errno = -ENAMETOOLONG;
> + goto alloc_error;
> + }
> +
> + te->data = (void *) v;
> + v->lcore_mask = lcore_mask;
> +
> + rte_rwlock_write_lock(RTE_EAL_TAILQ_RWLOCK);
> +
> + tqs_list = RTE_TAILQ_CAST(rte_tqs_tailq.head, rte_tqs_list);
> +
> + /* Search if a TQS variable with the same name exists already */
> + TAILQ_FOREACH(tmp_te, tqs_list, next) {
> + tmp_v = (struct rte_tqs *) tmp_te->data;
> + if (strncmp(name, tmp_v->name, RTE_TQS_NAMESIZE) == 0)
> + break;
> + }
> +
> + if (tmp_te != NULL) {
> + rte_errno = -EEXIST;
> + goto tqs_exist;
> + }
> +
> + TAILQ_INSERT_TAIL(tqs_list, te, next);
> +
> + rte_rwlock_write_unlock(RTE_EAL_TAILQ_RWLOCK);
> +
> + return v;
> +
> +tqs_exist:
> + rte_rwlock_write_unlock(RTE_EAL_TAILQ_RWLOCK);
> +
> +alloc_error:
> + rte_free(te);
> + rte_free(v);
> + return NULL;
> +}
That seems quite heavy-weight function just to allocate sync variable.
As size of struct rte_tqs is constant and known to the user, might be better
just provide rte_tqs_init(struct rte_tqs *tqs, ...) and let user allocate/free
memory for it by himself.
> +
> +/* Add a reader thread, running on an lcore, to the list of threads
> + * reporting their quiescent state on a TQS variable.
> + */
> +int __rte_experimental
> +rte_tqs_register_lcore(struct rte_tqs *v, unsigned int lcore_id)
> +{
> + TQS_RETURN_IF_TRUE((v == NULL || lcore_id >= RTE_TQS_MAX_LCORE),
> + -EINVAL);
It is not very good practice to make function return different values and behave
in a different way in debug/non-debug mode.
I'd say that for slow-path (functions in .c) it is always good to check input parameters.
For fast-path (functions in .h) we sometimes skip such checking,
but debug mode can probably use RTE_ASSERT() or so.
lcore_id >= RTE_TQS_MAX_LCORE
Is this limitation really necessary?
First it means that only lcores can use that API (at least data-path part), second
even today many machines have more than 64 cores.
I think you can easily avoid such limitation, if instead of requiring lcore_id as
input parameter, you'll just make it return index of next available entry in w[].
Then tqs_update() can take that index as input parameter.
> +
> + /* Worker thread has to count the quiescent states
> + * only from the current value of token.
> + */
> + v->w[lcore_id].cnt = v->token;
Wonder what would happen, if new reader will
call register(), after writer calls start()?
Looks like a race-condition.
Or such pattern is not supported?
> +
> + /* Release the store to initial TQS count so that workers
> + * can use it immediately after this function returns.
> + */
> + __atomic_fetch_or(&v->lcore_mask, (1UL << lcore_id), __ATOMIC_RELEASE);
> +
> + return 0;
> +}
> +
> +/**
> + * @warning
> + * @b EXPERIMENTAL: this API may change without prior notice
> + *
> + * Trigger the worker threads to report the quiescent state
> + * status.
> + *
> + * This is implemented as a lock-free function. It is multi-thread
> + * safe and can be called from the worker threads as well.
> + *
> + * @param v
> + * TQS variable
> + * @param n
> + * Expected number of times the quiescent state is entered
> + * @param t
> + * - If successful, this is the token for this call of the API.
> + * This should be passed to rte_tqs_check API.
> + * @return
> + * - -EINVAL if the parameters are invalid (debug mode compilation only).
> + * - 0 Otherwise and always (non-debug mode compilation).
> + */
> +static __rte_always_inline int __rte_experimental
> +rte_tqs_start(struct rte_tqs *v, unsigned int n, uint32_t *t)
> +{
> + TQS_RETURN_IF_TRUE((v == NULL || t == NULL), -EINVAL);
> +
> + /* This store release will ensure that changes to any data
> + * structure are visible to the workers before the token
> + * update is visible.
> + */
> + *t = __atomic_add_fetch(&v->token, n, __ATOMIC_RELEASE);
> +
> + return 0;
> +}
> +
> +/**
> + * @warning
> + * @b EXPERIMENTAL: this API may change without prior notice
> + *
> + * Update quiescent state for the worker thread on a lcore.
> + *
> + * This is implemented as a lock-free function. It is multi-thread safe.
> + * All the worker threads registered to report their quiescent state
> + * on the TQS variable must call this API.
> + *
> + * @param v
> + * TQS variable
> + */
> +static __rte_always_inline void __rte_experimental
> +rte_tqs_update(struct rte_tqs *v, unsigned int lcore_id)
> +{
> + uint32_t t;
> +
> + TQS_ERR_LOG_IF_TRUE(v == NULL || lcore_id >= RTE_TQS_MAX_LCORE);
> +
> + /* Load the token before the worker thread loads any other
> + * (lock-free) data structure. This ensures that updates
> + * to the data structures are visible if the update
> + * to token is visible.
> + */
> + t = __atomic_load_n(&v->token, __ATOMIC_ACQUIRE);
Hmm, I am not very familiar with C11 model, but it looks like a race
condition to me:
as I understand, update() supposed be called at the end of reader's
critical section, correct?
But ACQUIRE is only a hoist barrier, which means compiler and cpu
are free to move earlier reads (and writes) after it.
It probably needs to be a full ACQ_REL here.
> + if (v->w[lcore_id].cnt != t)
> + v->w[lcore_id].cnt++;
> +}
> +
> +/**
> + * @warning
> + * @b EXPERIMENTAL: this API may change without prior notice
> + *
> + * Checks if all the worker threads have entered the quiescent state
> + * 'n' number of times. 'n' is provided in rte_tqs_start API.
> + *
> + * This is implemented as a lock-free function. It is multi-thread
> + * safe and can be called from the worker threads as well.
> + *
> + * @param v
> + * TQS variable
> + * @param t
> + * Token returned by rte_tqs_start API
> + * @param wait
> + * If true, block till all the worker threads have completed entering
> + * the quiescent state 'n' number of times
> + * @return
> + * - 0 if all worker threads have NOT passed through specified number
> + * of quiescent states.
> + * - 1 if all worker threads have passed through specified number
> + * of quiescent states.
> + * - -EINVAL if the parameters are invalid (debug mode compilation only).
> + */
> +static __rte_always_inline int __rte_experimental
> +rte_tqs_check(struct rte_tqs *v, uint32_t t, bool wait)
> +{
> + uint64_t l;
> + uint64_t lcore_mask;
> +
> + TQS_RETURN_IF_TRUE((v == NULL), -EINVAL);
> +
> + do {
> + /* Load the current lcore_mask before loading the
> + * worker thread quiescent state counters.
> + */
> + lcore_mask = __atomic_load_n(&v->lcore_mask, __ATOMIC_ACQUIRE);
What would happen if reader will call unregister() simultaneously
with check() and will update lcore_mask straight after that load?
As I understand check() might hang in such case.
> +
> + while (lcore_mask) {
> + l = __builtin_ctz(lcore_mask);
> + if (v->w[l].cnt != t)
> + break;
As I understand, that makes control-path function progress dependent
on simultaneous invocation of data-path functions.
In some cases that might cause control-path to hang.
Let say if data-path function wouldn't be called, or user invokes
control-path and data-path functions from the same thread.
> +
> + lcore_mask &= ~(1UL << l);
> + }
> +
> + if (lcore_mask == 0)
> + return 1;
> +
> + rte_pause();
> + } while (wait);
> +
> + return 0;
> +}
> +
next prev parent reply other threads:[~2018-11-24 12:18 UTC|newest]
Thread overview: 260+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-22 3:30 [dpdk-dev] [RFC 0/3] " Honnappa Nagarahalli
2018-11-22 3:30 ` [dpdk-dev] [RFC 1/3] log: add TQS log type Honnappa Nagarahalli
2018-11-27 22:24 ` Stephen Hemminger
2018-11-28 5:58 ` Honnappa Nagarahalli
2018-11-22 3:30 ` [dpdk-dev] [RFC 2/3] tqs: add thread quiescent state library Honnappa Nagarahalli
2018-11-24 12:18 ` Ananyev, Konstantin [this message]
2018-11-27 21:32 ` Honnappa Nagarahalli
2018-11-28 15:25 ` Ananyev, Konstantin
2018-12-07 7:27 ` Honnappa Nagarahalli
2018-12-07 17:29 ` Stephen Hemminger
2018-12-11 6:40 ` Honnappa Nagarahalli
2018-12-13 12:26 ` Burakov, Anatoly
2018-12-18 4:30 ` Honnappa Nagarahalli
2018-12-18 6:31 ` Stephen Hemminger
2018-12-12 9:29 ` Ananyev, Konstantin
2018-12-13 7:39 ` Honnappa Nagarahalli
2018-12-17 13:14 ` Ananyev, Konstantin
2018-11-22 3:30 ` [dpdk-dev] [RFC 3/3] test/tqs: Add API and functional tests Honnappa Nagarahalli
[not found] ` <CGME20181122073110eucas1p17592400af6c0b807dc87e90d136575af@eucas1p1.samsung.com>
2018-11-22 7:31 ` [dpdk-dev] [RFC 0/3] tqs: add thread quiescent state library Ilya Maximets
2018-11-27 22:28 ` Stephen Hemminger
2018-11-27 22:49 ` Van Haaren, Harry
2018-11-28 5:31 ` Honnappa Nagarahalli
2018-11-28 23:23 ` Stephen Hemminger
2018-11-30 2:13 ` Honnappa Nagarahalli
2018-11-30 16:26 ` Luca Boccassi
2018-11-30 18:32 ` Stephen Hemminger
2018-11-30 20:20 ` Honnappa Nagarahalli
2018-11-30 20:56 ` Mattias Rönnblom
2018-11-30 23:44 ` Stephen Hemminger
2018-12-01 18:37 ` Honnappa Nagarahalli
2018-11-30 2:25 ` Honnappa Nagarahalli
2018-11-30 21:03 ` Mattias Rönnblom
2018-12-22 2:14 ` [dpdk-dev] [RFC v2 0/2] rcu: add RCU library supporting QSBR mechanism Honnappa Nagarahalli
2018-12-22 2:14 ` [dpdk-dev] [RFC v2 1/2] " Honnappa Nagarahalli
2019-01-15 11:39 ` Ananyev, Konstantin
2019-01-15 20:43 ` Honnappa Nagarahalli
2019-01-16 15:56 ` Ananyev, Konstantin
2019-01-18 6:48 ` Honnappa Nagarahalli
2019-01-18 12:14 ` Ananyev, Konstantin
2019-01-24 17:15 ` Honnappa Nagarahalli
2019-01-24 18:05 ` Ananyev, Konstantin
2019-02-22 7:07 ` Honnappa Nagarahalli
2018-12-22 2:14 ` [dpdk-dev] [RFC v2 2/2] test/rcu_qsbr: add API and functional tests Honnappa Nagarahalli
2018-12-23 7:30 ` Stephen Hemminger
2018-12-23 16:25 ` Paul E. McKenney
2019-01-18 7:04 ` Honnappa Nagarahalli
2019-02-22 7:04 ` [dpdk-dev] [RFC v3 0/5] rcu: add RCU library supporting QSBR mechanism Honnappa Nagarahalli
2019-02-22 7:04 ` [dpdk-dev] [RFC v3 1/5] " Honnappa Nagarahalli
2019-02-22 7:04 ` [dpdk-dev] [RFC v3 2/5] test/rcu_qsbr: add API and functional tests Honnappa Nagarahalli
2019-02-22 7:04 ` [dpdk-dev] [RFC v3 3/5] lib/rcu: add dynamic memory allocation capability Honnappa Nagarahalli
2019-02-22 7:04 ` [dpdk-dev] [RFC v3 4/5] test/rcu_qsbr: modify test cases for dynamic memory allocation Honnappa Nagarahalli
2019-02-22 7:04 ` [dpdk-dev] [RFC v3 5/5] lib/rcu: fix the size of register thread ID array size Honnappa Nagarahalli
2019-03-19 4:52 ` [dpdk-dev] [PATCH 0/3] lib/rcu: add RCU library supporting QSBR mechanism Honnappa Nagarahalli
2019-03-19 4:52 ` Honnappa Nagarahalli
2019-03-19 4:52 ` [dpdk-dev] [PATCH 1/3] rcu: " Honnappa Nagarahalli
2019-03-19 4:52 ` Honnappa Nagarahalli
2019-03-22 16:42 ` Ananyev, Konstantin
2019-03-22 16:42 ` Ananyev, Konstantin
2019-03-26 4:35 ` Honnappa Nagarahalli
2019-03-26 4:35 ` Honnappa Nagarahalli
2019-03-28 11:15 ` Ananyev, Konstantin
2019-03-28 11:15 ` Ananyev, Konstantin
2019-03-29 5:54 ` Honnappa Nagarahalli
2019-03-29 5:54 ` Honnappa Nagarahalli
2019-03-19 4:52 ` [dpdk-dev] [PATCH 2/3] test/rcu_qsbr: add API and functional tests Honnappa Nagarahalli
2019-03-19 4:52 ` Honnappa Nagarahalli
2019-03-19 4:52 ` [dpdk-dev] [PATCH 3/3] doc/rcu: add lib_rcu documentation Honnappa Nagarahalli
2019-03-19 4:52 ` Honnappa Nagarahalli
2019-03-25 11:34 ` Kovacevic, Marko
2019-03-25 11:34 ` Kovacevic, Marko
2019-03-26 4:43 ` Honnappa Nagarahalli
2019-03-26 4:43 ` Honnappa Nagarahalli
2019-03-27 5:52 ` [dpdk-dev] [PATCH v2 0/3] lib/rcu: add RCU library supporting QSBR mechanism Honnappa Nagarahalli
2019-03-27 5:52 ` Honnappa Nagarahalli
2019-03-27 5:52 ` [dpdk-dev] [PATCH v2 1/3] rcu: " Honnappa Nagarahalli
2019-03-27 5:52 ` Honnappa Nagarahalli
2019-03-27 5:52 ` [dpdk-dev] [PATCH v2 2/3] test/rcu_qsbr: add API and functional tests Honnappa Nagarahalli
2019-03-27 5:52 ` Honnappa Nagarahalli
2019-03-27 5:52 ` [dpdk-dev] [PATCH v2 3/3] doc/rcu: add lib_rcu documentation Honnappa Nagarahalli
2019-03-27 5:52 ` Honnappa Nagarahalli
2019-04-01 17:10 ` [dpdk-dev] [PATCH v3 0/3] lib/rcu: add RCU library supporting QSBR mechanism Honnappa Nagarahalli
2019-04-01 17:10 ` Honnappa Nagarahalli
2019-04-01 17:11 ` [dpdk-dev] [PATCH v3 1/3] rcu: " Honnappa Nagarahalli
2019-04-01 17:11 ` Honnappa Nagarahalli
2019-04-02 10:22 ` Ananyev, Konstantin
2019-04-02 10:22 ` Ananyev, Konstantin
2019-04-02 10:53 ` Ananyev, Konstantin
2019-04-02 10:53 ` Ananyev, Konstantin
2019-04-01 17:11 ` [dpdk-dev] [PATCH v3 2/3] test/rcu_qsbr: add API and functional tests Honnappa Nagarahalli
2019-04-01 17:11 ` Honnappa Nagarahalli
2019-04-02 10:55 ` Ananyev, Konstantin
2019-04-02 10:55 ` Ananyev, Konstantin
2019-04-01 17:11 ` [dpdk-dev] [PATCH v3 3/3] doc/rcu: add lib_rcu documentation Honnappa Nagarahalli
2019-04-01 17:11 ` Honnappa Nagarahalli
2019-04-10 11:20 ` [dpdk-dev] [PATCH v4 0/3] lib/rcu: add RCU library supporting QSBR mechanism Honnappa Nagarahalli
2019-04-10 11:20 ` Honnappa Nagarahalli
2019-04-10 11:20 ` [dpdk-dev] [PATCH v4 1/3] rcu: " Honnappa Nagarahalli
2019-04-10 11:20 ` Honnappa Nagarahalli
2019-04-10 18:14 ` Paul E. McKenney
2019-04-10 18:14 ` Paul E. McKenney
2019-04-11 4:35 ` Honnappa Nagarahalli
2019-04-11 4:35 ` Honnappa Nagarahalli
2019-04-11 15:26 ` Paul E. McKenney
2019-04-11 15:26 ` Paul E. McKenney
2019-04-12 20:21 ` Honnappa Nagarahalli
2019-04-12 20:21 ` Honnappa Nagarahalli
2019-04-15 16:51 ` Ananyev, Konstantin
2019-04-15 16:51 ` Ananyev, Konstantin
2019-04-15 19:46 ` Honnappa Nagarahalli
2019-04-15 19:46 ` Honnappa Nagarahalli
2019-04-10 11:20 ` [dpdk-dev] [PATCH v4 2/3] test/rcu_qsbr: add API and functional tests Honnappa Nagarahalli
2019-04-10 11:20 ` Honnappa Nagarahalli
2019-04-10 15:26 ` Stephen Hemminger
2019-04-10 15:26 ` Stephen Hemminger
2019-04-10 16:15 ` Honnappa Nagarahalli
2019-04-10 16:15 ` Honnappa Nagarahalli
2019-04-10 11:20 ` [dpdk-dev] [PATCH v4 3/3] doc/rcu: add lib_rcu documentation Honnappa Nagarahalli
2019-04-10 11:20 ` Honnappa Nagarahalli
2019-04-12 20:20 ` [dpdk-dev] [PATCH v5 0/3] lib/rcu: add RCU library supporting QSBR mechanism Honnappa Nagarahalli
2019-04-12 20:20 ` Honnappa Nagarahalli
2019-04-12 20:20 ` [dpdk-dev] [PATCH v5 1/3] rcu: " Honnappa Nagarahalli
2019-04-12 20:20 ` Honnappa Nagarahalli
2019-04-12 22:06 ` Stephen Hemminger
2019-04-12 22:06 ` Stephen Hemminger
2019-04-12 22:24 ` Honnappa Nagarahalli
2019-04-12 22:24 ` Honnappa Nagarahalli
2019-04-12 23:06 ` Stephen Hemminger
2019-04-12 23:06 ` Stephen Hemminger
2019-04-15 12:24 ` Ananyev, Konstantin
2019-04-15 12:24 ` Ananyev, Konstantin
2019-04-15 15:38 ` Stephen Hemminger
2019-04-15 15:38 ` Stephen Hemminger
2019-04-15 17:39 ` Ananyev, Konstantin
2019-04-15 17:39 ` Ananyev, Konstantin
2019-04-15 18:56 ` Honnappa Nagarahalli
2019-04-15 18:56 ` Honnappa Nagarahalli
2019-04-15 21:26 ` Stephen Hemminger
2019-04-15 21:26 ` Stephen Hemminger
2019-04-16 5:29 ` Honnappa Nagarahalli
2019-04-16 5:29 ` Honnappa Nagarahalli
2019-04-16 14:54 ` Stephen Hemminger
2019-04-16 14:54 ` Stephen Hemminger
2019-04-16 16:56 ` Honnappa Nagarahalli
2019-04-16 16:56 ` Honnappa Nagarahalli
2019-04-16 21:22 ` Stephen Hemminger
2019-04-16 21:22 ` Stephen Hemminger
2019-04-17 1:45 ` Honnappa Nagarahalli
2019-04-17 1:45 ` Honnappa Nagarahalli
2019-04-17 13:39 ` Ananyev, Konstantin
2019-04-17 13:39 ` Ananyev, Konstantin
2019-04-17 14:02 ` Honnappa Nagarahalli
2019-04-17 14:02 ` Honnappa Nagarahalli
2019-04-17 14:18 ` Thomas Monjalon
2019-04-17 14:18 ` Thomas Monjalon
2019-04-12 20:20 ` [dpdk-dev] [PATCH v5 2/3] test/rcu_qsbr: add API and functional tests Honnappa Nagarahalli
2019-04-12 20:20 ` Honnappa Nagarahalli
2019-04-12 20:20 ` [dpdk-dev] [PATCH v5 3/3] doc/rcu: add lib_rcu documentation Honnappa Nagarahalli
2019-04-12 20:20 ` Honnappa Nagarahalli
2019-04-15 17:29 ` [dpdk-dev] [PATCH v5 0/3] lib/rcu: add RCU library supporting QSBR mechanism Ananyev, Konstantin
2019-04-15 17:29 ` Ananyev, Konstantin
2019-04-16 5:10 ` Honnappa Nagarahalli
2019-04-16 5:10 ` Honnappa Nagarahalli
2019-04-17 4:13 ` [dpdk-dev] [PATCH v6 " Honnappa Nagarahalli
2019-04-17 4:13 ` Honnappa Nagarahalli
2019-04-17 4:13 ` [dpdk-dev] [PATCH v6 1/3] rcu: " Honnappa Nagarahalli
2019-04-17 4:13 ` Honnappa Nagarahalli
2019-04-19 19:19 ` Paul E. McKenney
2019-04-19 19:19 ` Paul E. McKenney
2019-04-23 1:08 ` Honnappa Nagarahalli
2019-04-23 1:08 ` Honnappa Nagarahalli
2019-04-17 4:13 ` [dpdk-dev] [PATCH v6 2/3] test/rcu_qsbr: add API and functional tests Honnappa Nagarahalli
2019-04-17 4:13 ` Honnappa Nagarahalli
2019-04-17 4:13 ` [dpdk-dev] [PATCH v6 3/3] doc/rcu: add lib_rcu documentation Honnappa Nagarahalli
2019-04-17 4:13 ` Honnappa Nagarahalli
2019-04-21 16:40 ` [dpdk-dev] [PATCH v6 0/3] lib/rcu: add RCU library supporting QSBR mechanism Thomas Monjalon
2019-04-21 16:40 ` Thomas Monjalon
2019-04-25 14:18 ` Honnappa Nagarahalli
2019-04-25 14:18 ` Honnappa Nagarahalli
2019-04-25 14:27 ` Honnappa Nagarahalli
2019-04-25 14:27 ` Honnappa Nagarahalli
2019-04-25 14:38 ` David Marchand
2019-04-25 14:38 ` David Marchand
2019-04-23 4:31 ` [dpdk-dev] [PATCH v7 " Honnappa Nagarahalli
2019-04-23 4:31 ` Honnappa Nagarahalli
2019-04-23 4:31 ` [dpdk-dev] [PATCH v7 1/3] rcu: " Honnappa Nagarahalli
2019-04-23 4:31 ` Honnappa Nagarahalli
2019-04-23 8:10 ` Paul E. McKenney
2019-04-23 8:10 ` Paul E. McKenney
2019-04-23 21:23 ` Honnappa Nagarahalli
2019-04-23 21:23 ` Honnappa Nagarahalli
2019-04-24 20:02 ` Jerin Jacob Kollanukkaran
2019-04-24 20:02 ` Jerin Jacob Kollanukkaran
2019-04-25 5:15 ` Honnappa Nagarahalli
2019-04-25 5:15 ` Honnappa Nagarahalli
2019-04-24 10:03 ` Ruifeng Wang (Arm Technology China)
2019-04-24 10:03 ` Ruifeng Wang (Arm Technology China)
2019-04-23 4:31 ` [dpdk-dev] [PATCH v7 2/3] test/rcu_qsbr: add API and functional tests Honnappa Nagarahalli
2019-04-23 4:31 ` Honnappa Nagarahalli
2019-04-23 4:31 ` [dpdk-dev] [PATCH v7 3/3] doc/rcu: add lib_rcu documentation Honnappa Nagarahalli
2019-04-23 4:31 ` Honnappa Nagarahalli
2019-04-24 10:12 ` Ruifeng Wang (Arm Technology China)
2019-04-24 10:12 ` Ruifeng Wang (Arm Technology China)
2019-04-26 4:39 ` [dpdk-dev] [PATCH v8 0/4] lib/rcu: add RCU library supporting QSBR mechanism Honnappa Nagarahalli
2019-04-26 4:39 ` Honnappa Nagarahalli
2019-04-26 4:39 ` [dpdk-dev] [PATCH v8 1/4] rcu: " Honnappa Nagarahalli
2019-04-26 4:39 ` Honnappa Nagarahalli
2019-04-26 8:13 ` Jerin Jacob Kollanukkaran
2019-04-26 8:13 ` Jerin Jacob Kollanukkaran
2019-04-28 3:25 ` Ruifeng Wang (Arm Technology China)
2019-04-28 3:25 ` Ruifeng Wang (Arm Technology China)
2019-04-29 20:33 ` Thomas Monjalon
2019-04-29 20:33 ` Thomas Monjalon
2019-04-30 10:51 ` Hemant Agrawal
2019-04-30 10:51 ` Hemant Agrawal
2019-04-26 4:39 ` [dpdk-dev] [PATCH v8 2/4] test/rcu_qsbr: add API and functional tests Honnappa Nagarahalli
2019-04-26 4:39 ` Honnappa Nagarahalli
2019-04-29 20:35 ` Thomas Monjalon
2019-04-29 20:35 ` Thomas Monjalon
2019-04-30 4:20 ` Honnappa Nagarahalli
2019-04-30 4:20 ` Honnappa Nagarahalli
2019-04-30 7:58 ` Thomas Monjalon
2019-04-30 7:58 ` Thomas Monjalon
2019-04-26 4:39 ` [dpdk-dev] [PATCH v8 3/4] doc/rcu: add lib_rcu documentation Honnappa Nagarahalli
2019-04-26 4:39 ` Honnappa Nagarahalli
2019-04-26 4:40 ` [dpdk-dev] [PATCH v8 4/4] doc: added RCU to the release notes Honnappa Nagarahalli
2019-04-26 4:40 ` Honnappa Nagarahalli
2019-04-26 12:04 ` [dpdk-dev] [PATCH v8 0/4] lib/rcu: add RCU library supporting QSBR mechanism Ananyev, Konstantin
2019-04-26 12:04 ` Ananyev, Konstantin
2019-05-01 3:54 ` [dpdk-dev] [PATCH v9 " Honnappa Nagarahalli
2019-05-01 3:54 ` Honnappa Nagarahalli
2019-05-01 3:54 ` [dpdk-dev] [PATCH v9 1/4] rcu: " Honnappa Nagarahalli
2019-05-01 3:54 ` Honnappa Nagarahalli
2019-05-01 3:54 ` [dpdk-dev] [PATCH v9 2/4] test/rcu_qsbr: add API and functional tests Honnappa Nagarahalli
2019-05-01 3:54 ` Honnappa Nagarahalli
2019-05-03 14:31 ` David Marchand
2019-05-03 14:31 ` David Marchand
2019-05-06 23:16 ` Honnappa Nagarahalli
2019-05-06 23:16 ` Honnappa Nagarahalli
2019-05-01 3:54 ` [dpdk-dev] [PATCH v9 3/4] doc/rcu: add lib_rcu documentation Honnappa Nagarahalli
2019-05-01 3:54 ` Honnappa Nagarahalli
2019-05-01 11:37 ` Mcnamara, John
2019-05-01 11:37 ` Mcnamara, John
2019-05-01 21:20 ` Honnappa Nagarahalli
2019-05-01 21:20 ` Honnappa Nagarahalli
2019-05-01 21:32 ` Thomas Monjalon
2019-05-01 21:32 ` Thomas Monjalon
2019-05-01 3:54 ` [dpdk-dev] [PATCH v9 4/4] doc: added RCU to the release notes Honnappa Nagarahalli
2019-05-01 3:54 ` Honnappa Nagarahalli
2019-05-01 11:31 ` Mcnamara, John
2019-05-01 11:31 ` Mcnamara, John
2019-05-01 12:15 ` [dpdk-dev] [PATCH v9 0/4] lib/rcu: add RCU library supporting QSBR mechanism Neil Horman
2019-05-01 12:15 ` Neil Horman
2019-05-01 14:56 ` Honnappa Nagarahalli
2019-05-01 14:56 ` Honnappa Nagarahalli
2019-05-01 18:05 ` Neil Horman
2019-05-01 18:05 ` Neil Horman
2019-05-01 21:18 ` Honnappa Nagarahalli
2019-05-01 21:18 ` Honnappa Nagarahalli
2019-05-01 23:36 ` Thomas Monjalon
2019-05-01 23:36 ` 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=2601191342CEEE43887BDE71AB977258010CEBBBA9@IRSMSX106.ger.corp.intel.com \
--to=konstantin.ananyev@intel.com \
--cc=dev@dpdk.org \
--cc=dharmik.thakkar@arm.com \
--cc=gavin.hu@arm.com \
--cc=honnappa.nagarahalli@arm.com \
--cc=malvika.gupta@arm.com \
--cc=nd@arm.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).