All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/8] interrupt mode for e1000
@ 2015-10-29  9:18 Yong Liu
  2015-10-29  9:18 ` [PATCH v3 1/8] e1000: add rx interrupt support Yong Liu
                   ` (8 more replies)
  0 siblings, 9 replies; 10+ messages in thread
From: Yong Liu @ 2015-10-29  9:18 UTC (permalink / raw)
  To: dev

This patch set will enable interrup for physical and emulated e1000 device.
Rx queue interrupt will work with uio driver or vfio driver with msi mode.
l3fwd-power will disable interrupt immediately when wake-up for that e1000 not
support interrupt auto clear.
LSC and rxq interrupt will be seperated for e1000 can only support one
interrupt cause in the same time.

The patch set is developed based on one previous patch set
"[PATCH v1 00/11] interrupt mode for i40e"
http://www.dpdk.org/ml/archives/dev/2015-September/023903.html

v3 changes:
    add in release note

v2 changes:
    describe interrupt mode work with uio and vfio+msi
    replace attribuite __unused__ with __rte_unused

Marvin Liu (8):
  e1000: add rx interrupt support
  e1000: separate lsc and rxq interrupt disable function
  e1000: add ethdev rxq enable and disable function
  e1000: add rxq interrupt handler
  e1000: check lsc and rxq not enable in the same time
  e1000: lsc interrupt setup function only enable itself
  l3fwd-power: disable interrupt when wake up from sleep
  doc: release note update for e1000 intr mode

 doc/guides/rel_notes/release_2_2.rst |   1 +
 drivers/net/e1000/em_ethdev.c        | 181 +++++++++++++++++++++++++++++++----
 examples/l3fwd-power/main.c          |   1 +
 3 files changed, 164 insertions(+), 19 deletions(-)

-- 
1.9.3

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH v3 1/8] e1000: add rx interrupt support
  2015-10-29  9:18 [PATCH v3 0/8] interrupt mode for e1000 Yong Liu
@ 2015-10-29  9:18 ` Yong Liu
  2015-10-29  9:18 ` [PATCH v3 2/8] e1000: separate lsc and rxq interrupt disable function Yong Liu
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Yong Liu @ 2015-10-29  9:18 UTC (permalink / raw)
  To: dev

Enable rx interrupt support on e1000 physical and emulated device.

Signed-off-by: Marvin Liu <yong.liu@intel.com>

diff --git a/drivers/net/e1000/em_ethdev.c b/drivers/net/e1000/em_ethdev.c
index 912f5dd..3be8269 100644
--- a/drivers/net/e1000/em_ethdev.c
+++ b/drivers/net/e1000/em_ethdev.c
@@ -81,6 +81,7 @@ static int eth_em_flow_ctrl_get(struct rte_eth_dev *dev,
 static int eth_em_flow_ctrl_set(struct rte_eth_dev *dev,
 				struct rte_eth_fc_conf *fc_conf);
 static int eth_em_interrupt_setup(struct rte_eth_dev *dev);
+static int eth_em_rxq_interrupt_setup(struct rte_eth_dev *dev);
 static int eth_em_interrupt_get_status(struct rte_eth_dev *dev);
 static int eth_em_interrupt_action(struct rte_eth_dev *dev);
 static void eth_em_interrupt_handler(struct rte_intr_handle *handle,
@@ -107,6 +108,7 @@ static void em_vlan_hw_strip_disable(struct rte_eth_dev *dev);
 static void eth_em_vlan_filter_set(struct rte_eth_dev *dev,
 					uint16_t vlan_id, int on);
 */
+static void em_rxq_intr_enable(struct e1000_hw *hw);
 static int eth_em_led_on(struct rte_eth_dev *dev);
 static int eth_em_led_off(struct rte_eth_dev *dev);
 
@@ -608,6 +610,9 @@ eth_em_start(struct rte_eth_dev *dev)
 			return ret;
 		}
 	}
+	/* check if rxq interrupt is enabled */
+	if (dev->data->dev_conf.intr_conf.rxq != 0)
+		eth_em_rxq_interrupt_setup(dev);
 
 	adapter->stopped = 0;
 
@@ -1277,6 +1282,42 @@ eth_em_interrupt_setup(struct rte_eth_dev *dev)
 }
 
 /*
+ * It clears the interrupt causes and enables the interrupt.
+ * It will be called once only during nic initialized.
+ *
+ * @param dev
+ *  Pointer to struct rte_eth_dev.
+ *
+ * @return
+ *  - On success, zero.
+ *  - On failure, a negative value.
+ */
+static int
+eth_em_rxq_interrupt_setup(struct rte_eth_dev *dev)
+{
+	struct e1000_hw *hw =
+	E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);
+
+	E1000_READ_REG(hw, E1000_ICR);
+	em_rxq_intr_enable(hw);
+	return 0;
+}
+
+/*
+ * It enable receive packet interrupt.
+ * @param hw
+ * Pointer to struct e1000_hw
+ *
+ * @return
+ */
+static void
+em_rxq_intr_enable(struct e1000_hw *hw)
+{
+	E1000_WRITE_REG(hw, E1000_IMS, E1000_IMS_RXT0);
+	E1000_WRITE_FLUSH(hw);
+}
+
+/*
  * It reads ICR and gets interrupt causes, check it and set a bit flag
  * to update link status.
  *
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v3 2/8] e1000: separate lsc and rxq interrupt disable function
  2015-10-29  9:18 [PATCH v3 0/8] interrupt mode for e1000 Yong Liu
  2015-10-29  9:18 ` [PATCH v3 1/8] e1000: add rx interrupt support Yong Liu
@ 2015-10-29  9:18 ` Yong Liu
  2015-10-29  9:18 ` [PATCH v3 3/8] e1000: add ethdev rxq enable and " Yong Liu
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Yong Liu @ 2015-10-29  9:18 UTC (permalink / raw)
  To: dev

Separate lsc and rxq interrupt for they have different interrupt handlers.

Signed-off-by: Marvin Liu <yong.liu@intel.com>

diff --git a/drivers/net/e1000/em_ethdev.c b/drivers/net/e1000/em_ethdev.c
index 3be8269..39f330a 100644
--- a/drivers/net/e1000/em_ethdev.c
+++ b/drivers/net/e1000/em_ethdev.c
@@ -108,11 +108,12 @@ static void em_vlan_hw_strip_disable(struct rte_eth_dev *dev);
 static void eth_em_vlan_filter_set(struct rte_eth_dev *dev,
 					uint16_t vlan_id, int on);
 */
+static void em_lsc_intr_disable(struct e1000_hw *hw);
 static void em_rxq_intr_enable(struct e1000_hw *hw);
+static void em_rxq_intr_disable(struct e1000_hw *hw);
 static int eth_em_led_on(struct rte_eth_dev *dev);
 static int eth_em_led_off(struct rte_eth_dev *dev);
 
-static void em_intr_disable(struct e1000_hw *hw);
 static int em_get_rx_buffer_size(struct e1000_hw *hw);
 static void eth_em_rar_set(struct rte_eth_dev *dev, struct ether_addr *mac_addr,
 		uint32_t index, uint32_t pool);
@@ -640,7 +641,9 @@ eth_em_stop(struct rte_eth_dev *dev)
 	struct rte_eth_link link;
 	struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);
 
-	em_intr_disable(hw);
+	em_rxq_intr_disable(hw);
+	em_lsc_intr_disable(hw);
+
 	e1000_reset_hw(hw);
 	if (hw->mac.type >= e1000_82544)
 		E1000_WRITE_REG(hw, E1000_WUC, 0);
@@ -1254,13 +1257,7 @@ eth_em_vlan_offload_set(struct rte_eth_dev *dev, int mask)
 	}
 }
 
-static void
-em_intr_disable(struct e1000_hw *hw)
-{
-	E1000_WRITE_REG(hw, E1000_IMC, ~0);
-}
-
-/**
+/*
  * It enables the interrupt mask and then enable the interrupt.
  *
  * @param dev
@@ -1304,6 +1301,35 @@ eth_em_rxq_interrupt_setup(struct rte_eth_dev *dev)
 }
 
 /*
+ * It disabled lsc interrupt.
+ * @param hw
+ * Pointer to struct e1000_hw
+ *
+ * @return
+ */
+static void
+em_lsc_intr_disable(struct e1000_hw *hw)
+{
+	E1000_WRITE_REG(hw, E1000_IMC, E1000_IMS_LSC);
+	E1000_WRITE_FLUSH(hw);
+}
+
+/*
+ * It disabled receive packet interrupt.
+ * @param hw
+ * Pointer to struct e1000_hw
+ *
+ * @return
+ */
+static void
+em_rxq_intr_disable(struct e1000_hw *hw)
+{
+	E1000_READ_REG(hw, E1000_ICR);
+	E1000_WRITE_REG(hw, E1000_IMC, E1000_IMS_RXT0);
+	E1000_WRITE_FLUSH(hw);
+}
+
+/*
  * It enable receive packet interrupt.
  * @param hw
  * Pointer to struct e1000_hw
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v3 3/8] e1000: add ethdev rxq enable and disable function
  2015-10-29  9:18 [PATCH v3 0/8] interrupt mode for e1000 Yong Liu
  2015-10-29  9:18 ` [PATCH v3 1/8] e1000: add rx interrupt support Yong Liu
  2015-10-29  9:18 ` [PATCH v3 2/8] e1000: separate lsc and rxq interrupt disable function Yong Liu
@ 2015-10-29  9:18 ` Yong Liu
  2015-10-29  9:18 ` [PATCH v3 4/8] e1000: add rxq interrupt handler Yong Liu
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Yong Liu @ 2015-10-29  9:18 UTC (permalink / raw)
  To: dev

Implement rxq interrupt related functions in eth_dev_ops structure.

Signed-off-by: Marvin Liu <yong.liu@intel.com>

diff --git a/drivers/net/e1000/em_ethdev.c b/drivers/net/e1000/em_ethdev.c
index 39f330a..6dc2534 100644
--- a/drivers/net/e1000/em_ethdev.c
+++ b/drivers/net/e1000/em_ethdev.c
@@ -108,9 +108,13 @@ static void em_vlan_hw_strip_disable(struct rte_eth_dev *dev);
 static void eth_em_vlan_filter_set(struct rte_eth_dev *dev,
 					uint16_t vlan_id, int on);
 */
+
+static int eth_em_rx_queue_intr_enable(struct rte_eth_dev *dev, uint16_t queue_id);
+static int eth_em_rx_queue_intr_disable(struct rte_eth_dev *dev, uint16_t queue_id);
 static void em_lsc_intr_disable(struct e1000_hw *hw);
 static void em_rxq_intr_enable(struct e1000_hw *hw);
 static void em_rxq_intr_disable(struct e1000_hw *hw);
+
 static int eth_em_led_on(struct rte_eth_dev *dev);
 static int eth_em_led_off(struct rte_eth_dev *dev);
 
@@ -162,6 +166,8 @@ static const struct eth_dev_ops eth_em_ops = {
 	.rx_descriptor_done   = eth_em_rx_descriptor_done,
 	.tx_queue_setup       = eth_em_tx_queue_setup,
 	.tx_queue_release     = eth_em_tx_queue_release,
+	.rx_queue_intr_enable = eth_em_rx_queue_intr_enable,
+	.rx_queue_intr_disable = eth_em_rx_queue_intr_disable,
 	.dev_led_on           = eth_em_led_on,
 	.dev_led_off          = eth_em_led_off,
 	.flow_ctrl_get        = eth_em_flow_ctrl_get,
@@ -890,6 +896,27 @@ eth_em_stats_reset(struct rte_eth_dev *dev)
 	memset(hw_stats, 0, sizeof(*hw_stats));
 }
 
+static int
+eth_em_rx_queue_intr_enable(struct rte_eth_dev *dev, __rte_unused uint16_t queue_id)
+{
+	struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);
+
+	em_rxq_intr_enable(hw);
+	rte_intr_enable(&(dev->pci_dev->intr_handle));
+
+	return 0;
+}
+
+static int
+eth_em_rx_queue_intr_disable(struct rte_eth_dev *dev, __rte_unused uint16_t queue_id)
+{
+	struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);
+
+	em_rxq_intr_disable(hw);
+
+	return 0;
+}
+
 static uint32_t
 em_get_max_pktlen(const struct e1000_hw *hw)
 {
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v3 4/8] e1000: add rxq interrupt handler
  2015-10-29  9:18 [PATCH v3 0/8] interrupt mode for e1000 Yong Liu
                   ` (2 preceding siblings ...)
  2015-10-29  9:18 ` [PATCH v3 3/8] e1000: add ethdev rxq enable and " Yong Liu
@ 2015-10-29  9:18 ` Yong Liu
  2015-10-29  9:18 ` [PATCH v3 5/8] e1000: check lsc and rxq not enable in the same time Yong Liu
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Yong Liu @ 2015-10-29  9:18 UTC (permalink / raw)
  To: dev

When datapath rxq interupt is enabled, enable related device rxq.
Remove the interrupt handler after device stopped.

Signed-off-by: Marvin Liu <yong.liu@intel.com>

diff --git a/drivers/net/e1000/em_ethdev.c b/drivers/net/e1000/em_ethdev.c
index 6dc2534..fc3cc1e 100644
--- a/drivers/net/e1000/em_ethdev.c
+++ b/drivers/net/e1000/em_ethdev.c
@@ -501,7 +501,9 @@ eth_em_start(struct rte_eth_dev *dev)
 		E1000_DEV_PRIVATE(dev->data->dev_private);
 	struct e1000_hw *hw =
 		E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);
+	struct rte_intr_handle *intr_handle = &dev->pci_dev->intr_handle;
 	int ret, mask;
+	uint32_t intr_vector = 0;
 
 	PMD_INIT_FUNC_TRACE();
 
@@ -537,6 +539,26 @@ eth_em_start(struct rte_eth_dev *dev)
 	/* Configure for OS presence */
 	em_init_manageability(hw);
 
+	if (dev->data->dev_conf.intr_conf.rxq != 0) {
+		intr_vector = dev->data->nb_rx_queues;
+		if (rte_intr_efd_enable(intr_handle, intr_vector))
+			return -1;
+	}
+
+	if (rte_intr_dp_is_en(intr_handle)) {
+		intr_handle->intr_vec =
+			rte_zmalloc("intr_vec",
+					dev->data->nb_rx_queues * sizeof(int), 0);
+		if (intr_handle->intr_vec == NULL) {
+			PMD_INIT_LOG(ERR, "Failed to allocate %d rx_queues"
+						" intr_vec\n", dev->data->nb_rx_queues);
+			return -ENOMEM;
+		}
+
+		/* enable rx interrupt */
+		em_rxq_intr_enable(hw);
+	}
+
 	eth_em_tx_init(dev);
 
 	ret = eth_em_rx_init(dev);
@@ -621,6 +643,8 @@ eth_em_start(struct rte_eth_dev *dev)
 	if (dev->data->dev_conf.intr_conf.rxq != 0)
 		eth_em_rxq_interrupt_setup(dev);
 
+	rte_intr_enable(intr_handle);
+
 	adapter->stopped = 0;
 
 	PMD_INIT_LOG(DEBUG, "<<");
@@ -646,6 +670,7 @@ eth_em_stop(struct rte_eth_dev *dev)
 {
 	struct rte_eth_link link;
 	struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);
+	struct rte_intr_handle *intr_handle = &dev->pci_dev->intr_handle;
 
 	em_rxq_intr_disable(hw);
 	em_lsc_intr_disable(hw);
@@ -662,6 +687,13 @@ eth_em_stop(struct rte_eth_dev *dev)
 	/* clear the recorded link status */
 	memset(&link, 0, sizeof(link));
 	rte_em_dev_atomic_write_link_status(dev, &link);
+
+	/* Clean datapath event and queue/vec mapping */
+	rte_intr_efd_disable(intr_handle);
+	if (intr_handle->intr_vec != NULL) {
+		rte_free(intr_handle->intr_vec);
+		intr_handle->intr_vec = NULL;
+	}
 }
 
 static void
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v3 5/8] e1000: check lsc and rxq not enable in the same time
  2015-10-29  9:18 [PATCH v3 0/8] interrupt mode for e1000 Yong Liu
                   ` (3 preceding siblings ...)
  2015-10-29  9:18 ` [PATCH v3 4/8] e1000: add rxq interrupt handler Yong Liu
@ 2015-10-29  9:18 ` Yong Liu
  2015-10-29  9:18 ` [PATCH v3 6/8] e1000: lsc interrupt setup function only enable itself Yong Liu
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Yong Liu @ 2015-10-29  9:18 UTC (permalink / raw)
  To: dev

e1000 only support one type of interrupt cause, so remove lsc interrupt
handler if rxq enabled.

Signed-off-by: Marvin Liu <yong.liu@intel.com>

diff --git a/drivers/net/e1000/em_ethdev.c b/drivers/net/e1000/em_ethdev.c
index fc3cc1e..b1e0c3c 100644
--- a/drivers/net/e1000/em_ethdev.c
+++ b/drivers/net/e1000/em_ethdev.c
@@ -630,14 +630,22 @@ eth_em_start(struct rte_eth_dev *dev)
 	}
 	e1000_setup_link(hw);
 
-	/* check if lsc interrupt feature is enabled */
-	if (dev->data->dev_conf.intr_conf.lsc != 0) {
-		ret = eth_em_interrupt_setup(dev);
-		if (ret) {
-			PMD_INIT_LOG(ERR, "Unable to setup interrupts");
-			em_dev_clear_queues(dev);
-			return ret;
-		}
+	if (rte_intr_allow_others(intr_handle)) {
+		/* check if lsc interrupt is enabled */
+		if (dev->data->dev_conf.intr_conf.lsc != 0)
+			ret = eth_em_interrupt_setup(dev);
+			if (ret) {
+				PMD_INIT_LOG(ERR, "Unable to setup interrupts");
+				em_dev_clear_queues(dev);
+				return ret;
+			}
+	} else {
+		rte_intr_callback_unregister(intr_handle,
+						eth_em_interrupt_handler,
+						(void *)dev);
+		if (dev->data->dev_conf.intr_conf.lsc != 0)
+			PMD_INIT_LOG(INFO, "lsc won't enable because of"
+				     " no intr multiplex\n");
 	}
 	/* check if rxq interrupt is enabled */
 	if (dev->data->dev_conf.intr_conf.rxq != 0)
@@ -688,6 +696,12 @@ eth_em_stop(struct rte_eth_dev *dev)
 	memset(&link, 0, sizeof(link));
 	rte_em_dev_atomic_write_link_status(dev, &link);
 
+	if (!rte_intr_allow_others(intr_handle))
+		/* resume to the default handler */
+		rte_intr_callback_register(intr_handle,
+					   eth_em_interrupt_handler,
+					   (void *)dev);
+
 	/* Clean datapath event and queue/vec mapping */
 	rte_intr_efd_disable(intr_handle);
 	if (intr_handle->intr_vec != NULL) {
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v3 6/8] e1000: lsc interrupt setup function only enable itself
  2015-10-29  9:18 [PATCH v3 0/8] interrupt mode for e1000 Yong Liu
                   ` (4 preceding siblings ...)
  2015-10-29  9:18 ` [PATCH v3 5/8] e1000: check lsc and rxq not enable in the same time Yong Liu
@ 2015-10-29  9:18 ` Yong Liu
  2015-10-29  9:18 ` [PATCH v3 7/8] l3fwd-power: disable interrupt when wake up from sleep Yong Liu
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Yong Liu @ 2015-10-29  9:18 UTC (permalink / raw)
  To: dev

Only mask lsc interrupt bit when setup device interrupt.

Signed-off-by: Marvin Liu <yong.liu@intel.com>

diff --git a/drivers/net/e1000/em_ethdev.c b/drivers/net/e1000/em_ethdev.c
index b1e0c3c..d2d017c 100644
--- a/drivers/net/e1000/em_ethdev.c
+++ b/drivers/net/e1000/em_ethdev.c
@@ -1343,11 +1343,14 @@ eth_em_vlan_offload_set(struct rte_eth_dev *dev, int mask)
 static int
 eth_em_interrupt_setup(struct rte_eth_dev *dev)
 {
+	uint32_t regval;
 	struct e1000_hw *hw =
 		E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);
 
-	E1000_WRITE_REG(hw, E1000_IMS, E1000_ICR_LSC);
-	rte_intr_enable(&(dev->pci_dev->intr_handle));
+	/* clear interrupt */
+	E1000_READ_REG(hw, E1000_ICR);
+	regval = E1000_READ_REG(hw, E1000_IMS);
+	E1000_WRITE_REG(hw, E1000_IMS, regval | E1000_ICR_LSC);
 	return (0);
 }
 
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v3 7/8] l3fwd-power: disable interrupt when wake up from sleep
  2015-10-29  9:18 [PATCH v3 0/8] interrupt mode for e1000 Yong Liu
                   ` (5 preceding siblings ...)
  2015-10-29  9:18 ` [PATCH v3 6/8] e1000: lsc interrupt setup function only enable itself Yong Liu
@ 2015-10-29  9:18 ` Yong Liu
  2015-10-29  9:18 ` [PATCH v3 8/8] doc: release note update for e1000 intr mode Yong Liu
  2015-10-29 10:19 ` [PATCH v3 0/8] interrupt mode for e1000 Liang, Cunming
  8 siblings, 0 replies; 10+ messages in thread
From: Yong Liu @ 2015-10-29  9:18 UTC (permalink / raw)
  To: dev

Signed-off-by: Marvin Liu <yong.liu@intel.com>

diff --git a/examples/l3fwd-power/main.c b/examples/l3fwd-power/main.c
index 8bb88ce..9175989 100644
--- a/examples/l3fwd-power/main.c
+++ b/examples/l3fwd-power/main.c
@@ -798,6 +798,7 @@ sleep_until_rx_interrupt(int num)
 		port_id = ((uintptr_t)data) >> CHAR_BIT;
 		queue_id = ((uintptr_t)data) &
 			RTE_LEN2MASK(CHAR_BIT, uint8_t);
+		rte_eth_dev_rx_intr_disable(port_id, queue_id);
 		RTE_LOG(INFO, L3FWD_POWER,
 			"lcore %u is waked up from rx interrupt on"
 			" port %d queue %d\n",
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v3 8/8] doc: release note update for e1000 intr mode
  2015-10-29  9:18 [PATCH v3 0/8] interrupt mode for e1000 Yong Liu
                   ` (6 preceding siblings ...)
  2015-10-29  9:18 ` [PATCH v3 7/8] l3fwd-power: disable interrupt when wake up from sleep Yong Liu
@ 2015-10-29  9:18 ` Yong Liu
  2015-10-29 10:19 ` [PATCH v3 0/8] interrupt mode for e1000 Liang, Cunming
  8 siblings, 0 replies; 10+ messages in thread
From: Yong Liu @ 2015-10-29  9:18 UTC (permalink / raw)
  To: dev

Signed-off-by: Marvin Liu <yong.liu@intel.com>

diff --git a/doc/guides/rel_notes/release_2_2.rst b/doc/guides/rel_notes/release_2_2.rst
index be6f827..7655148 100644
--- a/doc/guides/rel_notes/release_2_2.rst
+++ b/doc/guides/rel_notes/release_2_2.rst
@@ -23,6 +23,7 @@ New Features
 
 * **Added vhost-user multiple queue support.**
 
+* **Support interrupt mode on e1000.**
 
 Resolved Issues
 ---------------
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH v3 0/8] interrupt mode for e1000
  2015-10-29  9:18 [PATCH v3 0/8] interrupt mode for e1000 Yong Liu
                   ` (7 preceding siblings ...)
  2015-10-29  9:18 ` [PATCH v3 8/8] doc: release note update for e1000 intr mode Yong Liu
@ 2015-10-29 10:19 ` Liang, Cunming
  8 siblings, 0 replies; 10+ messages in thread
From: Liang, Cunming @ 2015-10-29 10:19 UTC (permalink / raw)
  To: Liu, Yong, dev

Hi,

> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Yong Liu
> Sent: Thursday, October 29, 2015 5:19 PM
> To: dev@dpdk.org
> Subject: [dpdk-dev] [PATCH v3 0/8] interrupt mode for e1000
> 
> This patch set will enable interrup for physical and emulated e1000 device.
> Rx queue interrupt will work with uio driver or vfio driver with msi mode.
> l3fwd-power will disable interrupt immediately when wake-up for that e1000 not
> support interrupt auto clear.
> LSC and rxq interrupt will be seperated for e1000 can only support one
> interrupt cause in the same time.
> 
> The patch set is developed based on one previous patch set
> "[PATCH v1 00/11] interrupt mode for i40e"
> http://www.dpdk.org/ml/archives/dev/2015-September/023903.html
> 
> v3 changes:
>     add in release note
> 
> v2 changes:
>     describe interrupt mode work with uio and vfio+msi
>     replace attribuite __unused__ with __rte_unused
> 
> Marvin Liu (8):
>   e1000: add rx interrupt support
>   e1000: separate lsc and rxq interrupt disable function
>   e1000: add ethdev rxq enable and disable function
>   e1000: add rxq interrupt handler
>   e1000: check lsc and rxq not enable in the same time
>   e1000: lsc interrupt setup function only enable itself
>   l3fwd-power: disable interrupt when wake up from sleep
>   doc: release note update for e1000 intr mode
> 
>  doc/guides/rel_notes/release_2_2.rst |   1 +
>  drivers/net/e1000/em_ethdev.c        | 181
> +++++++++++++++++++++++++++++++----
>  examples/l3fwd-power/main.c          |   1 +
>  3 files changed, 164 insertions(+), 19 deletions(-)
> 
> --
> 1.9.3

Acked-by: Cunming Liang <cunming.liang@intel.com>

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2015-10-29 10:19 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-10-29  9:18 [PATCH v3 0/8] interrupt mode for e1000 Yong Liu
2015-10-29  9:18 ` [PATCH v3 1/8] e1000: add rx interrupt support Yong Liu
2015-10-29  9:18 ` [PATCH v3 2/8] e1000: separate lsc and rxq interrupt disable function Yong Liu
2015-10-29  9:18 ` [PATCH v3 3/8] e1000: add ethdev rxq enable and " Yong Liu
2015-10-29  9:18 ` [PATCH v3 4/8] e1000: add rxq interrupt handler Yong Liu
2015-10-29  9:18 ` [PATCH v3 5/8] e1000: check lsc and rxq not enable in the same time Yong Liu
2015-10-29  9:18 ` [PATCH v3 6/8] e1000: lsc interrupt setup function only enable itself Yong Liu
2015-10-29  9:18 ` [PATCH v3 7/8] l3fwd-power: disable interrupt when wake up from sleep Yong Liu
2015-10-29  9:18 ` [PATCH v3 8/8] doc: release note update for e1000 intr mode Yong Liu
2015-10-29 10:19 ` [PATCH v3 0/8] interrupt mode for e1000 Liang, Cunming

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.