[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] x86/hpet: add a lock when cpu clear cpumask in hpet_broadcast_exit();
From: David Wang <davidwang@xxxxxxxxxxx> By the hpet_get_channel(), cpus share an in-use channel somtime. So, core shouldn't clear cpumask while others are getting first cpumask. If core zero and core one share an channel, the cpumask is 0x3. Core zero clear cpumask between core one executing cpumask_empty() and cpumask_first(). The return of cpumask_first() is nr_cpu_ids. That would lead to ASSERT(cpu < nr_cpu_ids). Signed-off-by: David Wang <davidwang@xxxxxxxxxxx> --- xen/arch/x86/hpet.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/xen/arch/x86/hpet.c b/xen/arch/x86/hpet.c index bc7a851..69a7b3a 100644 --- a/xen/arch/x86/hpet.c +++ b/xen/arch/x86/hpet.c @@ -740,7 +740,9 @@ void hpet_broadcast_exit(void) if ( !reprogram_timer(deadline) ) raise_softirq(TIMER_SOFTIRQ); + spin_lock_irq(&ch->lock); cpumask_clear_cpu(cpu, ch->cpumask); + spin_unlock_irq(&ch->lock); if ( !(ch->flags & HPET_EVT_LEGACY) ) hpet_detach_channel(cpu, ch); -- 2.7.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |