summaryrefslogtreecommitdiff
path: root/backport
diff options
context:
space:
mode:
authorHauke Mehrtens <hauke@hauke-m.de>2018-09-17 23:31:41 +0200
committerJohannes Berg <johannes.berg@intel.com>2018-09-19 11:07:18 +0200
commit67fba675b482d0d0b9d29bcf686a0d09cf885eed (patch)
tree83ac8f965b238196fda88ad7d3dd8ef03baff674 /backport
parent4225f260e5071349eaf3512361197c4d456c461b (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>
Diffstat (limited to 'backport')
-rw-r--r--backport/backport-include/linux/u64_stats_sync.h25
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 */