summaryrefslogtreecommitdiff
path: root/include/linux/seqlock.h
diff options
context:
space:
mode:
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>2014-11-23 20:56:35 +0300
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>2014-11-23 20:56:35 +0300
commitaeb8f932080d62cdc305a7ccca9d60de34908b30 (patch)
treef563df19e10e0d1fb5f8ab73902cc1d39f2ec177 /include/linux/seqlock.h
parentcaf1578aefe7ebbc22376737e91ffa29ac14a33f (diff)
parent9e6f3f472c8f95021ad048acc7cd3e40a827f8ce (diff)
downloadlinux-aeb8f932080d62cdc305a7ccca9d60de34908b30.tar.xz
Merge remote-tracking branch 'wireless-next/master' into iwlwifi-next
Diffstat (limited to 'include/linux/seqlock.h')
-rw-r--r--include/linux/seqlock.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/include/linux/seqlock.h b/include/linux/seqlock.h
index cc359636cfa3..f5df8f687b4d 100644
--- a/include/linux/seqlock.h
+++ b/include/linux/seqlock.h
@@ -456,4 +456,23 @@ read_sequnlock_excl_irqrestore(seqlock_t *sl, unsigned long flags)
spin_unlock_irqrestore(&sl->lock, flags);
}
+static inline unsigned long
+read_seqbegin_or_lock_irqsave(seqlock_t *lock, int *seq)
+{
+ unsigned long flags = 0;
+
+ if (!(*seq & 1)) /* Even */
+ *seq = read_seqbegin(lock);
+ else /* Odd */
+ read_seqlock_excl_irqsave(lock, flags);
+
+ return flags;
+}
+
+static inline void
+done_seqretry_irqrestore(seqlock_t *lock, int seq, unsigned long flags)
+{
+ if (seq & 1)
+ read_sequnlock_excl_irqrestore(lock, flags);
+}
#endif /* __LINUX_SEQLOCK_H */