Re: Problem with percpu values when bringing up second CPU?

From: Rusty Russell
Date: Tue Aug 04 2009 - 21:33:06 EST


On Wed, 5 Aug 2009 08:28:34 am Jeremy Fitzhardinge wrote:
> Hi,
>
> I just tracked down a bug I was having to a change where I changed one
> of my Xen event channel variables to a percpu variable, relating to
> masking an event channel.
>
> The symptom was that shortly after bringing up the second CPU, the first
> CPU's timer events stopped arriving, apparently because they had become
> masked.
>
> The event channels masks are declared as:
>
> #define NR_EVENT_CHANNEL_LONGS (NR_EVENT_CHANNELS/BITS_PER_LONG)
> static DEFINE_PER_CPU(unsigned long,
> cpu_evtchn_mask[NR_EVENT_CHANNEL_LONGS]) =
> {[0 ... NR_EVENT_CHANNEL_LONGS-1] = ~0ul }; /* everything masked by default */
>
>
> My theory about what's happening is that when the second CPU comes up,
> it allocates separate percpu areas for each CPU, but it is somehow
> failing to accurately copy CPU 0's percpu data over

If you touch the per-cpu vars before setup_per_cpu_areas(), you will hit the
master copy.

Is that possible?
Rusty.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/