x86/HPET: fix race triggering ASSERT(cpu < nr_cpu_ids)
authorDavid Wang <davidwang@zhaoxin.com>
Fri, 18 May 2018 10:09:41 +0000 (12:09 +0200)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 22 May 2018 17:41:33 +0000 (18:41 +0100)
commit3d73ceb94ac367804b436edea429700212a5a1f0
tree30d0a23b7c334094d0ba96ca2ab8fb9ab0bc97ad
parentec29be01c382a24406172613865d645246178ee1
x86/HPET: fix race triggering ASSERT(cpu < nr_cpu_ids)

CPUs may share an in-use channel. Hence clearing of a bit from the
cpumask (in hpet_broadcast_exit()) as well as setting one (in
hpet_broadcast_enter()) must not race evaluation of that same cpumask.
Therefore avoid evaluating the cpumask twice in hpet_detach_channel().
Otherwise cpumask_empty() may e.g.return false while the subsequent
cpumask_first() could return nr_cpu_ids, which then triggers the
assertion in cpumask_of() reached through set_channel_irq_affinity().

Signed-off-by: David Wang <davidwang@zhaoxin.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
master commit: 8c02a19230502a9522b097ee15742599091064aa
master date: 2018-04-23 11:00:07 +0200

(cherry picked from commit 4cdd4cc106433921dd46a471148411cb91150a4a)

Gbp-Pq: Name x86hpet-fix-race-triggering-assertcpu--n.patch
xen/arch/x86/hpet.c