Module Name:    src
Committed By:   riastradh
Date:           Sun Dec 19 12:12:07 UTC 2021

Modified Files:
        src/sys/external/bsd/common/include/asm: bug.h

Log Message:
linux: Make WARN_ONCE actually happen only once.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/external/bsd/common/include/asm/bug.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/common/include/asm/bug.h
diff -u src/sys/external/bsd/common/include/asm/bug.h:1.3 src/sys/external/bsd/common/include/asm/bug.h:1.4
--- src/sys/external/bsd/common/include/asm/bug.h:1.3	Sun Dec 19 11:10:41 2021
+++ src/sys/external/bsd/common/include/asm/bug.h	Sun Dec 19 12:12:07 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: bug.h,v 1.3 2021/12/19 11:10:41 riastradh Exp $	*/
+/*	$NetBSD: bug.h,v 1.4 2021/12/19 12:12:07 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -48,11 +48,19 @@
 	    : 0)
 
 #define	WARN_ONCE(CONDITION, FMT, ...)					\
-	WARN(CONDITION, FMT, ##__VA_ARGS__) /* XXX */
+({									\
+	static volatile unsigned __warn_once_done = 0;			\
+	linux_warning((CONDITION)					\
+	    ? (atomic_swap_uint(&__warn_once_done, 1) == 0		\
+		? (printf("warning: %s:%d: " FMT, __FILE__, __LINE__,	\
+			##__VA_ARGS__), 1)				\
+		: 1)							\
+	    : 0);							\
+})
 
 #define	WARN_ON(CONDITION)	WARN(CONDITION, "%s\n", #CONDITION)
 #define	WARN_ON_SMP(CONDITION)	WARN_ON(CONDITION) /* XXX */
-#define	WARN_ON_ONCE(CONDITION)	WARN_ON(CONDITION) /* XXX */
+#define	WARN_ON_ONCE(CONDITION)	WARN_ONCE(CONDITION, "%s\n", #CONDITION)
 
 /* XXX Kludge to avoid GCC warning about statements without effect.  */
 static inline int

Reply via email to