Message ID | 20190130004811.27372-72-cota@braap.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | per-CPU locks | expand |
Emilio G. Cota <cota@braap.org> writes: > After completing the conversion to per-CPU locks, there is no need > to release the BQL after having called cpu_kick. > > Reviewed-by: Richard Henderson <richard.henderson@linaro.org> > Signed-off-by: Emilio G. Cota <cota@braap.org> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> > --- > cpus-common.c | 20 +++++--------------- > 1 file changed, 5 insertions(+), 15 deletions(-) > > diff --git a/cpus-common.c b/cpus-common.c > index 62e282bff1..1241024b2c 100644 > --- a/cpus-common.c > +++ b/cpus-common.c > @@ -145,6 +145,11 @@ void run_on_cpu(CPUState *cpu, run_on_cpu_func func, run_on_cpu_data data) > return; > } > > + /* We are going to sleep on the CPU lock, so release the BQL */ > + if (has_bql) { > + qemu_mutex_unlock_iothread(); > + } > + > wi.func = func; > wi.data = data; > wi.done = false; > @@ -153,21 +158,6 @@ void run_on_cpu(CPUState *cpu, run_on_cpu_func func, run_on_cpu_data data) > > cpu_mutex_lock(cpu); > queue_work_on_cpu_locked(cpu, &wi); > - > - /* > - * We are going to sleep on the CPU lock, so release the BQL. > - * > - * During the transition to per-CPU locks, we release the BQL _after_ > - * having kicked the destination CPU (from queue_work_on_cpu_locked above). > - * This makes sure that the enqueued work will be seen by the CPU > - * after being woken up from the kick, since the CPU sleeps on the BQL. > - * Once we complete the transition to per-CPU locks, we will release > - * the BQL earlier in this function. > - */ > - if (has_bql) { > - qemu_mutex_unlock_iothread(); > - } > - > while (!atomic_mb_read(&wi.done)) { > CPUState *self_cpu = current_cpu; -- Alex Bennée
diff --git a/cpus-common.c b/cpus-common.c index 62e282bff1..1241024b2c 100644 --- a/cpus-common.c +++ b/cpus-common.c @@ -145,6 +145,11 @@ void run_on_cpu(CPUState *cpu, run_on_cpu_func func, run_on_cpu_data data) return; } + /* We are going to sleep on the CPU lock, so release the BQL */ + if (has_bql) { + qemu_mutex_unlock_iothread(); + } + wi.func = func; wi.data = data; wi.done = false; @@ -153,21 +158,6 @@ void run_on_cpu(CPUState *cpu, run_on_cpu_func func, run_on_cpu_data data) cpu_mutex_lock(cpu); queue_work_on_cpu_locked(cpu, &wi); - - /* - * We are going to sleep on the CPU lock, so release the BQL. - * - * During the transition to per-CPU locks, we release the BQL _after_ - * having kicked the destination CPU (from queue_work_on_cpu_locked above). - * This makes sure that the enqueued work will be seen by the CPU - * after being woken up from the kick, since the CPU sleeps on the BQL. - * Once we complete the transition to per-CPU locks, we will release - * the BQL earlier in this function. - */ - if (has_bql) { - qemu_mutex_unlock_iothread(); - } - while (!atomic_mb_read(&wi.done)) { CPUState *self_cpu = current_cpu;