From: "Gonzalez Monroy, Sergio" <sergio.gonzalez.monroy@intel.com>
To: "Zhou, Danny" <danny.zhou@intel.com>,
Neil Horman <nhorman@tuxdriver.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>
Subject: Re: [dpdk-dev] [PATCH v3 1/5] ethdev: add rx interrupt enable/disable functions
Date: Thu, 19 Feb 2015 08:21:40 +0000 [thread overview]
Message-ID: <54E59D14.4040703@intel.com> (raw)
In-Reply-To: <DFDF335405C17848924A094BC35766CF0AAA2882@SHSMSX104.ccr.corp.intel.com>
On 19/02/2015 08:06, Zhou, Danny wrote:
>
>> -----Original Message-----
>> From: Neil Horman [mailto:nhorman@tuxdriver.com]
>> Sent: Tuesday, February 17, 2015 11:53 PM
>> To: Zhou, Danny
>> Cc: dev@dpdk.org
>> Subject: Re: [dpdk-dev] [PATCH v3 1/5] ethdev: add rx interrupt enable/disable functions
>>
>> On Tue, Feb 17, 2015 at 09:47:15PM +0800, Zhou Danny wrote:
>>> v3 changes
>>> - Add return value for interrupt enable/disable functions
>>>
>>> Add two dev_ops functions to enable and disable rx queue interrupts
>>>
>>> Signed-off-by: Danny Zhou <danny.zhou@intel.com>
>>> Tested-by: Yong Liu <yong.liu@intel.com>
>>> ---
>>> lib/librte_ether/rte_ethdev.c | 43 ++++++++++++++++++++++++++++++++
>>> lib/librte_ether/rte_ethdev.h | 57 +++++++++++++++++++++++++++++++++++++++++++
>>> 2 files changed, 100 insertions(+)
>>>
>>> diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
>>> index ea3a1fb..d27469a 100644
>>> --- a/lib/librte_ether/rte_ethdev.c
>>> +++ b/lib/librte_ether/rte_ethdev.c
>>> @@ -2825,6 +2825,49 @@ _rte_eth_dev_callback_process(struct rte_eth_dev *dev,
>>> }
>>> rte_spinlock_unlock(&rte_eth_dev_cb_lock);
>>> }
>>> +
>>> +int
>>> +rte_eth_dev_rx_queue_intr_enable(uint8_t port_id,
>>> + uint16_t queue_id)
>>> +{
>>> + struct rte_eth_dev *dev;
>>> +
>>> + if (port_id >= nb_ports) {
>>> + PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
>>> + return (-ENODEV);
>>> + }
>>> +
>>> + dev = &rte_eth_devices[port_id];
>>> + if (dev == NULL) {
>>> + PMD_DEBUG_TRACE("Invalid port device\n");
>>> + return (-ENODEV);
>>> + }
>>> +
>>> + FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rx_queue_intr_enable, -ENOTSUP);
>>> + return (*dev->dev_ops->rx_queue_intr_enable)(dev, queue_id);
>>> +}
>>> +
>>> +int
>>> +rte_eth_dev_rx_queue_intr_disable(uint8_t port_id,
>>> + uint16_t queue_id)
>>> +{
>>> + struct rte_eth_dev *dev;
>>> +
>>> + if (port_id >= nb_ports) {
>>> + PMD_DEBUG_TRACE("Invalid port_id=%d\n", port_id);
>>> + return (-ENODEV);
>>> + }
>>> +
>>> + dev = &rte_eth_devices[port_id];
>>> + if (dev == NULL) {
>>> + PMD_DEBUG_TRACE("Invalid port device\n");
>>> + return (-ENODEV);
>>> + }
>>> +
>>> + FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rx_queue_intr_disable, -ENOTSUP);
>>> + return (*dev->dev_ops->rx_queue_intr_disable)(dev, queue_id);
>>> +}
>>> +
>>> #ifdef RTE_NIC_BYPASS
>>> int rte_eth_dev_bypass_init(uint8_t port_id)
>>> {
>>> diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h
>>> index 84160c3..0f320a9 100644
>>> --- a/lib/librte_ether/rte_ethdev.h
>>> +++ b/lib/librte_ether/rte_ethdev.h
>>> @@ -848,6 +848,8 @@ struct rte_eth_fdir {
>>> struct rte_intr_conf {
>>> /** enable/disable lsc interrupt. 0 (default) - disable, 1 enable */
>>> uint16_t lsc;
>>> + /** enable/disable rxq interrupt. 0 (default) - disable, 1 enable */
>>> + uint16_t rxq;
>>> };
>>>
>>> /**
>>> @@ -1109,6 +1111,14 @@ typedef int (*eth_tx_queue_setup_t)(struct rte_eth_dev *dev,
>>> const struct rte_eth_txconf *tx_conf);
>>> /**< @internal Setup a transmit queue of an Ethernet device. */
>>>
>>> +typedef int (*eth_rx_enable_intr_t)(struct rte_eth_dev *dev,
>>> + uint16_t rx_queue_id);
>>> +/**< @internal Enable interrupt of a receive queue of an Ethernet device. */
>>> +
>>> +typedef int (*eth_rx_disable_intr_t)(struct rte_eth_dev *dev,
>>> + uint16_t rx_queue_id);
>>> +/**< @internal Disable interrupt of a receive queue of an Ethernet device. */
>>> +
>>> typedef void (*eth_queue_release_t)(void *queue);
>>> /**< @internal Release memory resources allocated by given RX/TX queue. */
>>>
>>> @@ -1445,6 +1455,8 @@ struct eth_dev_ops {
>>> eth_queue_start_t tx_queue_start;/**< Start TX for a queue.*/
>>> eth_queue_stop_t tx_queue_stop;/**< Stop TX for a queue.*/
>>> eth_rx_queue_setup_t rx_queue_setup;/**< Set up device RX queue.*/
>>> + eth_rx_enable_intr_t rx_queue_intr_enable; /**< Enable Rx queue interrupt. */
>>> + eth_rx_disable_intr_t rx_queue_intr_disable; /**< Disable Rx queue interrupt.*/
>>> eth_queue_release_t rx_queue_release;/**< Release RX queue.*/
>>> eth_rx_queue_count_t rx_queue_count; /**< Get Rx queue count. */
>>> eth_rx_descriptor_done_t rx_descriptor_done; /**< Check rxd DD bit */
>>> @@ -2811,6 +2823,51 @@ void _rte_eth_dev_callback_process(struct rte_eth_dev *dev,
>>> enum rte_eth_event_type event);
>>>
>>> /**
>>> + * When there is no rx packet coming in Rx Queue for a long time, we can
>>> + * sleep lcore related to RX Queue for power saving, and enable rx interrupt
>>> + * to be triggered when rx packect arrives.
>>> + *
>>> + * The rte_eth_dev_rx_queue_intr_enable() function enables rx queue
>>> + * interrupt on specific rx queue of a port.
>>> + *
>>> + * @param port_id
>>> + * The port identifier of the Ethernet device.
>>> + * @param queue_id
>>> + * The index of the receive queue from which to retrieve input packets.
>>> + * The value must be in the range [0, nb_rx_queue - 1] previously supplied
>>> + * to rte_eth_dev_configure().
>>> + * @return
>>> + * - (0) if successful.
>>> + * - (-ENOTSUP) if underlying hardware OR driver doesn't support
>>> + * that operation.
>>> + * - (-ENODEV) if *port_id* invalid.
>>> + */
>>> +int rte_eth_dev_rx_queue_intr_enable(uint8_t port_id,
>>> + uint16_t queue_id);
>>> +
>>> +/**
>>> + * When lcore wakes up from rx interrupt indicating packet coming, disable rx
>>> + * interrupt and returns to polling mode.
>>> + *
>>> + * The rte_eth_dev_rx_queue_intr_disable() function disables rx queue
>>> + * interrupt on specific rx queue of a port.
>>> + *
>>> + * @param port_id
>>> + * The port identifier of the Ethernet device.
>>> + * @param queue_id
>>> + * The index of the receive queue from which to retrieve input packets.
>>> + * The value must be in the range [0, nb_rx_queue - 1] previously supplied
>>> + * to rte_eth_dev_configure().
>>> + * @return
>>> + * - (0) if successful.
>>> + * - (-ENOTSUP) if underlying hardware OR driver doesn't support
>>> + * that operation.
>>> + * - (-ENODEV) if *port_id* invalid.
>>> + */
>>> +int rte_eth_dev_rx_queue_intr_disable(uint8_t port_id,
>>> + uint16_t queue_id);
>>> +
>>> +/**
>>> * Turn on the LED on the Ethernet device.
>>> * This function turns on the LED on the Ethernet device.
>>> *
>>> --
>>> 1.8.1.4
>>>
>>>
>> Need to export these functions
>> Neil
> Sorry, I do not get it. What do you mean export these functions? They have been
> declared in rte_ethdev.h and defined here in rte_ethdev.c. And caller in
> L3fwd-power example is able to link those two functions in the library.
Hi Danny,
I think what he meant is that you need to add them to the version map
file so they are accessible when building shared libraries.
Sergio
next prev parent reply other threads:[~2015-02-19 8:22 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-17 13:47 [dpdk-dev] [PATCH v3 0/5] Interrupt mode PMD Zhou Danny
2015-02-17 13:47 ` [dpdk-dev] [PATCH v3 1/5] ethdev: add rx interrupt enable/disable functions Zhou Danny
2015-02-17 15:52 ` Neil Horman
2015-02-19 8:06 ` Zhou, Danny
2015-02-19 8:21 ` Gonzalez Monroy, Sergio [this message]
2015-02-19 8:34 ` Zhou, Danny
2015-02-19 13:09 ` Neil Horman
2015-02-19 13:15 ` Zhou, Danny
2015-02-17 15:54 ` Neil Horman
2015-02-19 7:58 ` Zhou, Danny
2015-02-19 13:02 ` Neil Horman
2015-02-17 13:47 ` [dpdk-dev] [PATCH v3 2/5] ixgbe: enable rx queue interrupts for both PF and VF Zhou Danny
2015-02-17 13:47 ` [dpdk-dev] [PATCH v3 3/5] igb: enable rx queue interrupts for PF Zhou Danny
2015-02-17 13:47 ` [dpdk-dev] [PATCH v3 4/5] eal: add per rx queue interrupt handling based on VFIO Zhou Danny
2015-02-17 15:58 ` Neil Horman
2015-02-19 8:10 ` Zhou, Danny
2015-02-19 13:04 ` Neil Horman
2015-02-17 13:47 ` [dpdk-dev] [PATCH v3 5/5] l3fwd-power: enable one-shot rx interrupt and polling/interrupt mode switch Zhou Danny
2015-02-18 1:51 ` [dpdk-dev] [PATCH v3 0/5] Interrupt mode PMD Liang, Cunming
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=54E59D14.4040703@intel.com \
--to=sergio.gonzalez.monroy@intel.com \
--cc=danny.zhou@intel.com \
--cc=dev@dpdk.org \
--cc=nhorman@tuxdriver.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).