From: Neil Horman <nhorman@tuxdriver.com>
To: John McNamara <john.mcnamara@intel.com>
Cc: dev@dpdk.org
Subject: Re: [dpdk-dev] [PATCH 2/3] ethdev: Add in data rxtx callback support
Date: Thu, 12 Feb 2015 16:12:15 -0500 [thread overview]
Message-ID: <20150212211215.GA5920@neilslaptop.think-freely.org> (raw)
In-Reply-To: <1423771077-13665-3-git-send-email-john.mcnamara@intel.com>
On Thu, Feb 12, 2015 at 07:57:56PM +0000, John McNamara wrote:
> From: Richardson, Bruce <bruce.richardson@intel.com>
>
> Add in support for inline processing of packets inside the RX or
> TX call. For an RX callback, what happens is that we get a set of
> packets from the NIC and then pass them to a callback function, if
> configured, to allow additional processing to be done on them, e.g.
> filling in more mbuf fields, before passing back to the application.
> On TX, the packets are similarly post-processed before being handed
> to the NIC for transmission.
>
> Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
> ---
> lib/librte_ether/rte_ethdev.c | 165 +++++++++++++++++++++++++++++++++++++-
> lib/librte_ether/rte_ethdev.h | 175 ++++++++++++++++++++++++++++++++++++++++-
> 2 files changed, 334 insertions(+), 6 deletions(-)
>
> diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
> index e4b3315..944737e 100644
> --- a/lib/librte_ether/rte_ethdev.c
> +++ b/lib/librte_ether/rte_ethdev.c
> @@ -337,6 +337,15 @@ rte_eth_dev_rx_queue_config(struct rte_eth_dev *dev, uint16_t nb_queues)
> dev->data->nb_rx_queues = 0;
> return -(ENOMEM);
> }
> + dev->rx_cbs = rte_zmalloc("ethdev->rx_cbs",
> + sizeof(*dev->rx_cbs) * nb_queues,
> + RTE_CACHE_LINE_SIZE);
> + if (dev->rx_cbs == NULL) {
> + rte_free(dev->data->rx_queues);
> + dev->data->rx_queues = NULL;
> + dev->data->nb_rx_queues = 0;
> + return -(ENOMEM);
> + }
> } else { /* re-configure */
> FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rx_queue_release, -ENOTSUP);
>
> @@ -348,10 +357,18 @@ rte_eth_dev_rx_queue_config(struct rte_eth_dev *dev, uint16_t nb_queues)
> RTE_CACHE_LINE_SIZE);
> if (rxq == NULL)
> return -(ENOMEM);
> + dev->rx_cbs = rte_realloc(dev->rx_cbs, sizeof(*dev->rx_cbs) *
> + nb_queues, RTE_CACHE_LINE_SIZE);
> + if (dev->rx_cbs == NULL)
> + return -(ENOMEM);
>
> - if (nb_queues > old_nb_queues)
> + if (nb_queues > old_nb_queues) {
> + uint16_t new_qs = nb_queues - old_nb_queues;
> memset(rxq + old_nb_queues, 0,
> - sizeof(rxq[0]) * (nb_queues - old_nb_queues));
> + sizeof(rxq[0]) * new_qs);
> + memset(dev->rx_cbs + old_nb_queues, 0,
> + sizeof(dev->rx_cbs[0]) * new_qs);
> + }
>
> dev->data->rx_queues = rxq;
>
> @@ -479,6 +496,15 @@ rte_eth_dev_tx_queue_config(struct rte_eth_dev *dev, uint16_t nb_queues)
> dev->data->nb_tx_queues = 0;
> return -(ENOMEM);
> }
> + dev->tx_cbs = rte_zmalloc("ethdev->tx_cbs",
> + sizeof(*dev->tx_cbs) * nb_queues,
> + RTE_CACHE_LINE_SIZE);
> + if (dev->tx_cbs == NULL) {
> + rte_free(dev->data->tx_queues);
> + dev->data->tx_queues = NULL;
> + dev->data->nb_tx_queues = 0;
> + return -(ENOMEM);
> + }
> } else { /* re-configure */
> FUNC_PTR_OR_ERR_RET(*dev->dev_ops->tx_queue_release, -ENOTSUP);
>
> @@ -490,10 +516,19 @@ rte_eth_dev_tx_queue_config(struct rte_eth_dev *dev, uint16_t nb_queues)
> RTE_CACHE_LINE_SIZE);
> if (txq == NULL)
> return -(ENOMEM);
> + dev->tx_cbs = rte_realloc(dev->tx_cbs, sizeof(*dev->tx_cbs) *
> + nb_queues, RTE_CACHE_LINE_SIZE);
> + if (dev->tx_cbs == NULL)
> + return -(ENOMEM);
> +
>
> - if (nb_queues > old_nb_queues)
> + if (nb_queues > old_nb_queues) {
> + uint16_t new_qs = nb_queues - old_nb_queues;
> memset(txq + old_nb_queues, 0,
> - sizeof(txq[0]) * (nb_queues - old_nb_queues));
> + sizeof(txq[0]) * new_qs);
> + memset(dev->tx_cbs + old_nb_queues, 0,
> + sizeof(dev->tx_cbs[0]) * new_qs);
> + }
>
> dev->data->tx_queues = txq;
>
> @@ -3253,3 +3288,125 @@ rte_eth_dev_filter_ctrl(uint8_t port_id, enum rte_filter_type filter_type,
> FUNC_PTR_OR_ERR_RET(*dev->dev_ops->filter_ctrl, -ENOTSUP);
> return (*dev->dev_ops->filter_ctrl)(dev, filter_type, filter_op, arg);
> }
> +
> +void *
> +rte_eth_add_rx_callback(uint8_t port_id, uint16_t queue_id,
> + rte_rxtx_callback_fn fn, void *user_param)
> +{
These, and its companion manipulator functions need to be added to the ABI
versioning scripts. As it currently stands this won't be exposed in a shared
build, and so the examples won't build.
Neil
next prev parent reply other threads:[~2015-02-12 21:12 UTC|newest]
Thread overview: 73+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-22 16:47 [dpdk-dev] [PATCH RFC 0/3] DPDK ethdev " Bruce Richardson
2014-12-22 16:47 ` [dpdk-dev] [PATCH RFC 1/3] ethdev: rename callbacks field to intr_cbs Bruce Richardson
2014-12-22 16:47 ` [dpdk-dev] [PATCH RFC 2/3] ethdev: Add in data rxtx callback support Bruce Richardson
2014-12-22 16:47 ` [dpdk-dev] [PATCH RFC 3/3] examples: example showing use of callbacks Bruce Richardson
2014-12-22 17:02 ` [dpdk-dev] [PATCH RFC 0/3] DPDK ethdev callback support Thomas Monjalon
2014-12-22 17:33 ` Bruce Richardson
2014-12-22 17:47 ` Neil Horman
2014-12-23 9:28 ` Bruce Richardson
2014-12-23 13:09 ` Neil Horman
2014-12-23 14:09 ` Bruce Richardson
2015-01-05 16:17 ` Bruce Richardson
2014-12-22 18:31 ` Stephen Hemminger
2014-12-23 9:29 ` Bruce Richardson
2014-12-23 4:23 ` Vithal S Mohare
2014-12-23 9:30 ` Bruce Richardson
2014-12-23 9:37 ` Vithal S Mohare
2014-12-24 1:43 ` Zhang, Helin
2014-12-24 5:06 ` Qiu, Michael
2015-02-12 19:57 ` [dpdk-dev] [PATCH " John McNamara
2015-02-12 19:57 ` [dpdk-dev] [PATCH 1/3] ethdev: rename callbacks field to intr_cbs John McNamara
2015-02-12 19:57 ` [dpdk-dev] [PATCH 2/3] ethdev: Add in data rxtx callback support John McNamara
2015-02-12 21:12 ` Neil Horman [this message]
2015-02-12 19:57 ` [dpdk-dev] [PATCH 3/3] examples: example showing use of callbacks John McNamara
2015-02-13 14:54 ` [dpdk-dev] [PATCH 0/3] DPDK ethdev callback support Declan Doherty
2015-02-13 15:39 ` [dpdk-dev] [PATCH v2 0/4] " John McNamara
2015-02-13 15:39 ` [dpdk-dev] [PATCH v2 1/4] ethdev: rename callbacks field to intr_cbs John McNamara
2015-02-13 16:06 ` Thomas Monjalon
2015-02-13 16:52 ` Thomas Monjalon
2015-02-13 15:39 ` [dpdk-dev] [PATCH v2 2/4] ethdev: Add in data rxtx callback support John McNamara
2015-02-13 16:33 ` Thomas Monjalon
2015-02-13 17:49 ` Bruce Richardson
2015-02-13 15:39 ` [dpdk-dev] [PATCH v2 3/4] examples: example showing use of callbacks John McNamara
2015-02-13 16:02 ` Thomas Monjalon
2015-02-16 14:33 ` Olivier MATZ
2015-02-16 15:16 ` Bruce Richardson
2015-02-16 17:34 ` Thomas Monjalon
2015-02-17 12:17 ` Declan Doherty
2015-02-17 12:25 ` Bruce Richardson
2015-02-17 13:28 ` Olivier MATZ
2015-02-17 13:50 ` Bruce Richardson
2015-02-17 15:49 ` Neil Horman
2015-02-17 16:00 ` Bruce Richardson
2015-02-17 16:08 ` Neil Horman
2015-02-17 16:15 ` Bruce Richardson
2015-02-17 19:27 ` Neil Horman
2015-02-17 15:32 ` Thomas Monjalon
2015-02-17 15:58 ` Bruce Richardson
2015-02-13 15:39 ` [dpdk-dev] [PATCH v2 4/4] abi: Added rxtx callback functions to ABI versioning John McNamara
2015-02-13 15:59 ` Thomas Monjalon
2015-02-13 15:48 ` [dpdk-dev] [PATCH v2 0/4] DPDK ethdev callback support Declan Doherty
2015-02-18 17:42 ` [dpdk-dev] [PATCH v3 0/3] " John McNamara
2015-02-18 17:42 ` [dpdk-dev] [PATCH v3 1/3] ethdev: Rename callbacks field to link_intr_cbs John McNamara
2015-02-18 17:42 ` [dpdk-dev] [PATCH v3 2/3] ethdev: Add rxtx callback support John McNamara
2015-02-18 18:19 ` Thomas Monjalon
2015-02-19 9:33 ` Mcnamara, John
2015-02-18 17:42 ` [dpdk-dev] [PATCH v3 3/3] examples: example showing use of callbacks John McNamara
2015-02-19 17:56 ` [dpdk-dev] [PATCH v4 0/3] DPDK ethdev callback support John McNamara
2015-02-19 17:56 ` [dpdk-dev] [PATCH v4 1/3] ethdev: rename callbacks field to link_intr_cbs John McNamara
2015-02-19 17:56 ` [dpdk-dev] [PATCH v4 2/3] ethdev: add optional rxtx callback support John McNamara
2015-02-20 10:06 ` Bruce Richardson
2015-02-20 10:31 ` Thomas Monjalon
2015-02-19 17:56 ` [dpdk-dev] [PATCH v4 3/3] examples: example showing use of callbacks John McNamara
2015-02-20 17:03 ` [dpdk-dev] [PATCH v5 0/3] DPDK ethdev callback support John McNamara
2015-02-20 17:03 ` [dpdk-dev] [PATCH v5 1/3] ethdev: rename callbacks field to link_intr_cbs John McNamara
2015-02-20 17:03 ` [dpdk-dev] [PATCH v5 2/3] ethdev: add optional rxtx callback support John McNamara
2015-02-23 15:11 ` Thomas Monjalon
2015-02-23 17:27 ` Mcnamara, John
2015-02-20 17:03 ` [dpdk-dev] [PATCH v5 3/3] examples: example showing use of callbacks John McNamara
2015-02-23 18:30 ` [dpdk-dev] [PATCH v6 0/3] DPDK ethdev callback support John McNamara
2015-02-23 18:30 ` [dpdk-dev] [PATCH v6 1/3] ethdev: rename callbacks field to link_intr_cbs John McNamara
2015-02-23 18:30 ` [dpdk-dev] [PATCH v6 2/3] ethdev: add optional rxtx callback support John McNamara
2015-02-23 18:30 ` [dpdk-dev] [PATCH v6 3/3] examples: example showing use of callbacks John McNamara
2015-02-23 23:39 ` [dpdk-dev] [PATCH v6 0/3] DPDK ethdev callback support 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=20150212211215.GA5920@neilslaptop.think-freely.org \
--to=nhorman@tuxdriver.com \
--cc=dev@dpdk.org \
--cc=john.mcnamara@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).