From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matan Azrad Subject: [PATCH v6 1/3] net/failsafe: fix hotplug alarm cancel Date: Sun, 11 Feb 2018 17:24:30 +0000 Message-ID: <1518369872-12324-2-git-send-email-matan@mellanox.com> References: <1518107653-15466-1-git-send-email-matan@mellanox.com> <1518369872-12324-1-git-send-email-matan@mellanox.com> Mime-Version: 1.0 Content-Type: text/plain Cc: dev@dpdk.org, stable@dpdk.org To: Gaetan Rivet Return-path: In-Reply-To: <1518369872-12324-1-git-send-email-matan@mellanox.com> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" The hot-plug alarm mechanism of fail-safe PMD is responsible for handling removed devices during a plug-out event and to restore them back to activity following a plug-in event. Fail-safe sets a flag called "pending_alarm" to validate that only one alarm callback is pending at any time. While this flag is required to avoid simultaneous initiations of the alarm thread - it should not be considered during alarm thread cancellation. So, when failsafe_hotplug_alarm_cancel() was called while the alarm callback was being executed the alarm mechanism was not stopped. Skip checking the "pending_alarm" flag to allow alarm thread cancellation all the times. Fixes: ebea83f899d8 ("net/failsafe: add plug-in support") Cc: stable@dpdk.org Signed-off-by: Matan Azrad --- drivers/net/failsafe/failsafe.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/drivers/net/failsafe/failsafe.c b/drivers/net/failsafe/failsafe.c index 2665a39..7b2cdbb 100644 --- a/drivers/net/failsafe/failsafe.c +++ b/drivers/net/failsafe/failsafe.c @@ -85,16 +85,14 @@ { int ret = 0; - if (PRIV(dev)->pending_alarm) { - rte_errno = 0; - rte_eal_alarm_cancel(fs_hotplug_alarm, dev); - if (rte_errno) { - ERROR("rte_eal_alarm_cancel failed (errno: %s)", - strerror(rte_errno)); - ret = -rte_errno; - } else { - PRIV(dev)->pending_alarm = 0; - } + rte_errno = 0; + rte_eal_alarm_cancel(fs_hotplug_alarm, dev); + if (rte_errno) { + ERROR("rte_eal_alarm_cancel failed (errno: %s)", + strerror(rte_errno)); + ret = -rte_errno; + } else { + PRIV(dev)->pending_alarm = 0; } return ret; } -- 1.8.3.1