|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] x86/flush: use APIC ALLBUT destination shorthand when possible
On 24.12.2019 13:44, Roger Pau Monne wrote:
> @@ -227,14 +233,47 @@ void flush_area_mask(const cpumask_t *mask, const void
> *va, unsigned int flags)
> if ( (flags & ~FLUSH_ORDER_MASK) &&
> !cpumask_subset(mask, cpumask_of(cpu)) )
> {
> + bool cpus_locked = false;
> +
> spin_lock(&flush_lock);
> cpumask_and(&flush_cpumask, mask, &cpu_online_map);
> cpumask_clear_cpu(cpu, &flush_cpumask);
> flush_va = va;
> flush_flags = flags;
> - send_IPI_mask(&flush_cpumask, INVALIDATE_TLB_VECTOR);
> +
> + /*
> + * Prevent any CPU hot{un}plug while sending the IPIs if we are to
> use
> + * a shorthand, also refuse to use a shorthand if not all CPUs are
> + * online or have been parked.
> + */
> + if ( system_state > SYS_STATE_smp_boot && !cpu_overflow &&
> + (cpus_locked = get_cpu_maps()) &&
> + (park_offline_cpus ||
Why is it relevant whether we park offline CPUs, or whether we've
even brought up all of the ones a system has? An IPI, in particular
a broadcast one, shouldn't have any issue getting delivered if some
of the nominal recipients don't listen, should it? (The use of
cpu_online_map that was already there above is a sign - but not a
proof, as it may itself be buggy - that the set of online CPUs
fluctuating behind this function's back ought to not be a problem.)
Further a question on lock nesting: Since the commit message
doesn't say anything in this regard, did you check there are no
TLB flush invocations with the get_cpu_maps() lock held? Even if
you did and even if there are none, I think the function should
then get a comment attached to the effect of this lock order
inversion risk. (For example, it isn't obvious to me that no user
of stop_machine() would ever want to do any kind of TLB flushing.)
Overall I wonder whether your goal couldn't be achieved without
the extra locking and without the special conditions.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |