Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 26 Apr 2021 15:45:08 GMT
From:      Neel Chauhan <nc@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: da6a8ccfa293 - stable/13 - linuxkpi: Implement atomic_dec_and_lock_irqsave()
Message-ID:  <202104261545.13QFj8vX012940@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch stable/13 has been updated by nc (ports committer):

URL: https://cgit.FreeBSD.org/src/commit/?id=da6a8ccfa293c3c831fdde51169754fcb9587657

commit da6a8ccfa293c3c831fdde51169754fcb9587657
Author:     Neel Chauhan <nc@FreeBSD.org>
AuthorDate: 2021-04-26 15:15:49 +0000
Commit:     Neel Chauhan <nc@FreeBSD.org>
CommitDate: 2021-04-26 15:44:30 +0000

    linuxkpi: Implement atomic_dec_and_lock_irqsave()
    
    This is needed by the drm-kmod 5.5 update.
    
    Reviewed by:            hselasky, manu
    MFC after:              3 days
    Differential Revision:  https://reviews.freebsd.org/D29988
    
    (cherry picked from commit ce65353ac1a17677bef03e96df8da967c9086743)
---
 sys/compat/linuxkpi/common/include/linux/spinlock.h | 13 +++++++++++++
 sys/sys/param.h                                     |  2 +-
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/sys/compat/linuxkpi/common/include/linux/spinlock.h b/sys/compat/linuxkpi/common/include/linux/spinlock.h
index 2309794b26ec..7ef474b671dc 100644
--- a/sys/compat/linuxkpi/common/include/linux/spinlock.h
+++ b/sys/compat/linuxkpi/common/include/linux/spinlock.h
@@ -31,6 +31,7 @@
 #ifndef	_LINUX_SPINLOCK_H_
 #define	_LINUX_SPINLOCK_H_
 
+#include <asm/atomic.h>
 #include <sys/param.h>
 #include <sys/kernel.h>
 #include <sys/lock.h>
@@ -160,4 +161,16 @@ spin_lock_destroy(spinlock_t *lock)
 	mtx_assert(&(_l)->m, MA_OWNED);		\
 } while (0)
 
+static inline int
+atomic_dec_and_lock_irqsave(atomic_t *cnt, spinlock_t *lock,
+    unsigned long flags)
+{
+	spin_lock_irqsave(lock, flags);
+	if (atomic_dec_and_test(cnt)) {
+		return (1);
+	}
+	spin_unlock_irqrestore(lock, flags);
+	return (0);
+}
+
 #endif					/* _LINUX_SPINLOCK_H_ */
diff --git a/sys/sys/param.h b/sys/sys/param.h
index 1930af51f7da..a08ec36f6fcc 100644
--- a/sys/sys/param.h
+++ b/sys/sys/param.h
@@ -60,7 +60,7 @@
  *		in the range 5 to 9.
  */
 #undef __FreeBSD_version
-#define __FreeBSD_version 1300501	/* Master, propagated to newvers */
+#define __FreeBSD_version 1300502	/* Master, propagated to newvers */
 
 /*
  * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202104261545.13QFj8vX012940>