From 67fba675b482d0d0b9d29bcf686a0d09cf885eed Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens Date: Mon, 17 Sep 2018 23:31:41 +0200 Subject: 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 Signed-off-by: Johannes Berg --- backport/backport-include/linux/u64_stats_sync.h | 25 ++++++++++++++++++++++++ 1 file changed, 25 insertions(+) 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 */ -- cgit v1.2.3