diff options
| author | Emmanuel Grumbach <emmanuel.grumbach@intel.com> | 2014-11-23 20:56:35 +0300 |
|---|---|---|
| committer | Emmanuel Grumbach <emmanuel.grumbach@intel.com> | 2014-11-23 20:56:35 +0300 |
| commit | aeb8f932080d62cdc305a7ccca9d60de34908b30 (patch) | |
| tree | f563df19e10e0d1fb5f8ab73902cc1d39f2ec177 /include/linux/seqlock.h | |
| parent | caf1578aefe7ebbc22376737e91ffa29ac14a33f (diff) | |
| parent | 9e6f3f472c8f95021ad048acc7cd3e40a827f8ce (diff) | |
| download | linux-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.h | 19 |
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 */ |
