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

Andrew Morton
2004-06-04T09:43:09Z

Mikael Pettersson <mikpe@csd.uu.se> wrote:
>
> 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.

In that case the cpumask code should provide some API function which
converts a cpumask_t into (and from?) some canonical and documented form.
Then you copy what it gave you to userspace.

Particular pieces of code shouldn't go poking inside the cpumask_t's
representation. It's different on different architectures and we could
even change it in the future.