Messages in this thread | | | Date | Fri, 22 Aug 2008 06:37:15 +0200 | From | Ingo Molnar <> | Subject | Re: [PATCH, RFC, tip/core/rcu] scalable classic RCU implementation |
| |
* Paul E. McKenney <paulmck@linux.vnet.ibm.com> wrote:
> +#define MAX_RCU_LEVELS 3 > +#if NR_CPUS <= CONFIG_RCU_FANOUT > +#define NUM_RCU_LEVELS 1 > +#define NUM_RCU_LEVEL_1 1 > +#define NUM_RCU_LEVEL_2 NR_CPUS > +#define NUM_RCU_LEVEL_3 0 > +#define NUM_RCU_LEVEL_4 0 > +#define NUM_RCU_NODES NUM_RCU_LEVEL_1 > +#elif NR_CPUS <= CONFIG_RCU_FANOUT * CONFIG_RCU_FANOUT > +#define NUM_RCU_LEVELS 2 > +#define NUM_RCU_LEVEL_1 1 > +#define NUM_RCU_LEVEL_2 \ > + (((NR_CPUS) + (CONFIG_RCU_FANOUT) - 1) / (CONFIG_RCU_FANOUT)) > +#define NUM_RCU_LEVEL_3 NR_CPUS > +#define NUM_RCU_LEVEL_4 0 > +#define NUM_RCU_NODES \ > + ((NUM_RCU_LEVEL_1) + (NUM_RCU_LEVEL_2)) > +#elif NR_CPUS <= CONFIG_RCU_FANOUT * CONFIG_RCU_FANOUT * CONFIG_RCU_FANOUT > +#define NUM_RCU_LEVELS 3 > +#define RCU_FANOUT_SQ ((CONFIG_RCU_FANOUT) * (CONFIG_RCU_FANOUT)) > +#define NUM_RCU_LEVEL_1 1 > +#define NUM_RCU_LEVEL_2 \ > + (((NR_CPUS) + (RCU_FANOUT_SQ) - 1) / (RCU_FANOUT_SQ)) > +#define NUM_RCU_LEVEL_3 \ > + ((NR_CPUS) + (CONFIG_RCU_FANOUT) - 1) / (CONFIG_RCU_FANOUT) > +#define NUM_RCU_LEVEL_4 NR_CPUS > +#define NUM_RCU_NODES \ > + ((NUM_RCU_LEVEL_1) + \ > + (NUM_RCU_LEVEL_2) + \ > + (NUM_RCU_LEVEL_3)) > +#else > +#error "CONFIG_RCU_FANOUT insufficient for NR_CPUS" > +#endif
just a quick stylistic suggestion: if feasible then such sizing ugliness should be hidden in a Kconfig file. (if Kconfig is capable enough for this that is)
Ingo
| |