From: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
To: Harman Kalra <hkalra@marvell.com>
Cc: <dev@dpdk.org>, Thomas Monjalon <thomas@monjalon.net>,
Ray Kinsella <mdr@ashroe.eu>, <david.marchand@redhat.com>
Subject: Re: [dpdk-dev] [PATCH v4 2/7] eal/interrupts: implement get set APIs
Date: Wed, 20 Oct 2021 19:15:07 +0300 [thread overview]
Message-ID: <20211020191442.6f8953f6@sovereign> (raw)
In-Reply-To: <20211019183543.132084-3-hkalra@marvell.com>
Hello Harman,
This patch looks good to me, there are just some tiny comments inline.
2021-10-20 00:05 (UTC+0530), Harman Kalra:
> [...]
> +/* Macros to check for valid port */
> +#define CHECK_VALID_INTR_HANDLE(intr_handle) do { \
> + if (intr_handle == NULL) { \
> + RTE_LOG(ERR, EAL, "Interrupt instance unallocated\n"); \
> + rte_errno = EINVAL; \
> + goto fail; \
> + } \
> +} while (0)
In most cases "goto fail" could be "return -rte_errno".
How about this (feel free to ignore)?
#define CHECK_VALID_INTR_HANDLE_RET(intr_handle) do { \
CHECK_VALID_INTR_HANDLE(intr_handle); \
fail: \
return -rte_errno; \
} while (0)
> [...]
> +struct rte_intr_handle *rte_intr_instance_alloc(void)
> +{
> + struct rte_intr_handle *intr_handle;
> + bool is_rte_memory;
> +
> + /* Detect if DPDK malloc APIs are ready to be used. */
> + is_rte_memory = rte_malloc_is_ready();
> + if (is_rte_memory)
> + intr_handle = rte_zmalloc(NULL, sizeof(struct
> rte_intr_handle),
> + 0);
> + else
> + intr_handle = calloc(1, sizeof(struct rte_intr_handle));
Nit: sizeof(*intr_handle).
> + if (!intr_handle) {
intr_handle == NULL
> + RTE_LOG(ERR, EAL, "Fail to allocate intr_handle\n");
> + rte_errno = ENOMEM;
> + return NULL;
> + }
> +
> + intr_handle->nb_intr = RTE_MAX_RXTX_INTR_VEC_ID;
> + intr_handle->is_rte_memory = is_rte_memory;
> +
> + return intr_handle;
> +}
> +
[...]
> +
> +void rte_intr_instance_free(struct rte_intr_handle *intr_handle)
> +{
> + if (intr_handle) {
intr_handle != NULL
> + if (intr_handle->is_rte_memory)
> + rte_free(intr_handle);
> + else
> + free(intr_handle);
> + }
> +}
[...]
> +
> +int rte_intr_elist_index_set(struct rte_intr_handle *intr_handle,
> + int index, struct rte_epoll_event elist)
> +{
> + CHECK_VALID_INTR_HANDLE(intr_handle);
> +
> + if (index >= intr_handle->nb_intr) {
> + RTE_LOG(ERR, EAL, "Invalid size %d, max limit %d\n", index,
> + intr_handle->nb_intr);
Which "size"?
> + rte_errno = ERANGE;
> + goto fail;
> + }
> +
> + intr_handle->elist[index] = elist;
> +
> + return 0;
> +fail:
> + return -rte_errno;
> +}
> +
[...]
> +int rte_intr_vec_list_index_get(const struct rte_intr_handle *intr_handle,
> + int index)
> +{
> + CHECK_VALID_INTR_HANDLE(intr_handle);
> +
> + if (!intr_handle->intr_vec) {
> + RTE_LOG(ERR, EAL, "Intr vector list not allocated\n");
> + rte_errno = ENOTSUP;
> + goto fail;
> + }
Can be RTE_ASSERT(), because vec_list_size will be 0 in this case.
> +
> + if (index > intr_handle->vec_list_size) {
> + RTE_LOG(ERR, EAL, "Index %d greater than vec list size %d\n",
> + index, intr_handle->vec_list_size);
> + rte_errno = ERANGE;
> + goto fail;
> + }
> +
> + return intr_handle->intr_vec[index];
> +fail:
> + return -rte_errno;
> +}
> +
> +int rte_intr_vec_list_index_set(struct rte_intr_handle *intr_handle,
> + int index, int vec)
> +{
> + CHECK_VALID_INTR_HANDLE(intr_handle);
> +
> + if (!intr_handle->intr_vec) {
> + RTE_LOG(ERR, EAL, "Intr vector list not allocated\n");
> + rte_errno = ENOTSUP;
> + goto fail;
> + }
Same here.
> +
> + if (index > intr_handle->vec_list_size) {
> + RTE_LOG(ERR, EAL, "Index %d greater than vec list size %d\n",
> + index, intr_handle->vec_list_size);
> + rte_errno = ERANGE;
> + goto fail;
> + }
> +
> + intr_handle->intr_vec[index] = vec;
> +
> + return 0;
> +fail:
> + return -rte_errno;
> +}
> +
> +void rte_intr_vec_list_free(struct rte_intr_handle *intr_handle)
> +{
> + if (intr_handle) {
> + rte_free(intr_handle->intr_vec);
> + intr_handle->intr_vec = NULL;
intr_handle->vec_list_size = 0;
> + }
> +}
> +
[...]
> diff --git a/lib/eal/include/rte_interrupts.h b/lib/eal/include/rte_interrupts.h
[...]
> +/**
> + * @warning
> + * @b EXPERIMENTAL: this API may change without prior notice
> + *
> + * It allocates memory for interrupt instance. API auto detects if memory
> + * for the instance should be allocated using DPDK memory management library
> + * APIs or normal heap allocation, based on if DPDK memory subsystem is
> + * initialized and ready to be used.
This is too much implementation detail and not very specific from user PoV.
Suggestion:
After rte_eal_init() has finished, it allocates from DDPK heap,
otherwise it allocates from normal heap. In particular,
it allocates from the normal heap during initial bus scanning.
See also my reply to v3 regarding allocation.
> + *
> + * Default memory allocation for event fds and epoll event array is done which
> + * can be realloced later as per the requirement.
BTW, why do this?
> + *
> + * This function should be called from application or driver, before calling any
> + * of the interrupt APIs.
> + *
> + * @return
> + * - On success, address of first interrupt handle.
Not "first".
> + * - On failure, NULL.
> + */
> +__rte_experimental
> +struct rte_intr_handle *
> +rte_intr_instance_alloc(void);
> +
> +/**
> + * @warning
> + * @b EXPERIMENTAL: this API may change without prior notice
> + *
> + * This API is used to free the memory allocated for interrupt handle resources.
> + *
> + * @param intr_handle
> + * Base address of interrupt handle array.
Not "array".
> + *
> + */
> +__rte_experimental
> +void
> +rte_intr_instance_free(struct rte_intr_handle *intr_handle);
> +
> +/**
> + * @warning
> + * @b EXPERIMENTAL: this API may change without prior notice
> + *
> + * This API is used to set the fd field of interrupt handle with user provided
> + * file descriptor.
> + *
> + * @param intr_handle
> + * pointer to the interrupt handle.
> + * @param fd
> + * file descriptor value provided by user.
> + *
> + * @return
> + * - On success, zero.
> + * - On failure, a negative value.
+ "and rte_errno is set" here and in other places.
[...]
> +/**
> + * @internal
> + * This API is used to populate interrupt handle, with src handler fields.
Comma is not needed.
> + *
> + * @param intr_handle
> + * Start address of interrupt handles
It's a single handle.
> + * @param src
> + * Source interrupt handle to be cloned.
> + *
> + * @return
> + * - On success, zero.
> + * - On failure, a negative value.
> + */
> +__rte_internal
> +int
> +rte_intr_instance_copy(struct rte_intr_handle *intr_handle,
> + const struct rte_intr_handle *src);
> +
[...]
> +/**
> + * @internal
> + * This API is used to set the event fd counter size field of interrupt handle
> + * with user provided efd counter size.
> + *
> + * @param intr_handle
> + * pointer to the interrupt handle.
> + * @param efd_counter_size
> + * size of efd counter, used for vdev
No need to mention vdev.
> + *
> + * @return
> + * - On success, zero.
> + * - On failure, a negative value.
> + */
> +__rte_internal
> +int
> +rte_intr_efd_counter_size_set(struct rte_intr_handle *intr_handle,
> + uint8_t efd_counter_size);
> +
[...]
> +/**
> + * @internal
> + * Freeing the memory allocated for interrupt vector list array.
"Freeing" -> "Frees"
> + *
> + * @param intr_handle
> + * pointer to the interrupt handle.
> + *
> + * @return
> + * - On success, zero
> + * - On failure, a negative value.
> + */
> +__rte_internal
> +void
> +rte_intr_vec_list_free(struct rte_intr_handle *intr_handle);
> +
> +/**
> + * @internal
> + * Reallocates the size efds and elist array based on size provided by user.
> + * By default efds and elist array are allocated with default size
> + * RTE_MAX_RXTX_INTR_VEC_ID on interrupt handle array creation. Later on device
> + * probe, device may have capability of more interrupts than
> + * RTE_MAX_RXTX_INTR_VEC_ID. Hence using this API, PMDs can reallocate the
"Hence" word is unexpected, I think it should be removed.
> + * arrays as per the max interrupts capability of device.
> + *
> + * @param intr_handle
> + * pointer to the interrupt handle.
> + * @param size
> + * efds and elist array size.
> + *
> + * @return
> + * - On success, zero
> + * - On failure, a negative value.
> + */
> +__rte_internal
> +int
> +rte_intr_event_list_update(struct rte_intr_handle *intr_handle, int size);
> +
[...]
next prev parent reply other threads:[~2021-10-20 16:15 UTC|newest]
Thread overview: 152+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-26 14:57 [dpdk-dev] [RFC 0/7] make rte_intr_handle internal Harman Kalra
2021-08-26 14:57 ` [dpdk-dev] [RFC 1/7] eal: interrupt handle API prototypes Harman Kalra
2021-08-31 15:52 ` Kinsella, Ray
2021-08-26 14:57 ` [dpdk-dev] [RFC 2/7] eal/interrupts: implement get set APIs Harman Kalra
2021-08-31 15:53 ` Kinsella, Ray
2021-08-26 14:57 ` [dpdk-dev] [RFC 3/7] eal/interrupts: avoid direct access to interrupt handle Harman Kalra
2021-08-26 14:57 ` [dpdk-dev] [RFC 4/7] test/interrupt: apply get set interrupt handle APIs Harman Kalra
2021-08-26 14:57 ` [dpdk-dev] [RFC 5/7] drivers: remove direct access to interrupt handle fields Harman Kalra
2021-08-26 14:57 ` [dpdk-dev] [RFC 6/7] eal/interrupts: make interrupt handle structure opaque Harman Kalra
2021-08-26 14:57 ` [dpdk-dev] [RFC 7/7] eal/alarm: introduce alarm fini routine Harman Kalra
2021-09-03 12:40 ` [dpdk-dev] [PATCH v1 0/7] make rte_intr_handle internal Harman Kalra
2021-09-03 12:40 ` [dpdk-dev] [PATCH v1 1/7] eal: interrupt handle API prototypes Harman Kalra
2021-09-03 12:40 ` [dpdk-dev] [PATCH v1 2/7] eal/interrupts: implement get set APIs Harman Kalra
2021-09-28 15:46 ` David Marchand
2021-10-04 8:51 ` [dpdk-dev] [EXT] " Harman Kalra
2021-10-04 9:57 ` David Marchand
2021-10-12 15:22 ` Thomas Monjalon
2021-10-13 17:54 ` Harman Kalra
2021-10-13 17:57 ` Harman Kalra
2021-10-13 18:52 ` Thomas Monjalon
2021-10-14 8:22 ` Thomas Monjalon
2021-10-14 9:31 ` Harman Kalra
2021-10-14 9:37 ` David Marchand
2021-10-14 9:41 ` Thomas Monjalon
2021-10-14 10:31 ` Harman Kalra
2021-10-14 10:35 ` Thomas Monjalon
2021-10-14 10:44 ` Harman Kalra
2021-10-14 12:04 ` Thomas Monjalon
2021-10-14 10:25 ` Dmitry Kozlyuk
2021-10-03 18:05 ` [dpdk-dev] " Dmitry Kozlyuk
2021-10-04 10:37 ` [dpdk-dev] [EXT] " Harman Kalra
2021-10-04 11:18 ` Dmitry Kozlyuk
2021-10-04 14:03 ` Harman Kalra
2021-09-03 12:40 ` [dpdk-dev] [PATCH v1 3/7] eal/interrupts: avoid direct access to interrupt handle Harman Kalra
2021-09-03 12:40 ` [dpdk-dev] [PATCH v1 4/7] test/interrupt: apply get set interrupt handle APIs Harman Kalra
2021-09-03 12:41 ` [dpdk-dev] [PATCH v1 5/7] drivers: remove direct access to interrupt handle fields Harman Kalra
2021-09-03 12:41 ` [dpdk-dev] [PATCH v1 6/7] eal/interrupts: make interrupt handle structure opaque Harman Kalra
2021-10-03 18:16 ` Dmitry Kozlyuk
2021-10-04 14:09 ` [dpdk-dev] [EXT] " Harman Kalra
2021-09-03 12:41 ` [dpdk-dev] [PATCH v1 7/7] eal/alarm: introduce alarm fini routine Harman Kalra
2021-09-15 14:13 ` [dpdk-dev] [PATCH v1 0/7] make rte_intr_handle internal Harman Kalra
2021-09-23 8:20 ` David Marchand
2021-10-05 12:14 ` [dpdk-dev] [PATCH v2 0/6] " Harman Kalra
2021-10-05 12:14 ` [dpdk-dev] [PATCH v2 1/6] eal/interrupts: implement get set APIs Harman Kalra
2021-10-14 0:58 ` Dmitry Kozlyuk
2021-10-14 17:15 ` [dpdk-dev] [EXT] " Harman Kalra
2021-10-14 17:53 ` Dmitry Kozlyuk
2021-10-15 7:53 ` Thomas Monjalon
2021-10-14 7:31 ` [dpdk-dev] " David Marchand
2021-10-05 12:14 ` [dpdk-dev] [PATCH v2 2/6] eal/interrupts: avoid direct access to interrupt handle Harman Kalra
2021-10-14 0:59 ` Dmitry Kozlyuk
2021-10-14 17:31 ` [dpdk-dev] [EXT] " Harman Kalra
2021-10-14 17:53 ` Dmitry Kozlyuk
2021-10-05 12:14 ` [dpdk-dev] [PATCH v2 3/6] test/interrupt: apply get set interrupt handle APIs Harman Kalra
2021-10-05 12:15 ` [dpdk-dev] [PATCH v2 4/6] drivers: remove direct access to interrupt handle Harman Kalra
2021-10-05 12:15 ` [dpdk-dev] [PATCH v2 5/6] eal/interrupts: make interrupt handle structure opaque Harman Kalra
2021-10-05 12:15 ` [dpdk-dev] [PATCH v2 6/6] eal/alarm: introduce alarm fini routine Harman Kalra
2021-10-05 16:07 ` [dpdk-dev] [RFC 0/7] make rte_intr_handle internal Stephen Hemminger
2021-10-07 10:57 ` [dpdk-dev] [EXT] " Harman Kalra
2021-10-18 19:37 ` [dpdk-dev] [PATCH v3 " Harman Kalra
2021-10-18 19:37 ` [dpdk-dev] [PATCH v3 1/7] malloc: introduce malloc is ready API Harman Kalra
2021-10-19 15:53 ` Thomas Monjalon
2021-10-18 19:37 ` [dpdk-dev] [PATCH v3 2/7] eal/interrupts: implement get set APIs Harman Kalra
2021-10-18 22:07 ` Dmitry Kozlyuk
2021-10-19 8:50 ` [dpdk-dev] [EXT] " Harman Kalra
2021-10-19 18:44 ` Harman Kalra
2021-10-18 22:56 ` [dpdk-dev] " Stephen Hemminger
2021-10-19 8:32 ` [dpdk-dev] [EXT] " Harman Kalra
2021-10-19 15:58 ` Thomas Monjalon
2021-10-20 15:30 ` Dmitry Kozlyuk
2021-10-21 9:16 ` Harman Kalra
2021-10-21 12:33 ` Dmitry Kozlyuk
2021-10-21 13:32 ` David Marchand
2021-10-21 16:05 ` Harman Kalra
2021-10-18 19:37 ` [dpdk-dev] [PATCH v3 3/7] eal/interrupts: avoid direct access to interrupt handle Harman Kalra
2021-10-18 19:37 ` [dpdk-dev] [PATCH v3 4/7] test/interrupt: apply get set interrupt handle APIs Harman Kalra
2021-10-18 19:37 ` [dpdk-dev] [PATCH v3 5/7] drivers: remove direct access to interrupt handle Harman Kalra
2021-10-18 19:37 ` [dpdk-dev] [PATCH v3 6/7] eal/interrupts: make interrupt handle structure opaque Harman Kalra
2021-10-18 19:37 ` [dpdk-dev] [PATCH v3 7/7] eal/alarm: introduce alarm fini routine Harman Kalra
2021-10-19 18:35 ` [dpdk-dev] [PATCH v4 0/7] make rte_intr_handle internal Harman Kalra
2021-10-19 18:35 ` [dpdk-dev] [PATCH v4 1/7] malloc: introduce malloc is ready API Harman Kalra
2021-10-19 22:01 ` Dmitry Kozlyuk
2021-10-19 22:04 ` Dmitry Kozlyuk
2021-10-20 9:01 ` [dpdk-dev] [EXT] " Harman Kalra
2021-10-19 18:35 ` [dpdk-dev] [PATCH v4 2/7] eal/interrupts: implement get set APIs Harman Kalra
2021-10-20 6:14 ` David Marchand
2021-10-20 14:29 ` Dmitry Kozlyuk
2021-10-20 16:15 ` Dmitry Kozlyuk [this message]
2021-10-19 18:35 ` [dpdk-dev] [PATCH v4 3/7] eal/interrupts: avoid direct access to interrupt handle Harman Kalra
2021-10-19 21:27 ` Dmitry Kozlyuk
2021-10-20 9:25 ` [dpdk-dev] [EXT] " Harman Kalra
2021-10-20 9:52 ` Dmitry Kozlyuk
2021-10-19 18:35 ` [dpdk-dev] [PATCH v4 4/7] test/interrupt: apply get set interrupt handle APIs Harman Kalra
2021-10-19 18:35 ` [dpdk-dev] [PATCH v4 5/7] drivers: remove direct access to interrupt handle Harman Kalra
2021-10-20 1:57 ` Hyong Youb Kim (hyonkim)
2021-10-19 18:35 ` [dpdk-dev] [PATCH v4 6/7] eal/interrupts: make interrupt handle structure opaque Harman Kalra
2021-10-19 18:35 ` [dpdk-dev] [PATCH v4 7/7] eal/alarm: introduce alarm fini routine Harman Kalra
2021-10-19 21:39 ` Dmitry Kozlyuk
2021-10-22 20:49 ` [dpdk-dev] [PATCH v5 0/6] make rte_intr_handle internal Harman Kalra
2021-10-22 20:49 ` [dpdk-dev] [PATCH v5 1/6] eal/interrupts: implement get set APIs Harman Kalra
2021-10-22 23:33 ` Dmitry Kozlyuk
2021-10-22 20:49 ` [dpdk-dev] [PATCH v5 2/6] eal/interrupts: avoid direct access to interrupt handle Harman Kalra
2021-10-22 23:33 ` Dmitry Kozlyuk
2021-10-22 20:49 ` [dpdk-dev] [PATCH v5 3/6] test/interrupt: apply get set interrupt handle APIs Harman Kalra
2021-10-22 20:49 ` [dpdk-dev] [PATCH v5 4/6] drivers: remove direct access to interrupt handle Harman Kalra
2021-10-22 20:49 ` [dpdk-dev] [PATCH v5 5/6] eal/interrupts: make interrupt handle structure opaque Harman Kalra
2021-10-22 23:33 ` Dmitry Kozlyuk
2021-10-22 20:49 ` [dpdk-dev] [PATCH v5 6/6] eal/alarm: introduce alarm fini routine Harman Kalra
2021-10-22 23:33 ` Dmitry Kozlyuk
2021-10-22 23:37 ` Dmitry Kozlyuk
2021-10-24 20:04 ` [dpdk-dev] [PATCH v6 0/9] make rte_intr_handle internal David Marchand
2021-10-24 20:04 ` [dpdk-dev] [PATCH v6 1/9] interrupts: add allocator and accessors David Marchand
2021-10-24 20:04 ` [dpdk-dev] [PATCH v6 2/9] interrupts: remove direct access to interrupt handle David Marchand
2021-10-25 6:57 ` David Marchand
2021-10-24 20:04 ` [dpdk-dev] [PATCH v6 3/9] test/interrupts: " David Marchand
2021-10-24 20:04 ` [dpdk-dev] [PATCH v6 4/9] alarm: " David Marchand
2021-10-25 10:49 ` Dmitry Kozlyuk
2021-10-25 11:09 ` David Marchand
2021-10-24 20:04 ` [dpdk-dev] [PATCH v6 5/9] lib: " David Marchand
2021-10-24 20:04 ` [dpdk-dev] [PATCH v6 6/9] drivers: " David Marchand
2021-10-24 20:04 ` [dpdk-dev] [PATCH v6 7/9] interrupts: make interrupt handle structure opaque David Marchand
2021-10-24 20:04 ` [dpdk-dev] [PATCH v6 8/9] interrupts: rename device specific file descriptor David Marchand
2021-10-24 20:04 ` [dpdk-dev] [PATCH v6 9/9] interrupts: extend event list David Marchand
2021-10-25 10:49 ` Dmitry Kozlyuk
2021-10-25 11:11 ` David Marchand
2021-10-25 13:04 ` [dpdk-dev] [PATCH v5 0/6] make rte_intr_handle internal Raslan Darawsheh
2021-10-25 13:09 ` David Marchand
2021-10-25 13:34 ` [dpdk-dev] [PATCH v7 0/9] " David Marchand
2021-10-25 13:34 ` [dpdk-dev] [PATCH v7 1/9] interrupts: add allocator and accessors David Marchand
2021-10-25 13:34 ` [dpdk-dev] [PATCH v7 2/9] interrupts: remove direct access to interrupt handle David Marchand
2021-10-25 13:34 ` [dpdk-dev] [PATCH v7 3/9] test/interrupts: " David Marchand
2021-10-25 13:34 ` [dpdk-dev] [PATCH v7 4/9] alarm: " David Marchand
2021-10-25 13:34 ` [dpdk-dev] [PATCH v7 5/9] lib: " David Marchand
2021-10-28 6:14 ` Jiang, YuX
2021-10-25 13:34 ` [dpdk-dev] [PATCH v7 6/9] drivers: " David Marchand
2021-10-25 13:34 ` [dpdk-dev] [PATCH v7 7/9] interrupts: make interrupt handle structure opaque David Marchand
2021-10-25 13:34 ` [dpdk-dev] [PATCH v7 8/9] interrupts: rename device specific file descriptor David Marchand
2021-10-25 13:34 ` [dpdk-dev] [PATCH v7 9/9] interrupts: extend event list David Marchand
2021-10-25 14:27 ` [dpdk-dev] [PATCH v8 0/9] make rte_intr_handle internal David Marchand
2021-10-25 14:27 ` [dpdk-dev] [PATCH v8 1/9] interrupts: add allocator and accessors David Marchand
2021-10-25 14:27 ` [dpdk-dev] [PATCH v8 2/9] interrupts: remove direct access to interrupt handle David Marchand
2021-10-25 14:27 ` [dpdk-dev] [PATCH v8 3/9] test/interrupts: " David Marchand
2021-10-25 14:27 ` [dpdk-dev] [PATCH v8 4/9] alarm: " David Marchand
2021-10-25 14:27 ` [dpdk-dev] [PATCH v8 5/9] lib: " David Marchand
2021-10-25 14:27 ` [dpdk-dev] [PATCH v8 6/9] drivers: " David Marchand
2021-10-25 14:27 ` [dpdk-dev] [PATCH v8 7/9] interrupts: make interrupt handle structure opaque David Marchand
2021-10-25 14:27 ` [dpdk-dev] [PATCH v8 8/9] interrupts: rename device specific file descriptor David Marchand
2021-10-25 14:27 ` [dpdk-dev] [PATCH v8 9/9] interrupts: extend event list David Marchand
2021-10-28 15:58 ` Ji, Kai
2021-10-28 17:16 ` David Marchand
2021-10-25 14:32 ` [dpdk-dev] [PATCH v8 0/9] make rte_intr_handle internal Raslan Darawsheh
2021-10-25 19:24 ` David Marchand
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=20211020191442.6f8953f6@sovereign \
--to=dmitry.kozliuk@gmail.com \
--cc=david.marchand@redhat.com \
--cc=dev@dpdk.org \
--cc=hkalra@marvell.com \
--cc=mdr@ashroe.eu \
--cc=thomas@monjalon.net \
/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).