On Wed, 2018-05-23 at 10:46 -0700, Martin KaFai Lau wrote: > Sparse warning: > kernel/bpf/btf.c:1985:34: warning: Variable length array is used.
Perhaps use ARRAY_SIZE directly instead of indirectly via a #define > diff --git a/kernel/bpf/btf.c b/kernel/bpf/btf.c [] > @@ -1970,6 +1970,8 @@ static const size_t btf_sec_info_offset[] = { > offsetof(struct btf_header, str_off), > }; > > +#define NR_SECS ARRAY_SIZE(btf_sec_info_offset) > + > static int btf_sec_info_cmp(const void *a, const void *b) > { > const struct btf_sec_info *x = a; > @@ -1981,8 +1983,7 @@ static int btf_sec_info_cmp(const void *a, const void > *b) > static int btf_check_sec_info(struct btf_verifier_env *env, > u32 btf_data_size) > { > - const unsigned int nr_secs = ARRAY_SIZE(btf_sec_info_offset); > - struct btf_sec_info secs[nr_secs]; > + struct btf_sec_info secs[NR_SECS]; struct btf_sec_info secs[ARRAY_SIZE(btf_sec_info_offset)]; > u32 total, expected_total, i; > const struct btf_header *hdr; > const struct btf *btf; > @@ -1991,17 +1992,17 @@ static int btf_check_sec_info(struct btf_verifier_env > *env, > hdr = &btf->hdr; > > /* Populate the secs from hdr */ > - for (i = 0; i < nr_secs; i++) > + for (i = 0; i < NR_SECS; i++) for (i = 0; i < ARRAY_SIZE(btf_sec_info_offset); i++) > secs[i] = *(struct btf_sec_info *)((void *)hdr + > btf_sec_info_offset[i]); which makes this loop more intelligible. > - sort(secs, nr_secs, sizeof(struct btf_sec_info), > + sort(secs, NR_SECS, sizeof(struct btf_sec_info), > btf_sec_info_cmp, NULL); etc...