Hello, 11/27/2009 02:41 PM, Ingo Molnar wrote: > But allowing &dr7 is outright dangerous - and not particularly clean > either. > > Nothing tells us that it's a percpu variable and it blends into the > regular namespace while most of the operators on it are special > (__get_cpu_var(), per_cpu(), __this_cpu(), etc.). > > What if someone writes &dr7 in preemptible code? It's dangerous to do it > and a quick review wont catch the mistake. Seeing &per_cpu_dr7 in > clearly preemptible code does raise alarms on the other hand. > > So i think it should be valid to take the address of it and unify the > static and dynamic percpu space ... if it's prefixed properly: what's > wrong with &per_cpu_dr7? DEFINE_PER_CPU(unsigned long, reg0); DEFINE_PER_CPU(unsigned long, reg1); static void my_fn(void) { unsigned long reg0 = per_cpu_var(reg0); unsigned long reg1 = per_cpu_var(reg1); unsigned long *p = &per_cpu_var(reg0); // blah blah if (some cond) p = ®1; // oops meant &per_cpu_var(reg1) // blah blah this_cpu_inc(p); } It's more dangerous to depend on the pseudo namespace created by prefixing. Let's add __percpu sparse annotations. It will be more flexible and safer. Thanks. -- tejun -- To unsubscribe from this list: send the line "unsubscribe linux-next" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html