On Thu, Aug 27, 2020 at 07:04:53AM +0800, Chunguang Xu wrote: > The kernel has not yet defined ASSERT(). Indeed, BUG() and WARN() are very > clear and can cover most application scenarios. However, some applications > require more debugging information and similar behavior to assert(), which > cannot be directly provided by BUG() and WARN(). > > Therefore, many modules independently implement ASSERT(), and most of them > are similar, but slightly different. This makes the code redundant and > inconvenient to troubleshoot the system. Therefore, perhaps we need to > define two wrappers for BUG() and WARN(), provide the implementation of > ASSERT(), simplify the code and facilitate problem analysis. > > Signed-off-by: Chunguang Xu <brookxu@xxxxxxxxxxx> > --- > include/asm-generic/bug.h | 33 +++++++++++++++++++++++++++++++++ > 1 file changed, 33 insertions(+) It would be useful to convert at least one occurrence of the existing ASSERT()s to the new implementation in the same patch series. > diff --git a/include/asm-generic/bug.h b/include/asm-generic/bug.h > index 18b0f4e..28f8c27 100644 > --- a/include/asm-generic/bug.h > +++ b/include/asm-generic/bug.h > @@ -174,6 +174,31 @@ void __warn(const char *file, int line, void *caller, unsigned taint, > unlikely(__ret_warn_once); \ > }) > > +/* > + * ASSERT_FAIL() and ASSERT_WARN() can be used to check whether some > + * conditions have failed. We generally use ASSERT_FAIL() to check > + * critical conditions, and other use ASSERT_WARN(). > + */ > +#ifndef ASSERT_FAIL > +#define ASSERT_FAIL(condition) do { \ > + if (unlikely(!(condition))) { \ > + pr_emerg("Assertion failed: %s, file: %s, line: %d\n", \ > + #condition, __FILE__, __LINE__); \ > + BUG(); \ > + } \ > +} while (0) > +#endif > + > +#ifndef ASSERT_WARN > +#define ASSERT_WARN(condition) do { \ > + if (unlikely(!(condition))) { \ > + pr_warn("Assertion failed: %s, file: %s, line: %d\n", \ > + #condition, __FILE__, __LINE__); \ > + WARN_ON(1); \ > + } \ > +} while (0) > +#endif > + > #else /* !CONFIG_BUG */ > #ifndef HAVE_ARCH_BUG > #define BUG() do {} while (1) > @@ -203,6 +228,14 @@ void __warn(const char *file, int line, void *caller, unsigned taint, > #define WARN_TAINT(condition, taint, format...) WARN(condition, format) > #define WARN_TAINT_ONCE(condition, taint, format...) WARN(condition, format) > > +#ifndef ASSERT_FAIL > +#define ASSERT_FAIL(condition) do { } while (0) > +#endif > + > +#ifndef ASSERT_WARN > +#define ASSERT_WARN(condition) do { } while (0) > +#endif > + > #endif > > /* > -- > 1.8.3.1 > -- Sincerely yours, Mike.