[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH] xen: let ASSERT_UNREACHABLE() WARN() in non-debug builds
Hitting an ASSERT_UNREACHABLE() is always wrong, so even in production builds a warning seems to be appropriate when hitting one. In order not to flood the console in reproducible cases, introduce WARN_ONCE() to be used in this case. Signed-off-by: Juergen Gross <jgross@xxxxxxxx> --- Notice for the release manager: this patch isn't really urgent for the 4.17 release, OTOH it is adding probably useful debug information for the unlikely case of hitting an ASSERT_UNREACHABLE(). The risk for taking the patch should be rather low, but you have the last saying, of course. Signed-off-by: Juergen Gross <jgross@xxxxxxxx> --- xen/include/xen/lib.h | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/xen/include/xen/lib.h b/xen/include/xen/lib.h index 05ee1e18af..b8472d753c 100644 --- a/xen/include/xen/lib.h +++ b/xen/include/xen/lib.h @@ -40,6 +40,16 @@ unlikely(ret_warn_on_); \ }) +#define WARN_ONCE() do { \ + static bool warned = false; \ + \ + if ( !warned ) \ + { \ + warned = true; \ + WARN(); \ + } \ +} while (0) + /* All clang versions supported by Xen have _Static_assert. */ #if defined(__clang__) || \ (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) @@ -63,7 +73,7 @@ #define ASSERT_UNREACHABLE() assert_failed("unreachable") #else #define ASSERT(p) do { if ( 0 && (p) ) {} } while (0) -#define ASSERT_UNREACHABLE() do { } while (0) +#define ASSERT_UNREACHABLE() WARN_ONCE() #endif #define ABS(_x) ({ \ -- 2.35.3
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |