git: 61ae7a355ce7 - main - Add MPASSERT() and MPPASS() macros

From: Konstantin Belousov <kib_at_FreeBSD.org>
Date: Wed, 29 Jun 2022 18:32:13 UTC
The branch main has been updated by kib:

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

commit 61ae7a355ce787aecd84dc35a047f458a5b5b1fb
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2022-06-29 11:37:04 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2022-06-29 18:31:47 +0000

    Add MPASSERT() and MPPASS() macros
    
    Suggested by:   mjg
    Reviewed by:    imp, mjg
    Tested by:      pho
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Differential revision:  https://reviews.freebsd.org/D35652
---
 sys/sys/kassert.h | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/sys/sys/kassert.h b/sys/sys/kassert.h
index bb6847dc404f..d7c1a21385f9 100644
--- a/sys/sys/kassert.h
+++ b/sys/sys/kassert.h
@@ -46,19 +46,35 @@ extern bool panicked;
 		kassert_panic msg;					\
 	}								\
 } while (0)
+#define	MPASSERT(exp, mp, msg) do {					\
+	if (__predict_false(!(exp))) {					\
+		printf("MPASSERT mp %p failed: %s not true at %s:%d (%s)\n",\
+		    (mp), #exp, __FILE__, __LINE__, __func__);		\
+		kassert_panic msg;					\
+	}								\
+} while (0)
 #define	VNPASS(exp, vp)	do {						\
 	const char *_exp = #exp;					\
 	VNASSERT(exp, vp, ("condition %s not met at %s:%d (%s)",	\
 	    _exp, __FILE__, __LINE__, __func__));			\
 } while (0)
+#define	MPPASS(exp, mp)	do {						\
+	const char *_exp = #exp;					\
+	MPASSERT(exp, mp, ("condition %s not met at %s:%d (%s)",	\
+	    _exp, __FILE__, __LINE__, __func__));			\
+} while (0)
 #define	__assert_unreachable() \
 	panic("executing segment marked as unreachable at %s:%d (%s)\n", \
 	    __FILE__, __LINE__, __func__)
 #else	/* INVARIANTS */
 #define	VNASSERT(exp, vp, msg) do { \
 } while (0)
+#define	MPASSERT(exp, mp, msg) do { \
+} while (0)
 #define	VNPASS(exp, vp) do { \
 } while (0)
+#define	MPPASS(exp, mp) do { \
+} while (0)
 #define	__assert_unreachable()	__unreachable()
 #endif	/* INVARIANTS */