Re: [PATCH v2] hwmon (coretemp): Fix build breakage if SMP is undefined

From: Linus Torvalds
Date: Mon Sep 27 2010 - 19:44:31 EST


On Mon, Sep 27, 2010 at 4:27 PM, Guenter Roeck
<guenter.roeck@xxxxxxxxxxxx> wrote:
> On Mon, Sep 27, 2010 at 09:02:57AM -0400, Pekka Enberg wrote:
>> On Mon, Sep 27, 2010 at 3:59 PM, Ingo Molnar <mingo@xxxxxxx> wrote:
>> >
>> > * Guenter Roeck <guenter.roeck@xxxxxxxxxxxx> wrote:
>> >
>> >> +#ifdef CONFIG_SMP
>> >> +#endif
>> >> +#ifdef CONFIG_SMP
>> >> +#endif
>> >
>> > Hm, this tickles my uglo-meter. Is there no cleaner way, preferably one
>> > that doesnt involve preprocessor directives?
>>
>> Implement cpu_sibling_mask() on UP so that the loop goes away?
>
> So what is the take ? Looks like Linus won't accept my patch without someone
> else signing off on it. If the uglo-meter prevents it from being accepted,
> I'll be happy to submit the SMP cleanup patch instead. As I mentioned
> before, I would prefer that to go into -next.

I'd _much_ rather see cpu_sibling_mask() on UP, and just have the loop go away.

But that would be a generic change. Something like the (UNTESTED!)
attached. It returns a NULL, since it would always be a bug to
actually _use_ the (nonexistent) mask. And that's fine for things like
for_each_cpu() that will then happily ignore the mask.

Ingo, does this make those randconfig things work? I think it's
prettier than the horrible "sprinkle #ifdef CONFIG_SMP around in
random places".

Linus
include/linux/smp.h | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/include/linux/smp.h b/include/linux/smp.h
index cfa2d20..ad48077 100644
--- a/include/linux/smp.h
+++ b/include/linux/smp.h
@@ -149,6 +149,8 @@ smp_call_function_any(const struct cpumask *mask, void (*func)(void *info),
return smp_call_function_single(0, func, info, wait);
}

+static inline const struct cpumask *cpu_sibling_mask(int cpu) { return NULL; }
+
#endif /* !SMP */

/*