diff options
author | Hauke Mehrtens <hauke@hauke-m.de> | 2018-09-17 23:31:41 +0200 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2018-09-19 11:07:18 +0200 |
commit | 67fba675b482d0d0b9d29bcf686a0d09cf885eed (patch) | |
tree | 83ac8f965b238196fda88ad7d3dd8ef03baff674 | |
parent | 4225f260e5071349eaf3512361197c4d456c461b (diff) |
header: Add u64_stats_update_{begin,end}_irqsave()
These functions are currently used by the usbnet driver.
These functions were introduced in upstream commit 2695578b896ae ("net:
usbnet: fix potential deadlock on 32bit hosts")
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-rw-r--r-- | backport/backport-include/linux/u64_stats_sync.h | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/backport/backport-include/linux/u64_stats_sync.h b/backport/backport-include/linux/u64_stats_sync.h index 112a4094..0d221238 100644 --- a/backport/backport-include/linux/u64_stats_sync.h +++ b/backport/backport-include/linux/u64_stats_sync.h @@ -151,4 +151,29 @@ static inline bool u64_stats_fetch_retry_irq(const struct u64_stats_sync *syncp, #endif #endif /* LINUX_VERSION_IS_LESS(3,13,0) */ +#if LINUX_VERSION_IS_LESS(4,16,0) && \ + !LINUX_VERSION_IN_RANGE(4,14,44, 4,15,0) +static inline unsigned long +u64_stats_update_begin_irqsave(struct u64_stats_sync *syncp) +{ + unsigned long flags = 0; + +#if BITS_PER_LONG==32 && defined(CONFIG_SMP) + local_irq_save(flags); + write_seqcount_begin(&syncp->seq); +#endif + return flags; +} + +static inline void +u64_stats_update_end_irqrestore(struct u64_stats_sync *syncp, + unsigned long flags) +{ +#if BITS_PER_LONG==32 && defined(CONFIG_SMP) + write_seqcount_end(&syncp->seq); + local_irq_restore(flags); +#endif +} +#endif /* < 4.16 */ + #endif /* __BACKPORT_LINUX_U64_STATS_SYNC_H */ |