[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 08/16] cpu: add helper cpu_exists(), to check if
From: |
Andreas Färber |
Subject: |
Re: [Qemu-devel] [PATCH 08/16] cpu: add helper cpu_exists(), to check if CPU with specified id exists |
Date: |
Mon, 22 Apr 2013 13:15:44 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 |
Am 22.04.2013 12:28, schrieb Michael S. Tsirkin:
> On Tue, Apr 16, 2013 at 12:12:48AM +0200, Igor Mammedov wrote:
>> ... it should be used only on slow path since it does recursive search
>> on /machine QOM tree for objects of TYPE_CPU
>>
>> Signed-off-by: Igor Mammedov <address@hidden>
>> Reviewed-by: Paolo Bonzini <address@hidden>
>
> I would prefer qemu_for_each_cpu, that is also useful for ACPI. And do
> we need to scan all QOM? This will take a while to repeat if there are
> many devices.
> How about the below? You can add a wrapper that sets
> a bit if CPU exists.
I really like it! Didn't get around to writing such a helper myself yet
- this will allow us to drop quite some CPUArchState usages in the tree.
If you can submit this as a proper patch (git-send-email, with a gtk-doc
comment, is the spacing intentional?) along with a trivial loop ->
helper conversion as proof of concept I'll queue it immediately.
Toda,
Andreas
> commit 4ff1332ff56069574f450bb44819156bd91bd105
> Author: Michael S. Tsirkin <address@hidden>
> Date: Sun Apr 21 15:44:47 2013 +0300
>
> exec: add qemu_for_each_cpu
>
> Will be used by ACPI table generation.
>
> Signed-off-by: Michael S. Tsirkin <address@hidden>
>
> diff --git a/exec.c b/exec.c
> index fa1e0c3..2b44cbe 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -265,6 +265,19 @@ CPUState *qemu_get_cpu(int index)
> return env ? cpu : NULL;
> }
>
> +void qemu_for_each_cpu( void (*func)( CPUState *c, void *arg), void *arg)
> +{
> + CPUArchState *env = first_cpu;
> + CPUState *cpu;
> +
> + while (env) {
> + cpu = ENV_GET_CPU(env);
> + func(cpu, arg);
> + 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 3664a1b..db857e3 100644
> --- a/include/qom/cpu.h
> +++ b/include/qom/cpu.h
> @@ -223,6 +223,8 @@ void run_on_cpu(CPUState *cpu, void (*func)(void *data),
> void *data);
> */
> CPUState *qemu_get_cpu(int index);
>
> +void qemu_for_each_cpu( void (*func)( CPUState *c, void *arg), void *arg);
> +
> #ifndef CONFIG_USER_ONLY
>
> typedef void (*CPUInterruptHandler)(CPUState *, int);
>
--
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg