Nikunj A Dadhania <nik...@linux.vnet.ibm.com> writes: > Alex Bennée <alex.ben...@linaro.org> writes: > >> Thomas Huth <th...@redhat.com> writes: >> >>> Since the introduction of MTTCG, using the msgsnd instruction >>> abort()s if being called without holding the BQL. So let's protect >>> that part of the code now with qemu_mutex_lock_iothread(). >>> >>> Buglink: https://bugs.launchpad.net/qemu/+bug/1694998 >>> Signed-off-by: Thomas Huth <th...@redhat.com> >> >> Reviewed-by: Alex Bennée <alex.ben...@linaro.org> >> >> p.s. I was checking the ppc code for other CPU_FOREACH patterns and I >> noticed the tlb_flush calls could probably use the tlb_flush_all_cpus >> API instead of manually looping themselves. > > Will that be synchronous call? In PPC, we do lazy tlb flush, the tlb > flushes are batched until a synchronization point (for optimization).
No by default the non-synced flushes will occur at the end of the current executing block (cpu->exit_request is set and the work is done when we exit the run-loop). > The batching is achieved using a tlb_need_flush (global/local) and when > there is isync/ptesync or an exception, the actual flush is done. At > this point we need to make sure that the flush is synchronous. If you want to ensure the flush is synchronous you need to call the _all_cpus_synced variants and do a cpu_loop_exit in your helper. This ensures that all the flushes queued up will be executed before execution starts at the next PC of the calling thread. > >> You should also double check the semantics to make sure none of them >> need to use the _synced variant and a cpu_exit if the flush needs to >> complete w.r.t the originating CPU. > > Regards, > Nikunj -- Alex Bennée