[lkml]   [2011]   [Jun]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Subject[patch v4 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 one of the deadlocks mentioned in the

    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
    * Make __stop_cpus static
    * Conslidate wait_for_completion/polling code into
    cpu_stop_wait_for_completion() based on Tejun's review.

    Changes from v3:
    * Make only __stop_machine() to be called from the cpu that is not yet online
    * No changes to stop_cpus() API, that can be called only from an online cpu
    * Take the stop_cpus_mutex using mutex_trylock when called from the not yet
    online cpu.
    * Go back to cpu_online() checks using raw_smp_processor_id() instead
    of stop_cpu thread status to determine whether calling cpu is online/offline.
    This is safe and easier to understand.


     \ /
      Last update: 2011-06-13 20:03    [W:0.024 / U:9.276 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site