From f9f24ecd794f88231110c823cdeff5d7ec9a4382 Mon Sep 17 00:00:00 2001 From: Hongbo Zheng Date: Sat, 10 Apr 2021 09:11:16 +0800 Subject: [PATCH] net/hns3: fix concurrent interrupt handling Currently, if RAS interrupt and FLR occurred at the same time, FLR will be detected and corresponding schedule state will be set during RAS interrupt processing. However, the schedule state value will be overridden in subsequent RAS processing, resulting in FLR processing failure. This patch solves this problem. Fixes: 2790c6464725 ("net/hns3: support device reset") Cc: stable@dpdk.org Signed-off-by: Hongbo Zheng Signed-off-by: Min Hu (Connor) --- drivers/net/hns3/hns3_intr.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/net/hns3/hns3_intr.c b/drivers/net/hns3/hns3_intr.c index 668f598791..15baba0c37 100644 --- a/drivers/net/hns3/hns3_intr.c +++ b/drivers/net/hns3/hns3_intr.c @@ -2133,10 +2133,11 @@ hns3_schedule_reset(struct hns3_adapter *hns) SCHEDULE_REQUESTED) return; if (__atomic_load_n(&hw->reset.schedule, __ATOMIC_RELAXED) == - SCHEDULE_DEFERRED) + SCHEDULE_DEFERRED) rte_eal_alarm_cancel(hw->reset.ops->reset_service, hns); - __atomic_store_n(&hw->reset.schedule, SCHEDULE_REQUESTED, - __ATOMIC_RELAXED); + else + __atomic_store_n(&hw->reset.schedule, SCHEDULE_REQUESTED, + __ATOMIC_RELAXED); rte_eal_alarm_set(SWITCH_CONTEXT_US, hw->reset.ops->reset_service, hns); } -- 2.20.1