== Series Details == Series: Fixes integer overflow or integer truncation issues in page lookups, ttm place configuration and scatterlist creation URL : https://patchwork.freedesktop.org/series/108945/ State : warning == Summary == Error: dim checkpatch failed c7e564bf76cd overflow: Allow mixed type arguments -:18: WARNING:COMMIT_LOG_LONG_LINE: Possible unwrapped commit description (prefer a maximum 75 chars per line) #18: [2] https://lore.kernel.org/lkml/20220824084514.2261614-2-gwan-gyeong.mun@xxxxxxxxx -:137: CHECK:SPACING: No space is necessary after a cast #137: FILE: lib/overflow_kunit.c:27: +#define DEFINE_TEST_ARRAY(t) DEFINE_TEST_ARRAY_TYPED(t, t, t) -:137: CHECK:MACRO_ARG_REUSE: Macro argument reuse 't' - possible side-effects? #137: FILE: lib/overflow_kunit.c:27: +#define DEFINE_TEST_ARRAY(t) DEFINE_TEST_ARRAY_TYPED(t, t, t) -:151: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'fmt' - possible side-effects? #151: FILE: lib/overflow_kunit.c:228: +#define check_one_op(t, fmt, op, sym, a, b, r, of) do { \ + int _a_orig = a, _a_bump = a + 1; \ + int _b_orig = b, _b_bump = b + 1; \ + bool _of; \ + t _r; \ + \ + _of = check_ ## op ## _overflow(a, b, &_r); \ + KUNIT_EXPECT_EQ_MSG(test, _of, of, \ "expected "fmt" "sym" "fmt" to%s overflow (type %s)\n", \ + a, b, of ? "" : " not", #t); \ + KUNIT_EXPECT_EQ_MSG(test, _r, r, \ "expected "fmt" "sym" "fmt" == "fmt", got "fmt" (type %s)\n", \ + a, b, r, _r, #t); \ + /* Check for internal macro side-effects. */ \ + _of = check_ ## op ## _overflow(_a_orig++, _b_orig++, &_r); \ + KUNIT_EXPECT_EQ_MSG(test, _a_orig, _a_bump, "Unexpected " #op " macro side-effect!\n"); \ + KUNIT_EXPECT_EQ_MSG(test, _b_orig, _b_bump, "Unexpected " #op " macro side-effect!\n"); \ } while (0) -:151: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'sym' - possible side-effects? #151: FILE: lib/overflow_kunit.c:228: +#define check_one_op(t, fmt, op, sym, a, b, r, of) do { \ + int _a_orig = a, _a_bump = a + 1; \ + int _b_orig = b, _b_bump = b + 1; \ + bool _of; \ + t _r; \ + \ + _of = check_ ## op ## _overflow(a, b, &_r); \ + KUNIT_EXPECT_EQ_MSG(test, _of, of, \ "expected "fmt" "sym" "fmt" to%s overflow (type %s)\n", \ + a, b, of ? "" : " not", #t); \ + KUNIT_EXPECT_EQ_MSG(test, _r, r, \ "expected "fmt" "sym" "fmt" == "fmt", got "fmt" (type %s)\n", \ + a, b, r, _r, #t); \ + /* Check for internal macro side-effects. */ \ + _of = check_ ## op ## _overflow(_a_orig++, _b_orig++, &_r); \ + KUNIT_EXPECT_EQ_MSG(test, _a_orig, _a_bump, "Unexpected " #op " macro side-effect!\n"); \ + KUNIT_EXPECT_EQ_MSG(test, _b_orig, _b_bump, "Unexpected " #op " macro side-effect!\n"); \ } while (0) -:151: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'a' - possible side-effects? #151: FILE: lib/overflow_kunit.c:228: +#define check_one_op(t, fmt, op, sym, a, b, r, of) do { \ + int _a_orig = a, _a_bump = a + 1; \ + int _b_orig = b, _b_bump = b + 1; \ + bool _of; \ + t _r; \ + \ + _of = check_ ## op ## _overflow(a, b, &_r); \ + KUNIT_EXPECT_EQ_MSG(test, _of, of, \ "expected "fmt" "sym" "fmt" to%s overflow (type %s)\n", \ + a, b, of ? "" : " not", #t); \ + KUNIT_EXPECT_EQ_MSG(test, _r, r, \ "expected "fmt" "sym" "fmt" == "fmt", got "fmt" (type %s)\n", \ + a, b, r, _r, #t); \ + /* Check for internal macro side-effects. */ \ + _of = check_ ## op ## _overflow(_a_orig++, _b_orig++, &_r); \ + KUNIT_EXPECT_EQ_MSG(test, _a_orig, _a_bump, "Unexpected " #op " macro side-effect!\n"); \ + KUNIT_EXPECT_EQ_MSG(test, _b_orig, _b_bump, "Unexpected " #op " macro side-effect!\n"); \ } while (0) -:151: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'b' - possible side-effects? #151: FILE: lib/overflow_kunit.c:228: +#define check_one_op(t, fmt, op, sym, a, b, r, of) do { \ + int _a_orig = a, _a_bump = a + 1; \ + int _b_orig = b, _b_bump = b + 1; \ + bool _of; \ + t _r; \ + \ + _of = check_ ## op ## _overflow(a, b, &_r); \ + KUNIT_EXPECT_EQ_MSG(test, _of, of, \ "expected "fmt" "sym" "fmt" to%s overflow (type %s)\n", \ + a, b, of ? "" : " not", #t); \ + KUNIT_EXPECT_EQ_MSG(test, _r, r, \ "expected "fmt" "sym" "fmt" == "fmt", got "fmt" (type %s)\n", \ + a, b, r, _r, #t); \ + /* Check for internal macro side-effects. */ \ + _of = check_ ## op ## _overflow(_a_orig++, _b_orig++, &_r); \ + KUNIT_EXPECT_EQ_MSG(test, _a_orig, _a_bump, "Unexpected " #op " macro side-effect!\n"); \ + KUNIT_EXPECT_EQ_MSG(test, _b_orig, _b_bump, "Unexpected " #op " macro side-effect!\n"); \ } while (0) -:151: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'r' - possible side-effects? #151: FILE: lib/overflow_kunit.c:228: +#define check_one_op(t, fmt, op, sym, a, b, r, of) do { \ + int _a_orig = a, _a_bump = a + 1; \ + int _b_orig = b, _b_bump = b + 1; \ + bool _of; \ + t _r; \ + \ + _of = check_ ## op ## _overflow(a, b, &_r); \ + KUNIT_EXPECT_EQ_MSG(test, _of, of, \ "expected "fmt" "sym" "fmt" to%s overflow (type %s)\n", \ + a, b, of ? "" : " not", #t); \ + KUNIT_EXPECT_EQ_MSG(test, _r, r, \ "expected "fmt" "sym" "fmt" == "fmt", got "fmt" (type %s)\n", \ + a, b, r, _r, #t); \ + /* Check for internal macro side-effects. */ \ + _of = check_ ## op ## _overflow(_a_orig++, _b_orig++, &_r); \ + KUNIT_EXPECT_EQ_MSG(test, _a_orig, _a_bump, "Unexpected " #op " macro side-effect!\n"); \ + KUNIT_EXPECT_EQ_MSG(test, _b_orig, _b_bump, "Unexpected " #op " macro side-effect!\n"); \ } while (0) -:151: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'of' - possible side-effects? #151: FILE: lib/overflow_kunit.c:228: +#define check_one_op(t, fmt, op, sym, a, b, r, of) do { \ + int _a_orig = a, _a_bump = a + 1; \ + int _b_orig = b, _b_bump = b + 1; \ + bool _of; \ + t _r; \ + \ + _of = check_ ## op ## _overflow(a, b, &_r); \ + KUNIT_EXPECT_EQ_MSG(test, _of, of, \ "expected "fmt" "sym" "fmt" to%s overflow (type %s)\n", \ + a, b, of ? "" : " not", #t); \ + KUNIT_EXPECT_EQ_MSG(test, _r, r, \ "expected "fmt" "sym" "fmt" == "fmt", got "fmt" (type %s)\n", \ + a, b, r, _r, #t); \ + /* Check for internal macro side-effects. */ \ + _of = check_ ## op ## _overflow(_a_orig++, _b_orig++, &_r); \ + KUNIT_EXPECT_EQ_MSG(test, _a_orig, _a_bump, "Unexpected " #op " macro side-effect!\n"); \ + KUNIT_EXPECT_EQ_MSG(test, _b_orig, _b_bump, "Unexpected " #op " macro side-effect!\n"); \ } while (0) -:175: CHECK:MACRO_ARG_REUSE: Macro argument reuse 't' - possible side-effects? #175: FILE: lib/overflow_kunit.c:247: +#define DEFINE_TEST_FUNC_TYPED(n, t, fmt) \ +static void do_test_ ## n(struct kunit *test, const struct test_ ## n *p) \ { \ check_one_op(t, fmt, add, "+", p->a, p->b, p->sum, p->s_of); \ check_one_op(t, fmt, add, "+", p->b, p->a, p->sum, p->s_of); \ -:175: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'fmt' - possible side-effects? #175: FILE: lib/overflow_kunit.c:247: +#define DEFINE_TEST_FUNC_TYPED(n, t, fmt) \ +static void do_test_ ## n(struct kunit *test, const struct test_ ## n *p) \ { \ check_one_op(t, fmt, add, "+", p->a, p->b, p->sum, p->s_of); \ check_one_op(t, fmt, add, "+", p->b, p->a, p->sum, p->s_of); \ -:185: ERROR:OPEN_BRACE: open brace '{' following function definitions go on the next line #185: FILE: lib/overflow_kunit.c:257: +static void n ## _overflow_test(struct kunit *test) { \ -:212: CHECK:LINE_SPACING: Please use a blank line after function/struct/union/enum declarations #212: FILE: lib/overflow_kunit.c:285: +}; +DEFINE_TEST_FUNC_TYPED(u32_u32__u8, u8, "%d"); -:218: CHECK:LINE_SPACING: Please use a blank line after function/struct/union/enum declarations #218: FILE: lib/overflow_kunit.c:291: +}; +DEFINE_TEST_FUNC_TYPED(u32_u32__int, int, "%d"); -:225: CHECK:LINE_SPACING: Please use a blank line after function/struct/union/enum declarations #225: FILE: lib/overflow_kunit.c:298: +}; +DEFINE_TEST_FUNC_TYPED(u8_u8__int, int, "%d"); -:232: CHECK:LINE_SPACING: Please use a blank line after function/struct/union/enum declarations #232: FILE: lib/overflow_kunit.c:305: +}; +DEFINE_TEST_FUNC_TYPED(int_int__u8, u8, "%d"); total: 1 errors, 1 warnings, 14 checks, 224 lines checked 538cff084db9 overflow: Move and add few utility macros into overflow 0e6250331316 compiler_types.h: Add assert_same_type to catch type mis-match while compiling -:121: CHECK:MACRO_ARG_REUSE: Macro argument reuse 't' - possible side-effects? #121: FILE: include/linux/compiler_types.h:335: +#define assert_same_typable(t, n) static_assert( \ + __builtin_choose_expr(__builtin_constant_p(n), \ + overflows_type_ret_const_expr(n,t) == 0, \ + __same_type(t, n))) -:121: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'n' - possible side-effects? #121: FILE: include/linux/compiler_types.h:335: +#define assert_same_typable(t, n) static_assert( \ + __builtin_choose_expr(__builtin_constant_p(n), \ + overflows_type_ret_const_expr(n,t) == 0, \ + __same_type(t, n))) -:123: ERROR:SPACING: space required after that ',' (ctx:VxV) #123: FILE: include/linux/compiler_types.h:337: + overflows_type_ret_const_expr(n,t) == 0, \ ^ -:157: ERROR:SPACING: space required after that ',' (ctx:VxV) #157: FILE: include/linux/overflow.h:214: +#define overflows_type_ret_const_expr(x,T) ( \ ^ -:157: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'x' - possible side-effects? #157: FILE: include/linux/overflow.h:214: +#define overflows_type_ret_const_expr(x,T) ( \ + is_unsigned_type(typeof(x)) ? \ + x > type_max(typeof(T)) ? 1 : 0 \ + : is_unsigned_type(typeof(T)) ? \ + x < 0 || x > type_max(typeof(T)) ? 1 : 0 \ + : x < type_min(typeof(T)) || x > type_max(typeof(T)) ? 1 : 0 ) -:157: CHECK:MACRO_ARG_PRECEDENCE: Macro argument 'x' may be better as '(x)' to avoid precedence issues #157: FILE: include/linux/overflow.h:214: +#define overflows_type_ret_const_expr(x,T) ( \ + is_unsigned_type(typeof(x)) ? \ + x > type_max(typeof(T)) ? 1 : 0 \ + : is_unsigned_type(typeof(T)) ? \ + x < 0 || x > type_max(typeof(T)) ? 1 : 0 \ + : x < type_min(typeof(T)) || x > type_max(typeof(T)) ? 1 : 0 ) -:158: WARNING:SPACE_BEFORE_TAB: please, no space before tabs #158: FILE: include/linux/overflow.h:215: +^Iis_unsigned_type(typeof(x)) ? ^I^I^I^I\$ -:158: CHECK:SPACING: No space is necessary after a cast #158: FILE: include/linux/overflow.h:215: + is_unsigned_type(typeof(x)) ? \ -:159: CHECK:SPACING: No space is necessary after a cast #159: FILE: include/linux/overflow.h:216: + x > type_max(typeof(T)) ? 1 : 0 \ -:160: WARNING:SPACE_BEFORE_TAB: please, no space before tabs #160: FILE: include/linux/overflow.h:217: +^I: is_unsigned_type(typeof(T)) ? ^I^I^I\$ -:160: CHECK:SPACING: No space is necessary after a cast #160: FILE: include/linux/overflow.h:217: + : is_unsigned_type(typeof(T)) ? \ -:161: CHECK:SPACING: No space is necessary after a cast #161: FILE: include/linux/overflow.h:218: + x < 0 || x > type_max(typeof(T)) ? 1 : 0 \ -:162: CHECK:SPACING: No space is necessary after a cast #162: FILE: include/linux/overflow.h:219: + : x < type_min(typeof(T)) || x > type_max(typeof(T)) ? 1 : 0 ) -:162: ERROR:SPACING: space prohibited before that close parenthesis ')' #162: FILE: include/linux/overflow.h:219: + : x < type_min(typeof(T)) || x > type_max(typeof(T)) ? 1 : 0 ) -:178: CHECK:MACRO_ARG_REUSE: Macro argument reuse 't2' - possible side-effects? #178: FILE: lib/overflow_kunit.c:693: +#define TEST_OVERFLOWS_TYPE(t1, t2, v, of) do { \ + t1 __t1 = v; \ + t2 __t2; \ + bool __of; \ + __of = overflows_type(v, t2); \ + if (__of != of) { \ + KUNIT_EXPECT_EQ_MSG(test, __of, of, \ + "expected overflows_type(%s, %s) to%s overflow\n", \ + #v, #t2, of ? "" : " not"); \ + } \ + __of = overflows_type(v, __t2); \ + if (__of != of) { \ + KUNIT_EXPECT_EQ_MSG(test, __of, of, \ + "expected overflows_type(%s, %s) to%s overflow\n", \ + #v, #t2" __t2", of ? "" : " not"); \ + } \ + __of = overflows_type(__t1, t2); \ + if (__of != of) { \ + KUNIT_EXPECT_EQ_MSG(test, __of, of, \ + "expected overflows_type(%s, %s) to%s overflow\n", \ + #t1" __t1 = "#v, #t2, of ? "" : " not"); \ + } \ + __of = overflows_type(__t1, __t2); \ + if (__of != of) { \ + KUNIT_EXPECT_EQ_MSG(test, __of, of, \ + "expected overflows_type(%s, %s) to%s overflow\n", \ + #t1" __t1 = "#v, #t2" __t2", of ? "" : " not"); \ + } \ + __of = overflows_type_ret_const_expr(v, t2) ? true : false; \ + if (__of != of) { \ + KUNIT_EXPECT_EQ_MSG(test, __of, of, \ + "expected overflows_type_ret_const_expr(%s, %s) to%s overflow\n", \ + #v, #t2, of ? "" : " not"); \ + } \ + __of = overflows_type_ret_const_expr(v, __t2) ? true : false; \ + if (__of != of) { \ + KUNIT_EXPECT_EQ_MSG(test, __of, of, \ + "expected overflows_type_ret_const_expr(%s, %s) to%s overflow\n", \ + #v, #t2" __t2", of ? "" : " not"); \ + } \ + __of = overflows_type_ret_const_expr(__t1, t2) ? true : false; \ + if (__of != of) { \ + KUNIT_EXPECT_EQ_MSG(test, __of, of, \ + "expected overflows_type_ret_const_expr(%s, %s) to%s overflow\n", \ + #t1" __t1 = "#v, #t2, of ? "" : " not"); \ + } \ + __of = overflows_type_ret_const_expr(__t1, __t2) ? true : false;\ + if (__of != of) { \ + KUNIT_EXPECT_EQ_MSG(test, __of, of, \ + "expected overflows_type_ret_const_expr(%s, %s) to%s overflow\n", \ + #t1" __t1 = "#v, #t2" __t2", of ? "" : " not"); \ + } \ +} while(0) -:178: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'v' - possible side-effects? #178: FILE: lib/overflow_kunit.c:693: +#define TEST_OVERFLOWS_TYPE(t1, t2, v, of) do { \ + t1 __t1 = v; \ + t2 __t2; \ + bool __of; \ + __of = overflows_type(v, t2); \ + if (__of != of) { \ + KUNIT_EXPECT_EQ_MSG(test, __of, of, \ + "expected overflows_type(%s, %s) to%s overflow\n", \ + #v, #t2, of ? "" : " not"); \ + } \ + __of = overflows_type(v, __t2); \ + if (__of != of) { \ + KUNIT_EXPECT_EQ_MSG(test, __of, of, \ + "expected overflows_type(%s, %s) to%s overflow\n", \ + #v, #t2" __t2", of ? "" : " not"); \ + } \ + __of = overflows_type(__t1, t2); \ + if (__of != of) { \ + KUNIT_EXPECT_EQ_MSG(test, __of, of, \ + "expected overflows_type(%s, %s) to%s overflow\n", \ + #t1" __t1 = "#v, #t2, of ? "" : " not"); \ + } \ + __of = overflows_type(__t1, __t2); \ + if (__of != of) { \ + KUNIT_EXPECT_EQ_MSG(test, __of, of, \ + "expected overflows_type(%s, %s) to%s overflow\n", \ + #t1" __t1 = "#v, #t2" __t2", of ? "" : " not"); \ + } \ + __of = overflows_type_ret_const_expr(v, t2) ? true : false; \ + if (__of != of) { \ + KUNIT_EXPECT_EQ_MSG(test, __of, of, \ + "expected overflows_type_ret_const_expr(%s, %s) to%s overflow\n", \ + #v, #t2, of ? "" : " not"); \ + } \ + __of = overflows_type_ret_const_expr(v, __t2) ? true : false; \ + if (__of != of) { \ + KUNIT_EXPECT_EQ_MSG(test, __of, of, \ + "expected overflows_type_ret_const_expr(%s, %s) to%s overflow\n", \ + #v, #t2" __t2", of ? "" : " not"); \ + } \ + __of = overflows_type_ret_const_expr(__t1, t2) ? true : false; \ + if (__of != of) { \ + KUNIT_EXPECT_EQ_MSG(test, __of, of, \ + "expected overflows_type_ret_const_expr(%s, %s) to%s overflow\n", \ + #t1" __t1 = "#v, #t2, of ? "" : " not"); \ + } \ + __of = overflows_type_ret_const_expr(__t1, __t2) ? true : false;\ + if (__of != of) { \ + KUNIT_EXPECT_EQ_MSG(test, __of, of, \ + "expected overflows_type_ret_const_expr(%s, %s) to%s overflow\n", \ + #t1" __t1 = "#v, #t2" __t2", of ? "" : " not"); \ + } \ +} while(0) -:178: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'of' - possible side-effects? #178: FILE: lib/overflow_kunit.c:693: +#define TEST_OVERFLOWS_TYPE(t1, t2, v, of) do { \ + t1 __t1 = v; \ + t2 __t2; \ + bool __of; \ + __of = overflows_type(v, t2); \ + if (__of != of) { \ + KUNIT_EXPECT_EQ_MSG(test, __of, of, \ + "expected overflows_type(%s, %s) to%s overflow\n", \ + #v, #t2, of ? "" : " not"); \ + } \ + __of = overflows_type(v, __t2); \ + if (__of != of) { \ + KUNIT_EXPECT_EQ_MSG(test, __of, of, \ + "expected overflows_type(%s, %s) to%s overflow\n", \ + #v, #t2" __t2", of ? "" : " not"); \ + } \ + __of = overflows_type(__t1, t2); \ + if (__of != of) { \ + KUNIT_EXPECT_EQ_MSG(test, __of, of, \ + "expected overflows_type(%s, %s) to%s overflow\n", \ + #t1" __t1 = "#v, #t2, of ? "" : " not"); \ + } \ + __of = overflows_type(__t1, __t2); \ + if (__of != of) { \ + KUNIT_EXPECT_EQ_MSG(test, __of, of, \ + "expected overflows_type(%s, %s) to%s overflow\n", \ + #t1" __t1 = "#v, #t2" __t2", of ? "" : " not"); \ + } \ + __of = overflows_type_ret_const_expr(v, t2) ? true : false; \ + if (__of != of) { \ + KUNIT_EXPECT_EQ_MSG(test, __of, of, \ + "expected overflows_type_ret_const_expr(%s, %s) to%s overflow\n", \ + #v, #t2, of ? "" : " not"); \ + } \ + __of = overflows_type_ret_const_expr(v, __t2) ? true : false; \ + if (__of != of) { \ + KUNIT_EXPECT_EQ_MSG(test, __of, of, \ + "expected overflows_type_ret_const_expr(%s, %s) to%s overflow\n", \ + #v, #t2" __t2", of ? "" : " not"); \ + } \ + __of = overflows_type_ret_const_expr(__t1, t2) ? true : false; \ + if (__of != of) { \ + KUNIT_EXPECT_EQ_MSG(test, __of, of, \ + "expected overflows_type_ret_const_expr(%s, %s) to%s overflow\n", \ + #t1" __t1 = "#v, #t2, of ? "" : " not"); \ + } \ + __of = overflows_type_ret_const_expr(__t1, __t2) ? true : false;\ + if (__of != of) { \ + KUNIT_EXPECT_EQ_MSG(test, __of, of, \ + "expected overflows_type_ret_const_expr(%s, %s) to%s overflow\n", \ + #t1" __t1 = "#v, #t2" __t2", of ? "" : " not"); \ + } \ +} while(0) -:178: CHECK:MACRO_ARG_PRECEDENCE: Macro argument 'of' may be better as '(of)' to avoid precedence issues #178: FILE: lib/overflow_kunit.c:693: +#define TEST_OVERFLOWS_TYPE(t1, t2, v, of) do { \ + t1 __t1 = v; \ + t2 __t2; \ + bool __of; \ + __of = overflows_type(v, t2); \ + if (__of != of) { \ + KUNIT_EXPECT_EQ_MSG(test, __of, of, \ + "expected overflows_type(%s, %s) to%s overflow\n", \ + #v, #t2, of ? "" : " not"); \ + } \ + __of = overflows_type(v, __t2); \ + if (__of != of) { \ + KUNIT_EXPECT_EQ_MSG(test, __of, of, \ + "expected overflows_type(%s, %s) to%s overflow\n", \ + #v, #t2" __t2", of ? "" : " not"); \ + } \ + __of = overflows_type(__t1, t2); \ + if (__of != of) { \ + KUNIT_EXPECT_EQ_MSG(test, __of, of, \ + "expected overflows_type(%s, %s) to%s overflow\n", \ + #t1" __t1 = "#v, #t2, of ? "" : " not"); \ + } \ + __of = overflows_type(__t1, __t2); \ + if (__of != of) { \ + KUNIT_EXPECT_EQ_MSG(test, __of, of, \ + "expected overflows_type(%s, %s) to%s overflow\n", \ + #t1" __t1 = "#v, #t2" __t2", of ? "" : " not"); \ + } \ + __of = overflows_type_ret_const_expr(v, t2) ? true : false; \ + if (__of != of) { \ + KUNIT_EXPECT_EQ_MSG(test, __of, of, \ + "expected overflows_type_ret_const_expr(%s, %s) to%s overflow\n", \ + #v, #t2, of ? "" : " not"); \ + } \ + __of = overflows_type_ret_const_expr(v, __t2) ? true : false; \ + if (__of != of) { \ + KUNIT_EXPECT_EQ_MSG(test, __of, of, \ + "expected overflows_type_ret_const_expr(%s, %s) to%s overflow\n", \ + #v, #t2" __t2", of ? "" : " not"); \ + } \ + __of = overflows_type_ret_const_expr(__t1, t2) ? true : false; \ + if (__of != of) { \ + KUNIT_EXPECT_EQ_MSG(test, __of, of, \ + "expected overflows_type_ret_const_expr(%s, %s) to%s overflow\n", \ + #t1" __t1 = "#v, #t2, of ? "" : " not"); \ + } \ + __of = overflows_type_ret_const_expr(__t1, __t2) ? true : false;\ + if (__of != of) { \ + KUNIT_EXPECT_EQ_MSG(test, __of, of, \ + "expected overflows_type_ret_const_expr(%s, %s) to%s overflow\n", \ + #t1" __t1 = "#v, #t2" __t2", of ? "" : " not"); \ + } \ +} while(0) -:192: CHECK:CONCATENATED_STRING: Concatenated strings should use spaces between elements #192: FILE: lib/overflow_kunit.c:707: + #v, #t2" __t2", of ? "" : " not"); \ -:198: CHECK:CONCATENATED_STRING: Concatenated strings should use spaces between elements #198: FILE: lib/overflow_kunit.c:713: + #t1" __t1 = "#v, #t2, of ? "" : " not"); \ -:204: CHECK:CONCATENATED_STRING: Concatenated strings should use spaces between elements #204: FILE: lib/overflow_kunit.c:719: + #t1" __t1 = "#v, #t2" __t2", of ? "" : " not"); \ -:216: CHECK:CONCATENATED_STRING: Concatenated strings should use spaces between elements #216: FILE: lib/overflow_kunit.c:731: + #v, #t2" __t2", of ? "" : " not"); \ -:222: CHECK:CONCATENATED_STRING: Concatenated strings should use spaces between elements #222: FILE: lib/overflow_kunit.c:737: + #t1" __t1 = "#v, #t2, of ? "" : " not"); \ -:228: CHECK:CONCATENATED_STRING: Concatenated strings should use spaces between elements #228: FILE: lib/overflow_kunit.c:743: + #t1" __t1 = "#v, #t2" __t2", of ? "" : " not"); \ -:230: ERROR:SPACING: space required before the open parenthesis '(' #230: FILE: lib/overflow_kunit.c:745: +} while(0) -:411: CHECK:MACRO_ARG_REUSE: Macro argument reuse 't' - possible side-effects? #411: FILE: lib/overflow_kunit.c:926: +#define TEST_ASSERT_SAME_TYPE(t) do { \ + typeof(t) __t1 = type_max(t); \ + typeof(t) __t2 = type_min(t); \ + assert_same_type(t, t); \ + assert_same_type(t, __t1); \ + assert_same_type(__t1, t); \ + assert_same_type(__t1, __t2); \ +} while (0) -:412: WARNING:LEADING_SPACE: please, no spaces at the start of a line #412: FILE: lib/overflow_kunit.c:927: + typeof(t) __t1 = type_max(t);^I\$ -:413: WARNING:LEADING_SPACE: please, no spaces at the start of a line #413: FILE: lib/overflow_kunit.c:928: + typeof(t) __t2 = type_min(t);^I\$ -:414: WARNING:LEADING_SPACE: please, no spaces at the start of a line #414: FILE: lib/overflow_kunit.c:929: + assert_same_type(t, t);^I^I\$ -:415: WARNING:LEADING_SPACE: please, no spaces at the start of a line #415: FILE: lib/overflow_kunit.c:930: + assert_same_type(t, __t1);^I^I\$ -:416: WARNING:LEADING_SPACE: please, no spaces at the start of a line #416: FILE: lib/overflow_kunit.c:931: + assert_same_type(__t1, t);^I^I\$ -:417: WARNING:LEADING_SPACE: please, no spaces at the start of a line #417: FILE: lib/overflow_kunit.c:932: + assert_same_type(__t1, __t2);^I\$ -:421: CHECK:MACRO_ARG_REUSE: Macro argument reuse 't' - possible side-effects? #421: FILE: lib/overflow_kunit.c:936: +#define TEST_ASSERT_SAME_TYPABLE(t) do { \ + typeof(t) __t1 = type_max(t); \ + typeof(t) __t2 = type_min(t); \ + assert_same_typable(t, __t1); \ + assert_same_typable(t, type_max(t)); \ + assert_same_typable(t, type_min(t)); \ + assert_same_typable(__t1, type_max(t)); \ + assert_same_typable(__t1, type_min(t)); \ + assert_same_typable(__t1, __t2); \ +} while (0) -:422: WARNING:LEADING_SPACE: please, no spaces at the start of a line #422: FILE: lib/overflow_kunit.c:937: + typeof(t) __t1 = type_max(t);^I^I\$ -:423: WARNING:LEADING_SPACE: please, no spaces at the start of a line #423: FILE: lib/overflow_kunit.c:938: + typeof(t) __t2 = type_min(t);^I^I\$ -:424: WARNING:LEADING_SPACE: please, no spaces at the start of a line #424: FILE: lib/overflow_kunit.c:939: + assert_same_typable(t, __t1);^I^I\$ -:425: WARNING:LEADING_SPACE: please, no spaces at the start of a line #425: FILE: lib/overflow_kunit.c:940: + assert_same_typable(t, type_max(t));^I^I\$ -:426: WARNING:LEADING_SPACE: please, no spaces at the start of a line #426: FILE: lib/overflow_kunit.c:941: + assert_same_typable(t, type_min(t));^I^I\$ -:427: WARNING:LEADING_SPACE: please, no spaces at the start of a line #427: FILE: lib/overflow_kunit.c:942: + assert_same_typable(__t1, type_max(t));^I\$ -:428: WARNING:LEADING_SPACE: please, no spaces at the start of a line #428: FILE: lib/overflow_kunit.c:943: + assert_same_typable(__t1, type_min(t));^I\$ -:429: WARNING:LEADING_SPACE: please, no spaces at the start of a line #429: FILE: lib/overflow_kunit.c:944: + assert_same_typable(__t1, __t2);^I^I\$ total: 4 errors, 16 warnings, 21 checks, 384 lines checked 9b54f0e94b58 drm/i915/gem: Typecheck page lookups -:144: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'n' - possible side-effects? #144: FILE: drivers/gpu/drm/i915/gem/i915_gem_object.h:413: +#define i915_gem_object_page_iter_get_sg(obj, it, n, offset) ({ \ + assert_same_typable(pgoff_t, n); \ + __i915_gem_object_page_iter_get_sg(obj, it, n, offset); \ +}) -:193: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'n' - possible side-effects? #193: FILE: drivers/gpu/drm/i915/gem/i915_gem_object.h:458: +#define i915_gem_object_get_sg(obj, n, offset) ({ \ + assert_same_typable(pgoff_t, n); \ + __i915_gem_object_get_sg(obj, n, offset); \ +}) -:242: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'n' - possible side-effects? #242: FILE: drivers/gpu/drm/i915/gem/i915_gem_object.h:503: +#define i915_gem_object_get_sg_dma(obj, n, offset) ({ \ + assert_same_typable(pgoff_t, n); \ + __i915_gem_object_get_sg_dma(obj, n, offset); \ +}) -:280: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'n' - possible side-effects? #280: FILE: drivers/gpu/drm/i915/gem/i915_gem_object.h:539: +#define i915_gem_object_get_page(obj, n) ({ \ + assert_same_typable(pgoff_t, n); \ + __i915_gem_object_get_page(obj, n); \ +}) -:317: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'n' - possible side-effects? #317: FILE: drivers/gpu/drm/i915/gem/i915_gem_object.h:574: +#define i915_gem_object_get_dirty_page(obj, n) ({ \ + assert_same_typable(pgoff_t, n); \ + __i915_gem_object_get_dirty_page(obj, n); \ +}) -:358: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'n' - possible side-effects? #358: FILE: drivers/gpu/drm/i915/gem/i915_gem_object.h:612: +#define i915_gem_object_get_dma_address_len(obj, n, len) ({ \ + assert_same_typable(pgoff_t, n); \ + __i915_gem_object_get_dma_address_len(obj, n, len); \ +}) -:395: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'n' - possible side-effects? #395: FILE: drivers/gpu/drm/i915/gem/i915_gem_object.h:647: +#define i915_gem_object_get_dma_address(obj, n) ({ \ + assert_same_typable(pgoff_t, n); \ + __i915_gem_object_get_dma_address(obj, n); \ +}) total: 0 errors, 0 warnings, 7 checks, 623 lines checked a5c31124c167 drm/i915: Check for integer truncation on scatterlist creation -:204: WARNING:NEW_TYPEDEFS: do not add new typedefs #204: FILE: drivers/gpu/drm/i915/i915_scatterlist.h:224: +typedef unsigned int __sg_size_t; /* see linux/scatterlist.h */ -:205: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses #205: FILE: drivers/gpu/drm/i915/i915_scatterlist.h:225: +#define sg_alloc_table(sgt, nents, gfp) \ + overflows_type(nents, __sg_size_t) ? -E2BIG \ + : ((sg_alloc_table)(sgt, (__sg_size_t)(nents), gfp)) -:205: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'nents' - possible side-effects? #205: FILE: drivers/gpu/drm/i915/i915_scatterlist.h:225: +#define sg_alloc_table(sgt, nents, gfp) \ + overflows_type(nents, __sg_size_t) ? -E2BIG \ + : ((sg_alloc_table)(sgt, (__sg_size_t)(nents), gfp)) -:209: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses #209: FILE: drivers/gpu/drm/i915/i915_scatterlist.h:229: +#define sg_alloc_table_from_pages_segment(sgt, pages, npages, offset, size, max_segment, gfp) \ + overflows_type(npages, __sg_size_t) ? -E2BIG \ + : ((sg_alloc_table_from_pages_segment)(sgt, pages, (__sg_size_t)(npages), offset, \ + size, max_segment, gfp)) -:209: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'npages' - possible side-effects? #209: FILE: drivers/gpu/drm/i915/i915_scatterlist.h:229: +#define sg_alloc_table_from_pages_segment(sgt, pages, npages, offset, size, max_segment, gfp) \ + overflows_type(npages, __sg_size_t) ? -E2BIG \ + : ((sg_alloc_table_from_pages_segment)(sgt, pages, (__sg_size_t)(npages), offset, \ + size, max_segment, gfp)) total: 2 errors, 1 warnings, 2 checks, 126 lines checked 7fca72c6a9e8 drm/i915: Check for integer truncation on the configuration of ttm place 6015c16f33fc drm/i915: Check if the size is too big while creating shmem file e4ecf5fc0a6a drm/i915: Use error code as -E2BIG when the size of gem ttm object is too large -:11: WARNING:COMMIT_LOG_LONG_LINE: Possible unwrapped commit description (prefer a maximum 75 chars per line) #11: to add vma. The direct function that returns -ENOSPC is drm_mm_insert_node_in_range(). total: 0 errors, 1 warnings, 0 checks, 17 lines checked 45fbb3235000 drm/i915: Remove truncation warning for large objects