]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - include/linux/seqlock.h
PM: introduce hibernation and suspend notifiers
[karo-tx-linux.git] / include / linux / seqlock.h
index 46000936f8f1d5f39e92aa1e260518475b567e1a..26e4925bc35bb5f76d28aa55119b4a2c2501091d 100644 (file)
@@ -2,7 +2,7 @@
 #define __LINUX_SEQLOCK_H
 /*
  * Reader/writer consistent mechanism without starving writers. This type of
- * lock for data where the reader wants a consitent set of information
+ * lock for data where the reader wants a consistent set of information
  * and is willing to retry if the information changes.  Readers never
  * block but they may have to retry if a writer is in
  * progress. Writers do not wait for readers. 
@@ -44,8 +44,11 @@ typedef struct {
 #define SEQLOCK_UNLOCKED \
                 __SEQLOCK_UNLOCKED(old_style_seqlock_init)
 
-#define seqlock_init(x) \
-               do { *(x) = (seqlock_t) __SEQLOCK_UNLOCKED(x); } while (0)
+#define seqlock_init(x)                                        \
+       do {                                            \
+               (x)->sequence = 0;                      \
+               spin_lock_init(&(x)->lock);             \
+       } while (0)
 
 #define DEFINE_SEQLOCK(x) \
                seqlock_t x = __SEQLOCK_UNLOCKED(x)
@@ -58,10 +61,10 @@ static inline void write_seqlock(seqlock_t *sl)
 {
        spin_lock(&sl->lock);
        ++sl->sequence;
-       smp_wmb();                      
-}      
+       smp_wmb();
+}
 
-static inline void write_sequnlock(seqlock_t *sl) 
+static inline void write_sequnlock(seqlock_t *sl)
 {
        smp_wmb();
        sl->sequence++;
@@ -74,7 +77,7 @@ static inline int write_tryseqlock(seqlock_t *sl)
 
        if (ret) {
                ++sl->sequence;
-               smp_wmb();                      
+               smp_wmb();
        }
        return ret;
 }