Page MenuHomeFreeBSD

D35021.id105266.diff
No OneTemporary

D35021.id105266.diff

Index: sys/compat/linuxkpi/common/include/linux/seqlock.h
===================================================================
--- sys/compat/linuxkpi/common/include/linux/seqlock.h
+++ sys/compat/linuxkpi/common/include/linux/seqlock.h
@@ -30,6 +30,7 @@
#define _LINUXKPI_LINUX_SEQLOCK_H__
#include <sys/param.h>
+#include <sys/systm.h>
#include <sys/lock.h>
#include <sys/mutex.h>
#include <sys/seqc.h>
@@ -100,29 +101,45 @@
}
static inline void
-write_seqlock(struct seqlock *seqlock)
+_write_seqlock(struct seqlock *seqlock, const bool irqsave)
{
mtx_lock(&seqlock->seql_lock);
+ if (irqsave)
+ critical_enter();
write_seqcount_begin(&seqlock->seql_count);
}
static inline void
-write_sequnlock(struct seqlock *seqlock)
+write_seqlock(struct seqlock *seqlock)
+{
+ _write_seqlock(seqlock, false);
+}
+
+static inline void
+_write_sequnlock(struct seqlock *seqlock, const bool irqsave)
{
write_seqcount_end(&seqlock->seql_count);
+ if (irqsave)
+ critical_exit();
mtx_unlock(&seqlock->seql_lock);
}
+static inline void
+write_sequnlock(struct seqlock *seqlock)
+{
+ _write_sequnlock(seqlock, false);
+}
+
#define write_seqlock_irqsave(seqlock, flags) do { \
(flags) = 0; \
- write_seqlock(seqlock); \
+ _write_seqlock(seqlock, true); \
} while (0)
static inline void
write_sequnlock_irqrestore(struct seqlock *seqlock,
unsigned long flags __unused)
{
- write_sequnlock(seqlock);
+ _write_sequnlock(seqlock, true);
}
static inline unsigned

File Metadata

Mime Type
text/plain
Expires
Tue, Apr 21, 3:05 AM (4 h, 40 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
31883379
Default Alt Text
D35021.id105266.diff (1 KB)

Event Timeline