Re: [PATCH] staging: fbtft: use ARRAY_SIZE() in NUMARGS macro
From: Andy Shevchenko <hidden>
Date: 2026-06-26 12:23:54
Also in:
dri-devel, linux-staging, lkml
On Fri, Jun 26, 2026 at 02:27:25PM +0530, Joyeta Modak wrote: Please, do not top-post!
Thank you for the feedback and the question. I checked every write_reg() across all fbtft drivers and found that the largest number of arguments is 129 in write_reg(par, MIPI_DCS_WRITE_LUT,...) As COUNT_ARGS() in args.h only supports up to 15, it is not a safe fit here. However, the kernel test robot reported a problem with my implementation as the __must_be_array() check in ARRAY_SIZE() requires the array to be a compile time constant expression and thus breaks the call at several places.(example par->bgr) I tried to reproduce this locally on my system using both GCC and Clang with ARCH=um on x86_64 but could not reproduce the build failure.
How "um" is anyhow related to the real world cases? Try to compile your stuff with real ARCH settings, like x86_64.
Since the original sizeof() based approach had no such errors flagged, I am thinking of dropping the ARRAY_SIZE() approach. Any other feedback is appreciated. Thanks again.
On Wed, Jun 24, 2026 at 5:01 PM Andy Shevchenko [off-list ref] wrote:quoted
On Wed, Jun 24, 2026 at 01:08:04PM +0530, Joyeta Modak wrote:quoted
NUMARGS() computes the number of arguments by dividing the size of a temporary int array by sizeof(int). Using the standard ARRAY_SIZE() macro is the correct way to count array elements in the kernel, and ARRAY_SIZE() also provides a __must_be_array() compile time check. There are no functional changes.
...
quoted
quoted
-#define NUMARGS(...) (sizeof((int[]){__VA_ARGS__}) / sizeof(int)) +#define NUMARGS(...) ARRAY_SIZE(((int[]){__VA_ARGS__})) #define write_reg(par, ...) \ ((par)->fbtftops.write_register(par, NUMARGS(__VA_ARGS__), __VA_ARGS__))What is the maximum parameters .write_register() takes in practice in the fbtft drivers? If it's less than or equal to 15, we may use args.h instead.
-- With Best Regards, Andy Shevchenko