On Mon, Nov 24, 2014 at 10:16:15AM -0700, Jens Axboe wrote: > On 11/24/2014 09:22 AM, Paul E. McKenney wrote: > >On Mon, Nov 24, 2014 at 08:35:46AM -0700, Jens Axboe wrote: > >>On 11/24/2014 01:21 AM, Christoph Hellwig wrote: > >>>On Fri, Nov 21, 2014 at 02:56:00PM -0500, David Miller wrote: > >>>>I would suggest looking into the possibility that we allocate the memory > >>>>using the count of valid cpus, rather than the largest cpu number. > >>>> > >>>>That's a common error that runs into problems with discontiguous > >>>>cpu numbering like Sparc sometimes has. > >>> > >>>Yes, that does look like the case. Do you have a good trick on how > >>>to allocate a map for the highest possible cpu number without first > >>>iterating the cpu map? I couldn't find something that looks like a > >>>highest_possible_cpu() helper. > >> > >>Honestly I think that num_posible_cpus() should return the max of > >>number of CPUs (weigt), and the highest numbered CPU. It's a pain in > >>the butt to handle this otherwise. > > > >Hear, hear!!! That would make my life easier, and would make this sort > >of problem much less likely to occur! > > How about this one? Works for me! (Just for the record, as far as I know, this doesn't matter for RCU, which already uses nr_cpu_ids.) Thanx, Paul > -- > Jens Axboe > > diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h > index 0a9a6da21e74..db21f68aaef0 100644 > --- a/include/linux/cpumask.h > +++ b/include/linux/cpumask.h > @@ -83,7 +83,13 @@ extern const struct cpumask *const cpu_active_mask; > > #if NR_CPUS > 1 > #define num_online_cpus() cpumask_weight(cpu_online_mask) > -#define num_possible_cpus() cpumask_weight(cpu_possible_mask) > +/* > + * For platforms with discontig CPU numbering, the weight of the possible > + * bitmask may be less than the highest numbered CPU. Return the max of > + * the two, to prevent accidentical bugs. > + */ > +#define num_possible_cpus() \ > + max_t(unsigned int, cpumask_weight(cpu_possible_mask), nr_cpu_ids) > #define num_present_cpus() cpumask_weight(cpu_present_mask) > #define num_active_cpus() cpumask_weight(cpu_active_mask) > #define cpu_online(cpu) cpumask_test_cpu((cpu), cpu_online_mask) -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html