On 23/03/2015 11:48, Peter Crosthwaite wrote: > following a464982499b2f637f6699e3d03e0a9d2e0b5288b, it's now possible for > there to be attempts to take the BQL before CPUs have been realized in > cases where a machine model inits peripherals before the first CPU. > > BQL lock aquisition kicks the first_cpu, leading to a segfault if this > happens pre-realize. Guard the CPU kick routine to perform no action for > a CPU that doesn't exist or doesn't have a thread yet. > > There was a fix to this with commit > 6b49809c597331803ea941eadda813e5bb4e8fe2, but the check there misses > the case where the CPU has been inited and not realized. Strengthen the > check to make sure that the first_cpu has a thread (i.e. it is > realized) before allowing the kick. > > Signed-off-by: Peter Crosthwaite <peter.crosthwa...@xilinx.com> > --- > Fixed since V1: > Change implementation to match 6b49809c597331803ea941eadda813e5bb4e8fe2 > --- > cpus.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/cpus.c b/cpus.c > index 314df16..e6dcae3 100644 > --- a/cpus.c > +++ b/cpus.c > @@ -1119,7 +1119,7 @@ bool qemu_in_vcpu_thread(void) > void qemu_mutex_lock_iothread(void) > { > atomic_inc(&iothread_requesting_mutex); > - if (!tcg_enabled() || !first_cpu) { > + if (!tcg_enabled() || !first_cpu || !first_cpu->thread) { > qemu_mutex_lock(&qemu_global_mutex); > atomic_dec(&iothread_requesting_mutex); > } else { >
Thanks, applied. Paolo