• A
    tcg: enable thread-per-vCPU · 37257942
    Alex Bennée 提交于
    There are a couple of changes that occur at the same time here:
    
      - introduce a single vCPU qemu_tcg_cpu_thread_fn
    
      One of these is spawned per vCPU with its own Thread and Condition
      variables. qemu_tcg_rr_cpu_thread_fn is the new name for the old
      single threaded function.
    
      - the TLS current_cpu variable is now live for the lifetime of MTTCG
        vCPU threads. This is for future work where async jobs need to know
        the vCPU context they are operating in.
    
    The user to switch on multi-thread behaviour and spawn a thread
    per-vCPU. For a simple test kvm-unit-test like:
    
      ./arm/run ./arm/locking-test.flat -smp 4 -accel tcg,thread=multi
    
    Will now use 4 vCPU threads and have an expected FAIL (instead of the
    unexpected PASS) as the default mode of the test has no protection when
    incrementing a shared variable.
    
    We enable the parallel_cpus flag to ensure we generate correct barrier
    and atomic code if supported by the front and backends. This doesn't
    automatically enable MTTCG until default_mttcg_enabled() is updated to
    check the configuration is supported.
    Signed-off-by: NKONRAD Frederic <fred.konrad@greensocs.com>
    Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
    [AJB: Some fixes, conditionally, commit rewording]
    Signed-off-by: NAlex Bennée <alex.bennee@linaro.org>
    Reviewed-by: NRichard Henderson <rth@twiddle.net>
    37257942
cpus.c 51.9 KB