x86/smp: use a dedicated CPU mask in send_IPI_mask
Some callers of send_IPI_mask pass the scratch cpumask as the mask
parameter of send_IPI_mask, so the scratch cpumask cannot be used by
the function. The following trace has been obtained with a debug patch
and shows one of those callers:
(XEN) scratch CPU mask already in use by arch/x86/mm.c#_get_page_type+0x1f9/0x1abf
(XEN) Xen BUG at smp.c:45
[...]
(XEN) Xen call trace:
(XEN) [<
ffff82d0802abb53>] R scratch_cpumask+0xd3/0xf9
(XEN) [<
ffff82d0802abc21>] F send_IPI_mask+0x72/0x1ca
(XEN) [<
ffff82d0802ac13e>] F flush_area_mask+0x10c/0x16c
(XEN) [<
ffff82d080296c56>] F arch/x86/mm.c#_get_page_type+0x3ff/0x1abf
(XEN) [<
ffff82d080298324>] F get_page_type+0xe/0x2c
(XEN) [<
ffff82d08038624f>] F pv_set_gdt+0xa1/0x2aa
(XEN) [<
ffff82d08027dfd6>] F arch_set_info_guest+0x1196/0x16ba
(XEN) [<
ffff82d080207a55>] F default_initialise_vcpu+0xc7/0xd4
(XEN) [<
ffff82d08027e55b>] F arch_initialise_vcpu+0x61/0xcd
(XEN) [<
ffff82d080207e78>] F do_vcpu_op+0x219/0x690
(XEN) [<
ffff82d08038be16>] F pv_hypercall+0x2f6/0x593
(XEN) [<
ffff82d080396432>] F lstar_enter+0x112/0x120
_get_page_type will use the scratch cpumask to call flush_tlb_mask,
which in turn calls send_IPI_mask.
Fix this by using a dedicated per CPU cpumask in send_IPI_mask.
Fixes: 5500d265a2a8 ('x86/smp: use APIC ALLBUT destination shorthand when possible')
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>