public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Strange code in include/linux/cpumask.h
@ 2009-03-25  4:51 Nikanth Karthikesan
  2009-03-25  5:11 ` Rusty Russell
  0 siblings, 1 reply; 5+ messages in thread
From: Nikanth Karthikesan @ 2009-03-25  4:51 UTC (permalink / raw)
  To: rusty; +Cc: nikanth, linux-kernel

Hi Rusty

I do not understand this code.

/**
 * to_cpumask - convert an NR_CPUS bitmap to a struct cpumask *
 * @bitmap: the bitmap
 *
 * There are a few places where cpumask_var_t isn't appropriate and
 * static cpumasks must be used (eg. very early boot), yet we don't
 * expose the definition of 'struct cpumask'.
 *
 * This does the conversion, and can be used as a constant initializer.
 */
#define to_cpumask(bitmap)                                              \
        ((struct cpumask *)(1 ? (bitmap)                                \
                            : (void *)sizeof(__check_is_bitmap(bitmap))))

static inline int __check_is_bitmap(const unsigned long *bitmap)
{
        return 1;
}

The conditional operator would always evaluates to true and return bitmap. So 
all it seems to does is
#define to_cpumansk(bitmap) (struct cpumask *)(bitmap)

Even If it would return (void *)sizeof(__check_is_bitmap(bitmap)), wouldn't it 
be always
(struct cpumask *) (sizeof(1))!?

Is this some magic for type safety?

Thanks
Nikanth

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2009-03-26  4:15 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-03-25  4:51 Strange code in include/linux/cpumask.h Nikanth Karthikesan
2009-03-25  5:11 ` Rusty Russell
2009-03-25  6:44   ` Nikanth Karthikesan
2009-03-25 22:44     ` Rusty Russell
2009-03-26  4:12       ` Nikanth Karthikesan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox