Am 23.04.2013 10:29, schrieb Igor Mammedov: > wrapper will help to remove open-coded loops > > Signed-off-by: Michael S. Tsirkin <m...@redhat.com> > Signed-off-by: Igor Mammedov <imamm...@redhat.com> > --- > Note: > Will be used by ACPI table generation and cpu_exists() > --- > cpus.c | 13 +++++++------ > exec.c | 10 ++++++++++ > include/qom/cpu.h | 8 ++++++++ > 3 files changed, 25 insertions(+), 6 deletions(-)
Thanks, split in two and applied to qom-cpu (with changes below): https://github.com/afaerber/qemu-cpu/commits/qom-cpu > > diff --git a/cpus.c b/cpus.c > index 1d88761..5850151 100644 > --- a/cpus.c > +++ b/cpus.c > @@ -812,6 +812,12 @@ static void *qemu_dummy_cpu_thread_fn(void *arg) > > static void tcg_exec_all(void); > > +static void signal_cpu_creation(CPUState *cpu, void *data) > +{ > + cpu->thread_id = qemu_get_thread_id(); > + cpu->created = true; > +} > + > static void *qemu_tcg_cpu_thread_fn(void *arg) > { > CPUState *cpu = arg; > @@ -820,13 +826,8 @@ static void *qemu_tcg_cpu_thread_fn(void *arg) > qemu_tcg_init_cpu_signals(); > qemu_thread_get_self(cpu->thread); > > - /* signal CPU creation */ > qemu_mutex_lock(&qemu_global_mutex); > - for (env = first_cpu; env != NULL; env = env->next_cpu) { > - cpu = ENV_GET_CPU(env); > - cpu->thread_id = qemu_get_thread_id(); > - cpu->created = true; > - } > + qemu_for_each_cpu(signal_cpu_creation, NULL); > qemu_cond_signal(&qemu_cpu_cond); > > /* wait for initial kick-off after machine start */ We figured on IRC that TCG was not reflected in the function name, so I changed as follows: diff --git a/cpus.c b/cpus.c index 5850151..2e7bbad 100644 --- a/cpus.c +++ b/cpus.c @@ -812,7 +812,7 @@ static void *qemu_dummy_cpu_thread_fn(void *arg) static void tcg_exec_all(void); -static void signal_cpu_creation(CPUState *cpu, void *data) +static void signal_tcg_cpu_creation(CPUState *cpu, void *data) { cpu->thread_id = qemu_get_thread_id(); cpu->created = true; @@ -827,7 +827,7 @@ static void *qemu_tcg_cpu_thread_fn(void *arg) qemu_thread_get_self(cpu->thread); qemu_mutex_lock(&qemu_global_mutex); - qemu_for_each_cpu(signal_cpu_creation, NULL); + qemu_for_each_cpu(signal_tcg_cpu_creation, NULL); qemu_cond_signal(&qemu_cpu_cond); /* wait for initial kick-off after machine start */ > diff --git a/exec.c b/exec.c > index fa1e0c3..19725db 100644 > --- a/exec.c > +++ b/exec.c > @@ -265,6 +265,16 @@ CPUState *qemu_get_cpu(int index) > return env ? cpu : NULL; > } > > +void qemu_for_each_cpu(void (*func)(CPUState *cpu, void *data), void *data) > +{ > + CPUArchState *env = first_cpu; > + > + while (env) { > + func(ENV_GET_CPU(env), data); > + env = env->next_cpu; > + } > +} > + > void cpu_exec_init(CPUArchState *env) > { > CPUState *cpu = ENV_GET_CPU(env); > diff --git a/include/qom/cpu.h b/include/qom/cpu.h > index 639b436..d4a21f4 100644 > --- a/include/qom/cpu.h > +++ b/include/qom/cpu.h > @@ -215,6 +215,14 @@ bool cpu_is_stopped(CPUState *cpu); > */ > void run_on_cpu(CPUState *cpu, void (*func)(void *data), void *data); > > +/** qemu_for_each_cpu: Moved to next line. > + * @func: The function to be executed. > + * @data: Data to pass to the function. > + * > + * Executes @func on all CPUs Changed to "for each CPU" to distinguish from run_on_cpu(). > + */ > +void qemu_for_each_cpu(void (*func)(CPUState *cpu, void *data), void *data); > + > /** > * qemu_get_cpu: > * @index: The CPUState@cpu_index value of the CPU to obtain. Andreas -- SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg