2011-06-09 22:38:41

by Suresh Siddha

[permalink] [raw]
Subject: [patch v3 0/2] enhance stop machine infrastructure for MTRR rendezvous sequence

First patch enhance the stop machine infrastructure so that we
can call __stop_machine() from the cpu hotplug path, where the calling
cpu is not yet online. We do allow this for already for !CONFIG_SMP. So this
patch brings the CONFIG_SMP behavior inline with !CONFIG_SMP

Second patch uses the enhanced __stop_machine() to implement the x86 MTRR
init rendezvous sequence and thus remove the duplicate implementation
of stop machine using stop_one_cpu_nowait(). This duplicate implementation
of stop machine can potentially lead to deadlock if there is a parallel
system wide rendezvous using __stop_machine().

Both these address the deadlock mentioned in the
https://bugzilla.novell.com/show_bug.cgi?id=672008

Changes from v1:
* Use stop_cpu thread enabled status to find out if the cpu is online/offline,
instead of using cpu_online(smp_processor_id()). This avoids a false
positive of using smp_processor_id() from preemptible section.

Changes from v2:
* Use cpu_all_mask, instead of NULL mask to include the calling cpu that is
offline.
* Make __stop_cpus static
* Conslidate wait_for_completion/polling code into
cpu_stop_wait_for_completion() based on Tejun's review.

thanks,
suresh