From: Stanislaw Kardach <kda@semihalf.com>
To: Ferruh Yigit <ferruh.yigit@intel.com>
Cc: Michal Krawczyk <mk@semihalf.com>,
dev@dpdk.org, ndagan@amazon.com, gtzalik@amazon.com,
igorch@amazon.com, upstream@semihalf.com,
Shay Agroskin <shayagr@amazon.com>
Subject: Re: [dpdk-dev] [PATCH v3 17/22] net/ena: support SMP for mz alloc counter
Date: Fri, 7 May 2021 19:18:00 +0200 [thread overview]
Message-ID: <20210507171800.rynllyxtpzv2nfxr@toster> (raw)
In-Reply-To: <0acf6ac4-aa08-6f33-75a4-90c76745c97a@intel.com>
On Fri, May 07, 2021 at 05:48:50PM +0100, Ferruh Yigit wrote:
> On 5/6/2021 3:25 PM, Michal Krawczyk wrote:
> > From: Stanislaw Kardach <kda@semihalf.com>
> >
> > Introduce a memory area for ENA driver shared between all the processes
> > of a same prefix (memzone backed).
> > Move the memzone allocation counter for ENA_MEM_ALLOC_COHERENT there so
> > that all processes may utilize it.
>
> Device private data is already shared between primary/secondary processes, why
> not using it, it is already there.
Please correct me if I'm wrong, the dev->data->dev_private is a
per-device space, whereas the memzone here is used as a shared memory
between all ena devices.
More precisely the memzone counter used here is required to wrap some of
the base ena code we are calling and may be called from the context of
any device. Given that memzone names have to be unique, I need this
counter to be unique too.
I believe similar thing is done in mlx5 driver
(mlx5_init_shared_data()). If there is a better way to register such a
shared segment that is going to be preserved until all processes
(primary and secondary) are closed I would be happy to rework this.
>
> Next patch sharing RSS key using this shared area, can you device private data
> so all devices can access it.
It is somewhat similar case. The default key there is generated once for
all devices and then used in each of them.
>
> >
> > Signed-off-by: Stanislaw Kardach <kda@semihalf.com>
> > Reviewed-by: Michal Krawczyk <mk@semihalf.com>
> > Reviewed-by: Igor Chauskin <igorch@amazon.com>
> > Reviewed-by: Shay Agroskin <shayagr@amazon.com>
> > ---
> > drivers/net/ena/base/ena_plat_dpdk.h | 6 ++--
> > drivers/net/ena/ena_ethdev.c | 46 +++++++++++++++++++++++++++-
> > drivers/net/ena/ena_ethdev.h | 8 +++++
> > 3 files changed, 56 insertions(+), 4 deletions(-)
> >
> > diff --git a/drivers/net/ena/base/ena_plat_dpdk.h b/drivers/net/ena/base/ena_plat_dpdk.h
> > index 1d0454bebe..e17970361a 100644
> > --- a/drivers/net/ena/base/ena_plat_dpdk.h
> > +++ b/drivers/net/ena/base/ena_plat_dpdk.h
> > @@ -209,7 +209,7 @@ typedef struct {
> > * Each rte_memzone should have unique name.
> > * To satisfy it, count number of allocations and add it to name.
> > */
> > -extern rte_atomic64_t ena_alloc_cnt;
> > +extern rte_atomic64_t *ena_alloc_cnt;
> >
> > #define ENA_MEM_ALLOC_COHERENT_ALIGNED( \
> > dmadev, size, virt, phys, mem_handle, alignment) \
> > @@ -219,7 +219,7 @@ extern rte_atomic64_t ena_alloc_cnt;
> > if (size > 0) { \
> > char z_name[RTE_MEMZONE_NAMESIZE]; \
> > snprintf(z_name, sizeof(z_name), "ena_alloc_%"PRIi64"",\
> > - rte_atomic64_add_return(&ena_alloc_cnt, 1)); \
> > + rte_atomic64_add_return(ena_alloc_cnt, 1)); \
> > mz = rte_memzone_reserve_aligned(z_name, size, \
> > SOCKET_ID_ANY, RTE_MEMZONE_IOVA_CONTIG,\
> > alignment); \
> > @@ -249,7 +249,7 @@ extern rte_atomic64_t ena_alloc_cnt;
> > if (size > 0) { \
> > char z_name[RTE_MEMZONE_NAMESIZE]; \
> > snprintf(z_name, sizeof(z_name), "ena_alloc_%"PRIi64"",\
> > - rte_atomic64_add_return(&ena_alloc_cnt, 1)); \
> > + rte_atomic64_add_return(ena_alloc_cnt, 1)); \
> > mz = rte_memzone_reserve_aligned(z_name, size, \
> > node, RTE_MEMZONE_IOVA_CONTIG, alignment); \
> > mem_handle = mz; \
> > diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c
> > index 5d107775f4..0780e2fee2 100644
> > --- a/drivers/net/ena/ena_ethdev.c
> > +++ b/drivers/net/ena/ena_ethdev.c
> > @@ -83,11 +83,15 @@ struct ena_stats {
> > /* Device arguments */
> > #define ENA_DEVARG_LARGE_LLQ_HDR "large_llq_hdr"
> >
> > +#define ENA_MZ_SHARED_DATA "ena_shared_data"
> > +
> > /*
> > * Each rte_memzone should have unique name.
> > * To satisfy it, count number of allocation and add it to name.
> > */
> > -rte_atomic64_t ena_alloc_cnt;
> > +rte_atomic64_t *ena_alloc_cnt;
> > +
> > +struct ena_shared_data *ena_shared_data;
> >
> > static const struct ena_stats ena_stats_global_strings[] = {
> > ENA_STAT_GLOBAL_ENTRY(wd_expired),
> > @@ -1752,6 +1756,42 @@ static uint32_t ena_calc_max_io_queue_num(struct ena_com_dev *ena_dev,
> > return max_num_io_queues;
> > }
> >
> > +static void ena_prepare_shared_data(struct ena_shared_data *shared_data)
> > +{
> > + memset(shared_data, 0, sizeof(*shared_data));
> > +}
> > +
> > +static int ena_shared_data_init(void)
> > +{
> > + const struct rte_memzone *mz;
> > +
> > + if (ena_shared_data != NULL)
> > + return 0;
> > +
> > + if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
> > + /* Allocate shared memory. */
> > + mz = rte_memzone_reserve(ENA_MZ_SHARED_DATA,
> > + sizeof(*ena_shared_data),
> > + SOCKET_ID_ANY, 0);
> > + if (mz == NULL) {
> > + PMD_INIT_LOG(CRIT, "Cannot allocate ena shared data");
> > + return -rte_errno;
> > + }
> > + ena_prepare_shared_data(mz->addr);
> > + } else {
> > + /* Lookup allocated shared memory. */
> > + mz = rte_memzone_lookup(ENA_MZ_SHARED_DATA);
> > + if (mz == NULL) {
> > + PMD_INIT_LOG(CRIT, "Cannot attach ena shared data");
> > + return -rte_errno;
> > + }
> > + }
> > + ena_shared_data = mz->addr;
> > + /* Setup ENA_MEM memzone name counter. */
> > + ena_alloc_cnt = &ena_shared_data->mz_alloc_cnt;
> > + return 0;
> > +}
> > +
> > static int eth_ena_dev_init(struct rte_eth_dev *eth_dev)
> > {
> > struct ena_calc_queue_size_ctx calc_queue_ctx = { 0 };
> > @@ -1773,6 +1813,10 @@ static int eth_ena_dev_init(struct rte_eth_dev *eth_dev)
> > eth_dev->tx_pkt_burst = ð_ena_xmit_pkts;
> > eth_dev->tx_pkt_prepare = ð_ena_prep_pkts;
> >
> > + rc = ena_shared_data_init();
> > + if (rc != 0)
> > + return rc;
> > +
> > if (rte_eal_process_type() != RTE_PROC_PRIMARY)
> > return 0;
> >
> > diff --git a/drivers/net/ena/ena_ethdev.h b/drivers/net/ena/ena_ethdev.h
> > index ae235897ee..e8858c6118 100644
> > --- a/drivers/net/ena/ena_ethdev.h
> > +++ b/drivers/net/ena/ena_ethdev.h
> > @@ -207,6 +207,14 @@ struct ena_offloads {
> > bool rx_csum_supported;
> > };
> >
> > +/* Holds data shared between all instances of ENA PMD. */
> > +struct ena_shared_data {
> > + /* Each rte_memzone should have unique name.
> > + * To satisfy it, count number of allocation and add it to name.
> > + */
> > + rte_atomic64_t mz_alloc_cnt;
> > +};
> > +
> > /* board specific private data structure */
> > struct ena_adapter {
> > /* OS defined structs */
> >
>
--
Best Regards,
Stanislaw Kardach
next prev parent reply other threads:[~2021-05-07 17:18 UTC|newest]
Thread overview: 121+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-30 12:57 [dpdk-dev] [PATCH 00/22] net/ena: update ENA PMD to v2.3.0 Michal Krawczyk
2021-04-30 12:57 ` [dpdk-dev] [PATCH 01/22] net/ena: switch memcpy to dpdk-optimized version Michal Krawczyk
2021-04-30 12:57 ` [dpdk-dev] [PATCH 02/22] net/ena/base: unify arg names for the functions Michal Krawczyk
2021-04-30 12:57 ` [dpdk-dev] [PATCH 03/22] net/ena/base: add dev arg to the logging macros Michal Krawczyk
2021-04-30 12:57 ` [dpdk-dev] [PATCH 04/22] net/ena/base: typos, style and comments improvements Michal Krawczyk
2021-04-30 12:57 ` [dpdk-dev] [PATCH 05/22] net/ena/base: fix issues from the static code scan Michal Krawczyk
2021-04-30 12:57 ` [dpdk-dev] [PATCH 06/22] net/ena/base: destroy multiple "wait events" Michal Krawczyk
2021-04-30 12:57 ` [dpdk-dev] [PATCH 07/22] net/ena/base: remove indir table from ENA feat ctx Michal Krawczyk
2021-04-30 12:57 ` [dpdk-dev] [PATCH 08/22] net/ena/base: remove mutable RSS from the host info Michal Krawczyk
2021-04-30 12:57 ` [dpdk-dev] [PATCH 09/22] net/ena/base: update generation date and commit Michal Krawczyk
2021-04-30 12:57 ` [dpdk-dev] [PATCH 10/22] net/ena/base: use rte_prefetch0_write Michal Krawczyk
2021-04-30 12:57 ` [dpdk-dev] [PATCH 11/22] net/ena/base: adjust changes to lastest ena-com Michal Krawczyk
2021-04-30 12:57 ` [dpdk-dev] [PATCH 12/22] net/ena: fix parsing of large_llq_hdr argument Michal Krawczyk
2021-04-30 12:57 ` [dpdk-dev] [PATCH 13/22] net/ena: terminate devargs allowed keys with NULL Michal Krawczyk
2021-04-30 12:57 ` [dpdk-dev] [PATCH 14/22] net/ena: indicate Rx RSS hash presence Michal Krawczyk
2021-04-30 12:57 ` [dpdk-dev] [PATCH 15/22] net/ena: remove endian swap functions Michal Krawczyk
2021-04-30 12:57 ` [dpdk-dev] [PATCH 16/22] net/ena: handle spurious wakeups in ENA_WAIT_EVENT Michal Krawczyk
2021-04-30 12:57 ` [dpdk-dev] [PATCH 17/22] net/ena: support SMP for mz alloc counter Michal Krawczyk
2021-04-30 12:57 ` [dpdk-dev] [PATCH 18/22] net/ena: move default RSS key to shared mem Michal Krawczyk
2021-04-30 12:57 ` [dpdk-dev] [PATCH 19/22] net/ena: make ethdev references smp safe Michal Krawczyk
2021-04-30 12:57 ` [dpdk-dev] [PATCH 20/22] net/ena: disable dev_ops not supported in SMP Michal Krawczyk
2021-04-30 12:57 ` [dpdk-dev] [PATCH 21/22] net/ena: report default ring size Michal Krawczyk
2021-04-30 12:57 ` [dpdk-dev] [PATCH 22/22] net/ena: update version to v2.3.0 Michal Krawczyk
2021-05-05 7:33 ` [dpdk-dev] [PATCH v2 00/22] net/ena: update ENA PMD " Michal Krawczyk
2021-05-05 7:33 ` [dpdk-dev] [PATCH v2 01/22] net/ena: switch memcpy to dpdk-optimized version Michal Krawczyk
2021-05-05 7:33 ` [dpdk-dev] [PATCH v2 02/22] net/ena/base: unify arg names for the functions Michal Krawczyk
2021-05-05 7:33 ` [dpdk-dev] [PATCH v2 03/22] net/ena/base: add dev arg to the logging macros Michal Krawczyk
2021-05-05 7:33 ` [dpdk-dev] [PATCH v2 04/22] net/ena/base: typos, style and comments improvements Michal Krawczyk
2021-05-05 7:33 ` [dpdk-dev] [PATCH v2 05/22] net/ena/base: fix issues from the static code scan Michal Krawczyk
2021-05-05 7:33 ` [dpdk-dev] [PATCH v2 06/22] net/ena/base: destroy multiple "wait events" Michal Krawczyk
2021-05-05 7:33 ` [dpdk-dev] [PATCH v2 07/22] net/ena/base: remove indir table from ENA feat ctx Michal Krawczyk
2021-05-05 7:33 ` [dpdk-dev] [PATCH v2 08/22] net/ena/base: remove mutable RSS from the host info Michal Krawczyk
2021-05-05 7:33 ` [dpdk-dev] [PATCH v2 09/22] net/ena/base: update generation date and commit Michal Krawczyk
2021-05-05 7:33 ` [dpdk-dev] [PATCH v2 10/22] net/ena/base: use rte_prefetch0_write Michal Krawczyk
2021-05-05 7:33 ` [dpdk-dev] [PATCH v2 11/22] net/ena/base: adjust changes to lastest ena-com Michal Krawczyk
2021-05-05 7:33 ` [dpdk-dev] [PATCH v2 12/22] net/ena: fix parsing of large_llq_hdr argument Michal Krawczyk
2021-05-05 7:33 ` [dpdk-dev] [PATCH v2 13/22] net/ena: terminate devargs allowed keys with NULL Michal Krawczyk
2021-05-05 7:33 ` [dpdk-dev] [PATCH v2 14/22] net/ena: indicate Rx RSS hash presence Michal Krawczyk
2021-05-05 7:33 ` [dpdk-dev] [PATCH v2 15/22] net/ena: remove endian swap functions Michal Krawczyk
2021-05-05 7:33 ` [dpdk-dev] [PATCH v2 16/22] net/ena: handle spurious wakeups in ENA_WAIT_EVENT Michal Krawczyk
2021-05-05 7:33 ` [dpdk-dev] [PATCH v2 17/22] net/ena: support SMP for mz alloc counter Michal Krawczyk
2021-05-05 7:33 ` [dpdk-dev] [PATCH v2 18/22] net/ena: move default RSS key to shared mem Michal Krawczyk
2021-05-05 7:33 ` [dpdk-dev] [PATCH v2 19/22] net/ena: make ethdev references smp safe Michal Krawczyk
2021-05-05 7:33 ` [dpdk-dev] [PATCH v2 20/22] net/ena: disable dev_ops not supported in SMP Michal Krawczyk
2021-05-05 7:33 ` [dpdk-dev] [PATCH v2 21/22] net/ena: report default ring size Michal Krawczyk
2021-05-05 7:33 ` [dpdk-dev] [PATCH v2 22/22] net/ena: update version to v2.3.0 Michal Krawczyk
2021-05-06 14:25 ` [dpdk-dev] [PATCH v3 00/22] net/ena: update ENA PMD " Michal Krawczyk
2021-05-06 14:25 ` [dpdk-dev] [PATCH v3 01/22] net/ena: switch memcpy to dpdk-optimized version Michal Krawczyk
2021-05-06 14:25 ` [dpdk-dev] [PATCH v3 02/22] net/ena/base: unify arg names for the functions Michal Krawczyk
2021-05-06 14:25 ` [dpdk-dev] [PATCH v3 03/22] net/ena/base: add dev arg to the logging macros Michal Krawczyk
2021-05-06 14:25 ` [dpdk-dev] [PATCH v3 04/22] net/ena/base: typos, style and comments improvements Michal Krawczyk
2021-05-06 14:25 ` [dpdk-dev] [PATCH v3 05/22] net/ena/base: fix issues from the static code scan Michal Krawczyk
2021-05-06 14:25 ` [dpdk-dev] [PATCH v3 06/22] net/ena/base: destroy multiple "wait events" Michal Krawczyk
2021-05-07 16:47 ` Ferruh Yigit
2021-05-09 14:17 ` Michał Krawczyk
2021-05-06 14:25 ` [dpdk-dev] [PATCH v3 07/22] net/ena/base: remove indir table from ENA feat ctx Michal Krawczyk
2021-05-06 14:25 ` [dpdk-dev] [PATCH v3 08/22] net/ena/base: remove mutable RSS from the host info Michal Krawczyk
2021-05-06 14:25 ` [dpdk-dev] [PATCH v3 09/22] net/ena/base: update generation date and commit Michal Krawczyk
2021-05-06 14:25 ` [dpdk-dev] [PATCH v3 10/22] net/ena/base: use rte_prefetch0_write Michal Krawczyk
2021-05-06 14:25 ` [dpdk-dev] [PATCH v3 11/22] net/ena/base: adjust changes to lastest ena-com Michal Krawczyk
2021-05-06 14:25 ` [dpdk-dev] [PATCH v3 12/22] net/ena: fix parsing of large_llq_hdr argument Michal Krawczyk
2021-05-06 14:25 ` [dpdk-dev] [PATCH v3 13/22] net/ena: terminate devargs allowed keys with NULL Michal Krawczyk
2021-05-07 16:47 ` [dpdk-dev] [dpdk-stable] " Ferruh Yigit
2021-05-06 14:25 ` [dpdk-dev] [PATCH v3 14/22] net/ena: indicate Rx RSS hash presence Michal Krawczyk
2021-05-07 16:47 ` [dpdk-dev] [dpdk-stable] " Ferruh Yigit
2021-05-09 14:20 ` Michał Krawczyk
2021-05-06 14:25 ` [dpdk-dev] [PATCH v3 15/22] net/ena: remove endian swap functions Michal Krawczyk
2021-05-06 14:25 ` [dpdk-dev] [PATCH v3 16/22] net/ena: handle spurious wakeups in ENA_WAIT_EVENT Michal Krawczyk
2021-05-07 16:55 ` Ferruh Yigit
2021-05-06 14:25 ` [dpdk-dev] [PATCH v3 17/22] net/ena: support SMP for mz alloc counter Michal Krawczyk
2021-05-07 16:48 ` Ferruh Yigit
2021-05-07 17:18 ` Stanislaw Kardach [this message]
2021-05-09 13:41 ` Ferruh Yigit
2021-05-10 8:18 ` Stanislaw Kardach
2021-05-06 14:25 ` [dpdk-dev] [PATCH v3 18/22] net/ena: move default RSS key to shared mem Michal Krawczyk
2021-05-10 8:27 ` Stanislaw Kardach
2021-05-06 14:25 ` [dpdk-dev] [PATCH v3 19/22] net/ena: make ethdev references smp safe Michal Krawczyk
2021-05-07 16:49 ` Ferruh Yigit
2021-05-09 14:40 ` Michał Krawczyk
2021-05-06 14:25 ` [dpdk-dev] [PATCH v3 20/22] net/ena: disable dev_ops not supported in SMP Michal Krawczyk
2021-05-06 14:25 ` [dpdk-dev] [PATCH v3 21/22] net/ena: report default ring size Michal Krawczyk
2021-05-06 14:25 ` [dpdk-dev] [PATCH v3 22/22] net/ena: update version to v2.3.0 Michal Krawczyk
2021-05-07 16:50 ` Ferruh Yigit
2021-05-09 14:33 ` Michał Krawczyk
2021-05-07 14:59 ` [dpdk-dev] [PATCH v3 00/22] net/ena: update ENA PMD " Ferruh Yigit
2021-05-07 15:07 ` Ferruh Yigit
2021-05-10 12:02 ` Michał Krawczyk
2021-05-10 12:27 ` Ferruh Yigit
2021-05-11 6:45 ` [dpdk-dev] [PATCH v4 00/19] " Michal Krawczyk
2021-05-11 6:45 ` [dpdk-dev] [PATCH v4 01/19] net/ena: switch memcpy to dpdk-optimized version Michal Krawczyk
2021-05-11 6:45 ` [dpdk-dev] [PATCH v4 02/19] net/ena/base: unify arg names for the functions Michal Krawczyk
2021-05-11 6:45 ` [dpdk-dev] [PATCH v4 03/19] net/ena/base: add dev arg to the logging macros Michal Krawczyk
2021-05-11 6:45 ` [dpdk-dev] [PATCH v4 04/19] net/ena/base: style and comments improvements Michal Krawczyk
2021-05-11 6:45 ` [dpdk-dev] [PATCH v4 05/19] net/ena/base: fix issues from the static code scan Michal Krawczyk
2021-05-11 6:45 ` [dpdk-dev] [PATCH v4 06/19] net/ena/base: destroy multiple "wait events" Michal Krawczyk
2021-05-11 6:45 ` [dpdk-dev] [PATCH v4 07/19] net/ena/base: remove indir table from ENA feat ctx Michal Krawczyk
2021-05-11 6:45 ` [dpdk-dev] [PATCH v4 08/19] net/ena/base: remove mutable RSS from the host info Michal Krawczyk
2021-05-11 6:45 ` [dpdk-dev] [PATCH v4 09/19] net/ena/base: use rte prefetch0 write Michal Krawczyk
2021-05-11 6:45 ` [dpdk-dev] [PATCH v4 10/19] net/ena/base: adjust changes to lastest ena-com Michal Krawczyk
2021-05-11 6:45 ` [dpdk-dev] [PATCH v4 11/19] net/ena: fix parsing of large LLQ header devarg Michal Krawczyk
2021-05-12 17:48 ` [dpdk-dev] [dpdk-stable] " Thomas Monjalon
2021-05-11 6:45 ` [dpdk-dev] [PATCH v4 12/19] net/ena: terminate devargs allowed keys with null Michal Krawczyk
2021-05-11 6:45 ` [dpdk-dev] [PATCH v4 13/19] net/ena: indicate Rx RSS hash presence Michal Krawczyk
2021-05-11 12:16 ` Ferruh Yigit
2021-05-11 6:45 ` [dpdk-dev] [PATCH v4 14/19] net/ena: remove endian swap functions Michal Krawczyk
2021-05-11 6:45 ` [dpdk-dev] [PATCH v4 15/19] net/ena: handle spurious wakeups in ENA wait event Michal Krawczyk
2021-05-11 6:45 ` [dpdk-dev] [PATCH v4 16/19] net/ena: make ethdev references SMP safe Michal Krawczyk
2021-05-11 12:22 ` Ferruh Yigit
2021-05-11 6:45 ` [dpdk-dev] [PATCH v4 17/19] net/ena: disable dev ops not supported in SMP Michal Krawczyk
2021-05-11 12:29 ` Ferruh Yigit
2021-05-11 6:45 ` [dpdk-dev] [PATCH v4 18/19] net/ena: report default ring size Michal Krawczyk
2021-05-11 6:45 ` [dpdk-dev] [PATCH v4 19/19] net/ena: update version to v2.3.0 Michal Krawczyk
2021-05-11 13:07 ` [dpdk-dev] [PATCH v4 00/19] net/ena: update ENA PMD " Ferruh Yigit
2021-05-11 13:34 ` Michał Krawczyk
2021-05-12 10:13 ` [dpdk-dev] [PATCH v5 0/3] " Michal Krawczyk
2021-05-12 10:13 ` [dpdk-dev] [PATCH v5 1/3] net/ena: indicate Rx RSS hash presence Michal Krawczyk
2021-05-12 10:13 ` [dpdk-dev] [PATCH v5 2/3] net/ena: make ethdev references multiprocess safe Michal Krawczyk
2021-05-12 10:13 ` [dpdk-dev] [PATCH v5 3/3] net/ena: disable dev ops not supported by secondary process Michal Krawczyk
2021-05-12 12:20 ` [dpdk-dev] [PATCH v5 0/3] net/ena: update ENA PMD to v2.3.0 Ferruh Yigit
2021-05-07 15:52 ` [dpdk-dev] [PATCH v3 00/22] " Ferruh Yigit
2021-05-09 14:15 ` Michał Krawczyk
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=20210507171800.rynllyxtpzv2nfxr@toster \
--to=kda@semihalf.com \
--cc=dev@dpdk.org \
--cc=ferruh.yigit@intel.com \
--cc=gtzalik@amazon.com \
--cc=igorch@amazon.com \
--cc=mk@semihalf.com \
--cc=ndagan@amazon.com \
--cc=shayagr@amazon.com \
--cc=upstream@semihalf.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).