[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 5/7] add qdev property type "cpu"
From: |
Blue Swirl |
Subject: |
Re: [Qemu-devel] [PATCH 5/7] add qdev property type "cpu" |
Date: |
Sun, 27 Jun 2010 18:45:47 +0000 |
On Fri, Jun 25, 2010 at 12:52 PM, Paolo Bonzini <address@hidden> wrote:
> Signed-off-by: Paolo Bonzini <address@hidden>
> ---
> cpus.c | 16 ++++++++++++++++
> cpus.h | 2 ++
> hw/qdev-properties.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
> hw/qdev.h | 5 +++++
> 4 files changed, 67 insertions(+), 0 deletions(-)
>
> diff --git a/cpus.c b/cpus.c
> index fcd0f09..da6ec44 100644
> --- a/cpus.c
> +++ b/cpus.c
> @@ -91,6 +91,22 @@ void cpu_synchronize_all_post_init(void)
> }
> }
>
> +CPUState *cpu_get_by_id(int id)
> +{
> + CPUState *cpu;
> +
> + for (cpu = first_cpu; cpu; cpu = cpu->next_cpu)
> + if (cpu->cpu_index == id)
> + return cpu;
CODING_STYLE, also below.
> +
> + return NULL;
> +}
> +
> +int cpu_get_id(CPUState *env)
> +{
> + return env->cpu_index;
> +}
> +
> int cpu_is_stopped(CPUState *env)
> {
> return !vm_running || env->stopped;
> diff --git a/cpus.h b/cpus.h
> index 774150a..df3c193 100644
> --- a/cpus.h
> +++ b/cpus.h
> @@ -6,6 +6,8 @@ int qemu_init_main_loop(void);
> void qemu_main_loop_start(void);
> void resume_all_vcpus(void);
> void pause_all_vcpus(void);
> +CPUState *cpu_get_by_id(int id);
> +int cpu_get_id(CPUState *env);
>
> /* vl.c */
> extern int smp_cores;
> diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c
> index 5a8739d..2759c83 100644
> --- a/hw/qdev-properties.c
> +++ b/hw/qdev-properties.c
> @@ -1,6 +1,7 @@
> #include "net.h"
> #include "qdev.h"
> #include "qerror.h"
> +#include "cpus.h"
>
> void *qdev_get_prop_ptr(DeviceState *dev, Property *prop)
> {
> @@ -281,6 +282,44 @@ PropertyInfo qdev_prop_string = {
> .free = free_string,
> };
>
> +/* --- cpu --- */
> +
> +static int parse_cpu(DeviceState *dev, Property *prop, const char *str)
> +{
> + CPUState **ptr = qdev_get_prop_ptr(dev, prop);
> + char *end;
> + int id;
> +
> + if (!*str)
> + return -ENOENT;
> +
> + id = strtol (str, &end, 0);
> + if (*end)
> + return -ENOENT;
> +
> + *ptr = cpu_get_by_id(id);
> + if (*ptr == NULL)
> + return -ENOENT;
> + return 0;
> +}
> +
> +static int print_cpu(DeviceState *dev, Property *prop, char *dest, size_t
> len)
> +{
> + CPUState **ptr = qdev_get_prop_ptr(dev, prop);
> + if (*ptr)
> + return snprintf(dest, len, "CPU #%d", cpu_get_id(*ptr));
> + else
> + return snprintf(dest, len, "CPU #<null>");
> +}
> +
> +PropertyInfo qdev_prop_cpu = {
> + .name = "cpu",
> + .type = PROP_TYPE_CPU,
> + .size = sizeof(DriveInfo*),
> + .parse = parse_cpu,
> + .print = print_cpu,
> +};
> +
> /* --- drive --- */
>
> static int parse_drive(DeviceState *dev, Property *prop, const char *str)
> @@ -657,6 +696,11 @@ void qdev_prop_set_ptr(DeviceState *dev, const char
> *name, void *value)
> qdev_prop_set(dev, name, &value, PROP_TYPE_PTR);
> }
>
> +void qdev_prop_set_cpu(DeviceState *dev, const char *name, CPUState *value)
> +{
> + qdev_prop_set(dev, name, &value, PROP_TYPE_CPU);
> +}
> +
> void qdev_prop_set_defaults(DeviceState *dev, Property *props)
> {
> if (!props)
> diff --git a/hw/qdev.h b/hw/qdev.h
> index be5ad67..eec2f52 100644
> --- a/hw/qdev.h
> +++ b/hw/qdev.h
> @@ -90,6 +90,7 @@ enum PropertyType {
> PROP_TYPE_VLAN,
> PROP_TYPE_PTR,
> PROP_TYPE_BIT,
> + PROP_TYPE_CPU,
> };
>
> struct PropertyInfo {
> @@ -203,6 +204,7 @@ extern PropertyInfo qdev_prop_drive;
> extern PropertyInfo qdev_prop_netdev;
> extern PropertyInfo qdev_prop_vlan;
> extern PropertyInfo qdev_prop_pci_devfn;
> +extern PropertyInfo qdev_prop_cpu;
>
> #define DEFINE_PROP(_name, _state, _field, _prop, _type) { \
> .name = (_name), \
> @@ -257,6 +259,8 @@ extern PropertyInfo qdev_prop_pci_devfn;
> DEFINE_PROP(_n, _s, _f, qdev_prop_drive, DriveInfo*)
> #define DEFINE_PROP_MACADDR(_n, _s, _f) \
> DEFINE_PROP(_n, _s, _f, qdev_prop_macaddr, MACAddr)
> +#define DEFINE_PROP_CPU(_n, _s, _f) \
> + DEFINE_PROP(_n, _s, _f, qdev_prop_cpu, CPUState*)
>
> #define DEFINE_PROP_END_OF_LIST() \
> {}
> @@ -276,6 +280,7 @@ void qdev_prop_set_chr(DeviceState *dev, const char
> *name, CharDriverState *valu
> void qdev_prop_set_netdev(DeviceState *dev, const char *name,
> VLANClientState *value);
> void qdev_prop_set_vlan(DeviceState *dev, const char *name, VLANState
> *value);
> void qdev_prop_set_drive(DeviceState *dev, const char *name, DriveInfo
> *value);
> +void qdev_prop_set_cpu(DeviceState *dev, const char *name, CPUState *value);
> void qdev_prop_set_macaddr(DeviceState *dev, const char *name, uint8_t
> *value);
> /* FIXME: Remove opaque pointer properties. */
> void qdev_prop_set_ptr(DeviceState *dev, const char *name, void *value);
> --
> 1.7.0.1
>
>
>
>
Re: [Qemu-devel] [PATCH 5/7] add qdev property type "cpu",
Blue Swirl <=
[Qemu-devel] [PATCH 2/7] include qemu-common.h when needed by the next patches, Paolo Bonzini, 2010/06/25
[Qemu-devel] [PATCH 3/7] include stdio.h freely, remove dyngen-exec.h hacks, Paolo Bonzini, 2010/06/25
[Qemu-devel] [PATCH 1/7] rtc: Remove TARGET_I386 from qemu-config.c, enables driftfix, Paolo Bonzini, 2010/06/25
Re: [Qemu-devel] [PATCH 0/7] poison TARGET_xxx for compile once object and header file cleanups, Richard Henderson, 2010/06/25
Re: [Qemu-devel] [PATCH 0/7] poison TARGET_xxx for compile once object and header file cleanups, Blue Swirl, 2010/06/27