From dbda2092deb5ee5988449330c6e28e9d1fb97c19 Mon Sep 17 00:00:00 2001 From: Tao Zhu Date: Wed, 24 Jul 2019 16:32:54 +0800 Subject: [PATCH] net/i40e: fix request queue in VF When the VF configuration is larger than the number of queues reserved by PF, VF sends the request queue command through admin queue. When PF received this command, it may reset the VF and send a notification before resetting. If this notification is read by the timed task alarm, Task request queue will lost notification. This patch prevents two tasks from running simultaneously. Fixes: ee653bd80044 ("net/i40e: determine number of queues per VF at run time") Cc: stable@dpdk.org Signed-off-by: Tao Zhu Acked-by: Qi Zhang --- drivers/net/i40e/i40e_ethdev_vf.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/net/i40e/i40e_ethdev_vf.c b/drivers/net/i40e/i40e_ethdev_vf.c index 3ff2f6097d..5fd34f8e6b 100644 --- a/drivers/net/i40e/i40e_ethdev_vf.c +++ b/drivers/net/i40e/i40e_ethdev_vf.c @@ -140,6 +140,8 @@ static int i40evf_set_mc_addr_list(struct rte_eth_dev *dev, struct rte_ether_addr *mc_addr_set, uint32_t nb_mc_addr); +static void +i40evf_dev_alarm_handler(void *param); /* Default hash key buffer for RSS */ static uint32_t rss_key_default[I40E_VFQF_HKEY_MAX_INDEX + 1]; @@ -1051,10 +1053,14 @@ i40evf_request_queues(struct rte_eth_dev *dev, uint16_t num) args.in_args_size = sizeof(vfres); args.out_buffer = vf->aq_resp; args.out_size = I40E_AQ_BUF_SZ; + + rte_eal_alarm_cancel(i40evf_dev_alarm_handler, dev); err = i40evf_execute_vf_cmd(dev, &args); if (err) PMD_DRV_LOG(ERR, "fail to execute command OP_REQUEST_QUEUES"); + rte_eal_alarm_set(I40EVF_ALARM_INTERVAL, + i40evf_dev_alarm_handler, dev); return err; } -- 2.20.1