Page MenuHomeFreeBSD

D30781.id91748.diff
No OneTemporary

D30781.id91748.diff

diff --git a/sys/compat/linuxkpi/common/include/linux/spinlock.h b/sys/compat/linuxkpi/common/include/linux/spinlock.h
--- a/sys/compat/linuxkpi/common/include/linux/spinlock.h
+++ b/sys/compat/linuxkpi/common/include/linux/spinlock.h
@@ -163,15 +163,20 @@
mtx_assert(&(_l)->m, MA_OWNED); \
} while (0)
+#define atomic_dec_and_lock_irqsave(cnt, lock, flags) \
+ _atomic_dec_and_lock_irqsave(cnt, lock, &(flags))
static inline int
-atomic_dec_and_lock_irqsave(atomic_t *cnt, spinlock_t *lock,
- unsigned long flags)
+_atomic_dec_and_lock_irqsave(atomic_t *cnt, spinlock_t *lock,
+ unsigned long *flags)
{
- spin_lock_irqsave(lock, flags);
+ if (atomic_add_unless(cnt, -1, 1))
+ return (0);
+
+ spin_lock_irqsave(lock, *flags);
if (atomic_dec_and_test(cnt))
- return 1;
- spin_unlock_irqrestore(lock, flags);
- return 0;
+ return (1);
+ spin_unlock_irqrestore(lock, *flags);
+ return (0);
}
#endif /* _LINUX_SPINLOCK_H_ */

File Metadata

Mime Type
text/plain
Expires
Tue, Jul 7, 11:40 PM (9 h, 59 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
34818127
Default Alt Text
D30781.id91748.diff (949 B)

Event Timeline