|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 1/7] x86/smp: do not use shorthand IPI destinations in CPU hot{,un}plug contexts
On Tue, Jun 11, 2024 at 09:42:39AM +0200, Jan Beulich wrote:
> On 10.06.2024 16:20, Roger Pau Monne wrote:
> > Due to the current rwlock logic, if the CPU calling get_cpu_maps() does so
> > from
> > a cpu_hotplug_{begin,done}() region the function will still return success,
> > because a CPU taking the rwlock in read mode after having taken it in write
> > mode is allowed. Such behavior however defeats the purpose of
> > get_cpu_maps(),
>
> I'm not happy to see you still have this claim here. The behavior may (appear
> to) defeat the purpose here, but as expressed previously I don't view that as
> being a general pattern.
Right. What about replacing the paragraph with:
"Due to the current rwlock logic, if the CPU calling get_cpu_maps() does so from
a cpu_hotplug_{begin,done}() region the function will still return success,
because a CPU taking the rwlock in read mode after having taken it in write
mode is allowed. Such corner case makes using get_cpu_maps() alone
not enough to prevent using the shorthand in CPU hotplug regions."
I think the rest is of the commit message is not controversial.
> > as it should always return false when called with a CPU hot{,un}plug
> > operation
> > is in progress. Otherwise the logic in send_IPI_mask() is wrong, as it
> > could
> > decide to use the shorthand even when a CPU operation is in progress.
> >
> > Introduce a new helper to detect whether the current caller is between a
> > cpu_hotplug_{begin,done}() region and use it in send_IPI_mask() to restrict
> > shorthand usage.
> >
> > Fixes: 5500d265a2a8 ('x86/smp: use APIC ALLBUT destination shorthand when
> > possible')
> > Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
> > ---
> > Changes since v1:
> > - Modify send_IPI_mask() to detect CPU hotplug context.
> > ---
> > xen/arch/x86/smp.c | 2 +-
> > xen/common/cpu.c | 5 +++++
> > xen/include/xen/cpu.h | 10 ++++++++++
> > xen/include/xen/rwlock.h | 2 ++
> > 4 files changed, 18 insertions(+), 1 deletion(-)
> >
> > diff --git a/xen/arch/x86/smp.c b/xen/arch/x86/smp.c
> > index 7443ad20335e..04c6a0572319 100644
> > --- a/xen/arch/x86/smp.c
> > +++ b/xen/arch/x86/smp.c
> > @@ -88,7 +88,7 @@ void send_IPI_mask(const cpumask_t *mask, int vector)
> > * the system have been accounted for.
> > */
> > if ( system_state > SYS_STATE_smp_boot &&
> > - !unaccounted_cpus && !disabled_cpus &&
> > + !unaccounted_cpus && !disabled_cpus && !cpu_in_hotplug_context()
> > &&
> > /* NB: get_cpu_maps lock requires enabled interrupts. */
> > local_irq_is_enabled() && (cpus_locked = get_cpu_maps()) &&
> > (park_offline_cpus ||
>
> Along with changing the condition you also want to update the comment to
> reflect the code adjustment.
I've assumed the wording in the commet that says: "no CPU hotplug or
unplug operations are taking place" would already cover the addition
of the !cpu_in_hotplug_context() check.
Thanks, Roger.
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |