DPDK patches and discussions
 help / color / mirror / Atom feed
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
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
>

  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

DPDK patches and discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \
		dev@dpdk.org
	public-inbox-index dev

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://inbox.dpdk.org/inbox.dpdk.dev


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git