Messages in this thread | | | Date | Wed, 21 May 2008 20:28:02 +0200 | From | "Vegard Nossum" <> | Subject | initialization of static per-cpu variables |
| |
Hi,
I encountered this comment in kernel/softirq.c:
/* Some compilers disobey section attribute on statics when not initialized -- RR */ static DEFINE_PER_CPU(struct tasklet_head, tasklet_vec) = { NULL }; static DEFINE_PER_CPU(struct tasklet_head, tasklet_hi_vec) = { NULL };
So I assume it's the combination of static and whatever section DFINE_PER_CPU puts the variable in which is the problem.
However, there's a LOT of these "static DEFINE_PER_CPU" without any initializer in the rest of the code, e.g.:
$ g 'static DEFINE_PER_CPU' kernel/sched.c static DEFINE_PER_CPU(struct sched_entity, init_sched_entity); static DEFINE_PER_CPU(struct cfs_rq, init_cfs_rq) ____cacheline_aligned_in_smp; static DEFINE_PER_CPU(struct sched_rt_entity, init_sched_rt_entity); static DEFINE_PER_CPU(struct rt_rq, init_rt_rq) ____cacheline_aligned_in_smp; static DEFINE_PER_CPU_SHARED_ALIGNED(struct rq, runqueues); static DEFINE_PER_CPU(unsigned long long, time_offset); static DEFINE_PER_CPU(unsigned long long, prev_cpu_time); static DEFINE_PER_CPU(spinlock_t, aggregate_lock); static DEFINE_PER_CPU(struct sched_domain, cpu_domains); static DEFINE_PER_CPU(struct sched_group, sched_group_cpus); static DEFINE_PER_CPU(struct sched_domain, core_domains); static DEFINE_PER_CPU(struct sched_group, sched_group_core); static DEFINE_PER_CPU(struct sched_domain, phys_domains); static DEFINE_PER_CPU(struct sched_group, sched_group_phys); static DEFINE_PER_CPU(struct sched_domain, node_domains); static DEFINE_PER_CPU(struct sched_domain, allnodes_domains); static DEFINE_PER_CPU(struct sched_group, sched_group_allnodes);
The comment seems to be ancient and I don't know who wrote it, so I'm making a guess that it's Rusty Russel (Cced).
So which do we do, delete the comment (on the grounds that it is invalid) or fix these other declarations (there's a lot of them)?
Vegard
-- "The animistic metaphor of the bug that maliciously sneaked in while the programmer was not looking is intellectually dishonest as it disguises that the error is the programmer's own creation." -- E. W. Dijkstra, EWD1036
| |