On Wed, Jul 29, 2020 at 4:08 PM Stephen Rothwell <s...@canb.auug.org.au> wrote: > > include/linux/random.h:123:24: error: variable 'net_rand_state' with > 'latent_entropy' attribute must not be local > 123 | DECLARE_PER_CPU(struct rnd_state, net_rand_state) __latent_entropy;
Hmm. Ok, this shows a limitation of my allmodconfig testing (and all my normal builds) - no plugins. So that problem wasn't as obvious as it should have been. That error isn't very helpful, in that I think it actually is very wrong. The variable really isn't local at all. I think what the plugin *means* by "local" is "automatic", and I think it uses the wrong test for it. IOW, looking at the plugin, it does if (!TREE_STATIC(*node)) { *no_add_attrs = true; error("variable %qD with %qE attribute must not be local", *node, name); and what I think it really wants is that it has a static address - so a global variable is fine - as opposed to being an actual static declaration. Also looking at the plugin, I suspect it is going to be very unhappy about the fact that the attribute is there both on a declaration and on the actual definition. The code later seems to really only want to work on the definition, since it's creating an initializer.. IOW, I get the feeling that the plugin is confused, and it so happened that the only variables we'd marked for latent entropy were static ones. But I haven't done gcc plugins, so... Adding the gcc plugin people. Otherwise the only option seems to be to just remove that __latent_entropy marker. Linus