From: Jerin Jacob <jerinjacobk@gmail.com>
To: David Marchand <david.marchand@redhat.com>,
"McDaniel, Timothy" <timothy.mcdaniel@intel.com>
Cc: dpdk-dev <dev@dpdk.org>, Jerin Jacob <jerinj@marvell.com>,
Pavan Nikhilesh <pbhagavatula@marvell.com>,
Liang Ma <liang.j.ma@intel.com>,
Peter Mccarthy <peter.mccarthy@intel.com>,
Harry van Haaren <harry.van.haaren@intel.com>,
Ray Kinsella <mdr@ashroe.eu>,
Neil Horman <nhorman@tuxdriver.com>
Subject: Re: [dpdk-dev] [PATCH 7/8] event: switch sequence number to dynamic field
Date: Wed, 28 Oct 2020 12:57:15 +0530 [thread overview]
Message-ID: <CALBAE1MBLSg31JjYsMDtzNAj1SmvYtyfGhZ5PiSStmL9wCMuaQ@mail.gmail.com> (raw)
In-Reply-To: <20201027221343.28551-8-david.marchand@redhat.com>
On Wed, Oct 28, 2020 at 3:46 AM David Marchand
<david.marchand@redhat.com> wrote:
>
> The eventdev drivers have been hacking the deprecated field seqn for
> internal test usage.
> It is moved to a dynamic mbuf field in order to allow removal of seqn.
>
> Signed-off-by: David Marchand <david.marchand@redhat.com>
Overall looks good some minor comments:
# use eventdev: instead of event: in git commit
> ---
> app/test-eventdev/evt_main.c | 3 ++
> app/test-eventdev/test_order_common.c | 2 +-
> app/test-eventdev/test_order_common.h | 5 ++-
> drivers/event/octeontx/ssovf_evdev_selftest.c | 32 ++++++++--------
> drivers/event/octeontx2/otx2_evdev_selftest.c | 31 +++++++--------
> drivers/event/opdl/opdl_test.c | 8 ++--
> drivers/event/sw/sw_evdev_selftest.c | 34 +++++++++--------
> lib/librte_eventdev/rte_eventdev.c | 21 +++++++++-
> lib/librte_eventdev/rte_eventdev.h | 38 ++++++++++++++++---
> lib/librte_eventdev/version.map | 2 +
> 10 files changed, 116 insertions(+), 60 deletions(-)
>
> diff --git a/app/test-eventdev/evt_main.c b/app/test-eventdev/evt_main.c
> index a8d304bab3..832bb21d7c 100644
> --- a/app/test-eventdev/evt_main.c
> +++ b/app/test-eventdev/evt_main.c
> @@ -89,6 +89,9 @@ main(int argc, char **argv)
> if (!evdevs)
> rte_panic("no eventdev devices found\n");
>
> + if (rte_event_test_seqn_dynfield_register() < 0)
> + rte_panic("failed to register event dev sequence number\n");
> +
> /* Populate the default values of the options */
> evt_options_default(&opt);
>
> diff --git a/app/test-eventdev/test_order_common.c b/app/test-eventdev/test_order_common.c
> index c5f7317440..d15ff80273 100644
> --- a/app/test-eventdev/test_order_common.c
> +++ b/app/test-eventdev/test_order_common.c
> @@ -50,7 +50,7 @@ order_producer(void *arg)
>
> const flow_id_t flow = (uintptr_t)m % nb_flows;
> /* Maintain seq number per flow */
> - m->seqn = producer_flow_seq[flow]++;
> + *rte_event_test_seqn(m) = producer_flow_seq[flow]++;
> flow_id_save(flow, m, &ev);
>
> while (rte_event_enqueue_burst(dev_id, port, &ev, 1) != 1) {
> diff --git a/app/test-eventdev/test_order_common.h b/app/test-eventdev/test_order_common.h
> index 9e3415e421..d4ad31da46 100644
> --- a/app/test-eventdev/test_order_common.h
> +++ b/app/test-eventdev/test_order_common.h
> @@ -89,9 +89,10 @@ order_process_stage_1(struct test_order *const t,
> {
> const uint32_t flow = (uintptr_t)ev->mbuf % nb_flows;
> /* compare the seqn against expected value */
> - if (ev->mbuf->seqn != expected_flow_seq[flow]) {
> + if (*rte_event_test_seqn(ev->mbuf) != expected_flow_seq[flow]) {
> evt_err("flow=%x seqn mismatch got=%x expected=%x",
> - flow, ev->mbuf->seqn, expected_flow_seq[flow]);
> + flow, *rte_event_test_seqn(ev->mbuf),
> + expected_flow_seq[flow]);
> t->err = true;
> rte_smp_wmb();
> }
# Since rte_event_test_seqn_dynfield_register() is the public API, I
would like to limit the scope
only to self test so that rte_event_test_seqn_dynfield_register()
need not be exposed.
Could you have a separate application-specific dynamic field here?
# Also this patch used in fastpath, better to have offset stored in
fastpath cache line.
see http://mails.dpdk.org/archives/dev/2020-October/189588.html
> +#define RTE_EVENT_TEST_SEQN_DYNFIELD_NAME "rte_event_test_seqn_dynfield"
> +int rte_event_test_seqn_dynfield_offset = -1;
> +
> +int
> +rte_event_test_seqn_dynfield_register(void)
> +{
> + static const struct rte_mbuf_dynfield event_test_seqn_dynfield_desc = {
> + .name = RTE_EVENT_TEST_SEQN_DYNFIELD_NAME,
> + .size = sizeof(rte_event_test_seqn_t),
> + .align = __alignof__(rte_event_test_seqn_t),
> + };
> + rte_event_test_seqn_dynfield_offset =
> + rte_mbuf_dynfield_register(&event_test_seqn_dynfield_desc);
> + return rte_event_test_seqn_dynfield_offset;
> +}
> +
> int
> rte_event_eth_rx_adapter_caps_get(uint8_t dev_id, uint16_t eth_port_id,
> uint32_t *caps)
> @@ -1247,8 +1263,11 @@ int rte_event_dev_selftest(uint8_t dev_id)
> RTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);
> struct rte_eventdev *dev = &rte_eventdevs[dev_id];
>
> - if (dev->dev_ops->dev_selftest != NULL)
> + if (dev->dev_ops->dev_selftest != NULL) {
> + if (rte_event_test_seqn_dynfield_register() < 0)
> + return -ENOMEM;
> return (*dev->dev_ops->dev_selftest)();
> + }
> return -ENOTSUP;
> }
>
> diff --git a/lib/librte_eventdev/rte_eventdev.h b/lib/librte_eventdev/rte_eventdev.h
> index ce1fc2ce0f..1656ff8dce 100644
> --- a/lib/librte_eventdev/rte_eventdev.h
> +++ b/lib/librte_eventdev/rte_eventdev.h
> @@ -211,13 +211,15 @@ extern "C" {
> #endif
>
> #include <rte_common.h>
> +#include <rte_compat.h>
> #include <rte_config.h>
> +#include <rte_mbuf.h>
> +#include <rte_mbuf_dyn.h>
> #include <rte_memory.h>
> #include <rte_errno.h>
>
> #include "rte_eventdev_trace_fp.h"
>
> -struct rte_mbuf; /* we just use mbuf pointers; no need to include rte_mbuf.h */
> struct rte_event;
>
> /* Event device capability bitmap flags */
> @@ -570,9 +572,9 @@ struct rte_event_queue_conf {
> */
> uint32_t nb_atomic_order_sequences;
> /**< The maximum number of outstanding events waiting to be
> - * reordered by this queue. In other words, the number of entries in
> - * this queue’s reorder buffer.When the number of events in the
> - * reorder buffer reaches to *nb_atomic_order_sequences* then the
> + * event_tested by this queue. In other words, the number of entries in
> + * this queue’s event_test buffer.When the number of events in the
> + * event_test buffer reaches to *nb_atomic_order_sequences* then the
> * scheduler cannot schedule the events from this queue and invalid
> * event will be returned from dequeue until one or more entries are
> * freed up/released.
> @@ -935,7 +937,7 @@ rte_event_dev_close(uint8_t dev_id);
> * Event ordering is based on the received event(s), but also other
> * (newly allocated or stored) events are ordered when enqueued within the same
> * ordered context. Events not enqueued (e.g. released or stored) within the
> - * context are considered missing from reordering and are skipped at this time
> + * context are considered missing from event_testing and are skipped at this time
> * (but can be ordered again within another context).
> *
> * @see rte_event_queue_setup(), rte_event_dequeue_burst(), RTE_EVENT_OP_RELEASE
> @@ -1021,7 +1023,7 @@ rte_event_dev_close(uint8_t dev_id);
> * then this function hints the scheduler that the user has done all that need
> * to maintain event order in the current ordered context.
> * The scheduler is allowed to release the ordered context of this port and
> - * avoid reordering any following enqueues.
> + * avoid event_testing any following enqueues.
> *
> * Early ordered context release may increase parallelism and thus system
> * performance.
> @@ -1111,6 +1113,30 @@ struct rte_event {
> };
> };
>
> +typedef uint32_t rte_event_test_seqn_t;
> +extern int rte_event_test_seqn_dynfield_offset;
> +
> +/**
> + * @warning
> + * @b EXPERIMENTAL: this API may change without prior notice
> + *
> + * Read test sequence number from mbuf.
> + *
> + * @param mbuf Structure to read from.
> + * @return pointer to test sequence number.
> + */
> +__rte_experimental
> +static inline rte_event_test_seqn_t *
> +rte_event_test_seqn(const struct rte_mbuf *mbuf)
> +{
> + return RTE_MBUF_DYNFIELD(mbuf, rte_event_test_seqn_dynfield_offset,
> + rte_event_test_seqn_t *);
> +}
> +
> +__rte_experimental
> +int
> +rte_event_test_seqn_dynfield_register(void);
> +
> /* Ethdev Rx adapter capability bitmap flags */
> #define RTE_EVENT_ETH_RX_ADAPTER_CAP_INTERNAL_PORT 0x1
> /**< This flag is sent when the packet transfer mechanism is in HW.
> diff --git a/lib/librte_eventdev/version.map b/lib/librte_eventdev/version.map
> index 8ae8420f9b..e49382ba99 100644
> --- a/lib/librte_eventdev/version.map
> +++ b/lib/librte_eventdev/version.map
> @@ -138,4 +138,6 @@ EXPERIMENTAL {
> __rte_eventdev_trace_port_setup;
> # added in 20.11
> rte_event_pmd_pci_probe_named;
> + rte_event_test_seqn_dynfield_offset;
> + rte_event_test_seqn_dynfield_register;
Could you change symbol name to rte_event_dev_selftest_seqn_dynfield_offset()
to limit the scope only to self test. also, it is not required to expose
rte_event_test_seqn_dynfield_register() in that case.
> };
> --
> 2.23.0
>
next prev parent reply other threads:[~2020-10-28 7:27 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-27 22:13 [dpdk-dev] [PATCH 0/8] remove mbuf seqn David Marchand
2020-10-27 22:13 ` [dpdk-dev] [PATCH 1/8] event/dpaa2: remove dead code David Marchand
2020-10-27 22:13 ` [dpdk-dev] [PATCH 2/8] crypto/scheduler: remove unused internal seqn David Marchand
2020-10-27 22:13 ` [dpdk-dev] [PATCH 3/8] net/ark: remove use of seqn for debug David Marchand
2020-10-28 12:19 ` Ed Czeck
2020-10-27 22:13 ` [dpdk-dev] [PATCH 4/8] reorder: switch sequence number to dynamic mbuf field David Marchand
2020-10-27 22:13 ` [dpdk-dev] [PATCH 5/8] dpaa: switch sequence number to dynamic field David Marchand
2020-10-27 22:13 ` [dpdk-dev] [PATCH 6/8] fslmc: " David Marchand
2020-10-27 22:13 ` [dpdk-dev] [PATCH 7/8] event: " David Marchand
2020-10-27 22:18 ` David Marchand
2020-10-28 7:27 ` Jerin Jacob [this message]
2020-10-28 8:55 ` David Marchand
2020-10-28 9:09 ` Jerin Jacob
2020-10-27 22:13 ` [dpdk-dev] [PATCH 8/8] mbuf: remove seqn field David Marchand
2020-10-28 10:27 ` Andrew Rybchenko
2020-10-28 12:20 ` [dpdk-dev] [PATCH v2 0/9] remove mbuf seqn David Marchand
2020-10-28 12:20 ` [dpdk-dev] [PATCH v2 1/9] event/dpaa2: remove dead code David Marchand
2020-10-31 18:28 ` Nipun Gupta
2020-10-28 12:20 ` [dpdk-dev] [PATCH v2 2/9] crypto/scheduler: remove unused internal seqn David Marchand
2020-10-28 12:20 ` [dpdk-dev] [PATCH v2 3/9] net/ark: remove use of seqn for debug David Marchand
2020-10-28 12:20 ` [dpdk-dev] [PATCH v2 4/9] reorder: switch sequence number to dynamic mbuf field David Marchand
2020-10-28 12:54 ` Andrew Rybchenko
2020-10-28 12:20 ` [dpdk-dev] [PATCH v2 5/9] dpaa: " David Marchand
2020-10-28 12:20 ` [dpdk-dev] [PATCH v2 6/9] fslmc: " David Marchand
2020-10-28 12:20 ` [dpdk-dev] [PATCH v2 7/9] eventdev: " David Marchand
2020-10-28 12:20 ` [dpdk-dev] [PATCH v2 8/9] app/eventdev: " David Marchand
2020-10-28 12:20 ` [dpdk-dev] [PATCH v2 9/9] mbuf: remove seqn field David Marchand
2020-10-31 21:09 ` Thomas Monjalon
2020-10-31 21:11 ` [dpdk-dev] [PATCH v2 0/9] remove mbuf seqn 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=CALBAE1MBLSg31JjYsMDtzNAj1SmvYtyfGhZ5PiSStmL9wCMuaQ@mail.gmail.com \
--to=jerinjacobk@gmail.com \
--cc=david.marchand@redhat.com \
--cc=dev@dpdk.org \
--cc=harry.van.haaren@intel.com \
--cc=jerinj@marvell.com \
--cc=liang.j.ma@intel.com \
--cc=mdr@ashroe.eu \
--cc=nhorman@tuxdriver.com \
--cc=pbhagavatula@marvell.com \
--cc=peter.mccarthy@intel.com \
--cc=timothy.mcdaniel@intel.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).