Page MenuHomeFreeBSD

D37699.diff
No OneTemporary

D37699.diff

diff --git a/sys/compat/linuxkpi/common/include/linux/seqlock.h b/sys/compat/linuxkpi/common/include/linux/seqlock.h
--- a/sys/compat/linuxkpi/common/include/linux/seqlock.h
+++ b/sys/compat/linuxkpi/common/include/linux/seqlock.h
@@ -36,8 +36,6 @@
#include <sys/rwlock.h>
#include <sys/seqc.h>
-#include <linux/mutex.h>
-
struct lock_class_key;
struct seqcount {
@@ -52,8 +50,7 @@
typedef struct seqlock seqlock_t;
struct seqcount_mutex {
- struct mutex *seqm_lock;
- struct seqcount seqm_count;
+ seqc_t seqc;
};
typedef struct seqcount_mutex seqcount_mutex_t;
@@ -66,98 +63,33 @@
#define seqcount_init(seqcount) __seqcount_init(seqcount, NULL, NULL)
static inline void
-seqcount_mutex_init(struct seqcount_mutex *seqcount, struct mutex *mutex)
+seqcount_mutex_init(struct seqcount_mutex *seqcount, void *mutex __unused)
{
- seqcount->seqm_lock = mutex;
- seqcount_init(&seqcount->seqm_count);
+ seqcount->seqc = 0;
}
#define write_seqcount_begin(s) \
_Generic(*(s), \
- struct seqcount: lkpi_write_seqcount_begin, \
- struct seqcount_mutex: lkpi_write_seqcount_mutex_begin \
- )(s)
-
-static inline void
-lkpi_write_seqcount_begin(struct seqcount *seqcount)
-{
- seqc_sleepable_write_begin(&seqcount->seqc);
-}
-
-static inline void
-lkpi_write_seqcount_mutex_begin(struct seqcount_mutex *seqcount)
-{
- mutex_lock(seqcount->seqm_lock);
- lkpi_write_seqcount_begin(&seqcount->seqm_count);
-}
+ struct seqcount: seqc_sleepable_write_begin, \
+ struct seqcount_mutex: seqc_write_begin \
+ )(&(s)->seqc)
#define write_seqcount_end(s) \
_Generic(*(s), \
- struct seqcount: lkpi_write_seqcount_end, \
- struct seqcount_mutex: lkpi_write_seqcount_mutex_end \
- )(s)
-
-static inline void
-lkpi_write_seqcount_end(struct seqcount *seqcount)
-{
- seqc_sleepable_write_end(&seqcount->seqc);
-}
+ struct seqcount: seqc_sleepable_write_end, \
+ struct seqcount_mutex: seqc_write_end \
+ )(&(s)->seqc)
-static inline void
-lkpi_write_seqcount_mutex_end(struct seqcount_mutex *seqcount)
-{
- lkpi_write_seqcount_end(&seqcount->seqm_count);
- mutex_unlock(seqcount->seqm_lock);
-}
-
-#define read_seqcount_begin(s) \
- _Generic(*(s), \
- struct seqcount: lkpi_read_seqcount_begin, \
- struct seqcount_mutex: lkpi_read_seqcount_mutex_begin \
- )(s)
-
-static inline unsigned
-lkpi_read_seqcount_begin(const struct seqcount *seqcount)
-{
- return (seqc_read(&seqcount->seqc));
-}
-
-static inline unsigned
-lkpi_read_seqcount_mutex_begin(const struct seqcount_mutex *seqcount)
-{
- return (lkpi_read_seqcount_begin(&seqcount->seqm_count));
-}
-
-static inline unsigned
-raw_read_seqcount(const struct seqcount *seqcount)
-{
- return (seqc_read_any(&seqcount->seqc));
-}
+#define read_seqcount_begin(s) seqc_read(&(s)->seqc)
+#define raw_read_seqcount(s) seqc_read_any(&(s)->seqc)
/*
* XXX: Are predicts from inline functions still not honored by clang?
*/
#define __read_seqcount_retry(seqcount, gen) \
(!seqc_consistent_no_fence(&(seqcount)->seqc, gen))
-#define read_seqcount_retry(s, old) \
- _Generic(*(s), \
- struct seqcount: lkpi_read_seqcount_retry, \
- struct seqcount_mutex: lkpi_read_seqcount_mutex_retry \
- )(s, old)
-
-static inline int
-lkpi_read_seqcount_retry(
- const struct seqcount *seqcount, unsigned int old)
-{
- return (!seqc_consistent(&seqcount->seqc, old));
-}
-
-static inline int
-lkpi_read_seqcount_mutex_retry(
- const struct seqcount_mutex *seqcount, unsigned int old)
-{
- return (!seqc_consistent(&seqcount->seqm_count.seqc, old));
-}
+#define read_seqcount_retry(seqcount, gen) \
+ (!seqc_consistent(&(seqcount)->seqc, gen))
static inline void
seqlock_init(struct seqlock *seqlock)

File Metadata

Mime Type
text/plain
Expires
Sat, Nov 16, 1:02 AM (21 h, 7 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14650280
Default Alt Text
D37699.diff (3 KB)

Event Timeline