Re: [PATCH] cpumask 5/10 rewrite cpumask.h - single bitmap based implementation

Mikael Pettersson
2004-06-04T09:33:12Z

Paul Jackson writes:
> Perhaps I should comment the cpus_addr() definition as 'deprecated'?

Please don't. cpus_addr() is useful when you need to get a
handle on the representation for non-cpumask_t operations.

Case in point: the perfctr kernel extension needs to communicate
a cpumask_t to user-space because of the asymmetric nature of
HT P4s. Unfortunately, a simple copy_to_user() won't work because:
a) the size depends on kernel .config, and
b) the representation is defined in terms of sequences of ulong,
which breaks 32-bit applications on 64-bit kernels.
So perfctr instead converts a cpumask_t to a sequence of uint,
and copies both the number of uints and the uints themselves
to user-space.

Having to do this conversion with a for-each-CPU type loop would
be slow and ugly, and would IMO show that the cpumask_t ADT had
become an obstacle to the actual work that needs to be done.

So please keep cpus_addr().

/Mikael