summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 */