can we get rid of the cpumask_t typedef?

From: Rasmus Villemoes
Date: Thu Nov 21 2019 - 03:55:41 EST


The cpumask_t alias for "struct cpumask" doesn't seem to qualify for the
kernel's requirement for when a typedef is warranted. It's also somewhat
easily confused with cpumask_var_t which has very good reasons for being
a typedef. "struct cpumask" outnumbers "cpumask_t" about 5:2.

The motivation for this is that kbuild informed me about some driver
that I just enabled for ARM happens to include asm/irq.h, and for magic
reasons no other previous header happens to pull in cpumask.h. So the
build fails

>> arch/arm/include/asm/irq.h:34:50: error: unknown type name 'cpumask_t'
extern void arch_trigger_cpumask_backtrace(const cpumask_t *mask,

So I could just add a include linux/cpumask.h (and the reason I hadn't
noticed is that the -rt tree which I build upon carries just that) and
be done with it. But I'd rather not contribute to the "every header
pulls in every other header" madness. So I'd rather just change the
function to take a "struct cpumask *" and precede it with a forward
declaration of that.

As it happens, arch_trigger_cpumask_backtrace is a good example of the
sillyness the cpumask_t typedef leads to. ARM and Powerpc are
consistent, using cpumask_t in both declaration and definition. MIPS,
Sparc and x86 use "struct cpumask" in the declaration and cpumask_t in
the definition.

Rasmus