examples/l3fwd-power: fix interrupt disable

Since all related queues' interrupts are turned on before epoll, we need
to turn off all the interrupts after wakeup. This patch fixes the issue
of only turning off the interrupted queues.

Fixes: b736d64787 ("examples/l3fwd-power: disable Rx interrupt when waking up")
Cc: stable@dpdk.org

Signed-off-by: Xiao Wang <xiao.w.wang@intel.com>
Tested-by: Harman Kalra <hkalra@marvell.com>
Reviewed-by: Liang Ma <liang.j.ma@intel.com>
Tested-by: Liang Ma <liang.j.ma@intel.com>
Acked-by: David Hunt <david.hunt@intel.com>
This commit is contained in:
Xiao Wang 2020-01-20 22:06:57 -05:00 committed by David Marchand
parent dd22d31721
commit 49dcf7b98e

View File

@ -870,9 +870,6 @@ 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_spinlock_lock(&(locks[port_id]));
rte_eth_dev_rx_intr_disable(port_id, queue_id);
rte_spinlock_unlock(&(locks[port_id]));
RTE_LOG(INFO, L3FWD_POWER,
"lcore %u is waked up from rx interrupt on"
" port %d queue %d\n",
@ -882,7 +879,7 @@ sleep_until_rx_interrupt(int num)
return 0;
}
static void turn_on_intr(struct lcore_conf *qconf)
static void turn_on_off_intr(struct lcore_conf *qconf, bool on)
{
int i;
struct lcore_rx_queue *rx_queue;
@ -895,7 +892,10 @@ static void turn_on_intr(struct lcore_conf *qconf)
queue_id = rx_queue->queue_id;
rte_spinlock_lock(&(locks[port_id]));
rte_eth_dev_rx_intr_enable(port_id, queue_id);
if (on)
rte_eth_dev_rx_intr_enable(port_id, queue_id);
else
rte_eth_dev_rx_intr_disable(port_id, queue_id);
rte_spinlock_unlock(&(locks[port_id]));
}
}
@ -1330,9 +1330,10 @@ main_loop(__attribute__((unused)) void *dummy)
else {
/* suspend until rx interrupt triggers */
if (intr_en) {
turn_on_intr(qconf);
turn_on_off_intr(qconf, 1);
sleep_until_rx_interrupt(
qconf->n_rx_queue);
turn_on_off_intr(qconf, 0);
/**
* start receiving packets immediately
*/