diff options
author | Shannon Nelson <snelson@pensando.io> | 2021-03-30 22:52:09 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2021-03-31 03:37:12 +0300 |
commit | b2b9a8d7ed134ae72e5ef8d0003d054af8e5e2bf (patch) | |
tree | aba781f457d607bc41fef50b7b62a968b879693b /drivers/net/ethernet/pensando/ionic/ionic_dev.h | |
parent | 230efff47adbea8274810b593a9caf8e46c2c1f7 (diff) | |
download | linux-b2b9a8d7ed134ae72e5ef8d0003d054af8e5e2bf.tar.xz |
ionic: avoid races in ionic_heartbeat_check
Rework the heartbeat checks to be sure that we're getting an
atomic operation. Through testing we found occasions where a
separate thread could clash with this check and cause erroneous
heartbeat check results.
Signed-off-by: Allen Hubbe <allenbh@pensando.io>
Signed-off-by: Shannon Nelson <snelson@pensando.io>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/pensando/ionic/ionic_dev.h')
-rw-r--r-- | drivers/net/ethernet/pensando/ionic/ionic_dev.h | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_dev.h b/drivers/net/ethernet/pensando/ionic/ionic_dev.h index ca7e55455165..0c0533737b2b 100644 --- a/drivers/net/ethernet/pensando/ionic/ionic_dev.h +++ b/drivers/net/ethernet/pensando/ionic/ionic_dev.h @@ -4,6 +4,7 @@ #ifndef _IONIC_DEV_H_ #define _IONIC_DEV_H_ +#include <linux/atomic.h> #include <linux/mutex.h> #include <linux/workqueue.h> @@ -135,9 +136,11 @@ struct ionic_dev { union ionic_dev_info_regs __iomem *dev_info_regs; union ionic_dev_cmd_regs __iomem *dev_cmd_regs; + atomic_long_t last_check_time; unsigned long last_hb_time; - u32 last_hb; - u8 last_fw_status; + u32 last_fw_hb; + bool fw_hb_ready; + bool fw_status_ready; u64 __iomem *db_pages; dma_addr_t phy_db_pages; |