qemu-ppc
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-ppc] [for-2.7 PATCH v3 06/15] cpu: Abstract CPU core type


From: Igor Mammedov
Subject: Re: [Qemu-ppc] [for-2.7 PATCH v3 06/15] cpu: Abstract CPU core type
Date: Thu, 2 Jun 2016 11:35:35 +0200

On Thu, 2 Jun 2016 13:38:58 +1000
David Gibson <address@hidden> wrote:

> On Thu, May 12, 2016 at 09:18:16AM +0530, Bharata B Rao wrote:
> > Add an abstract CPU core type that could be used by machines that
> > want to define and hotplug CPUs in core granularity.
> > 
> > Signed-off-by: Bharata B Rao <address@hidden>
> > Signed-off-by: Igor Mammedov <address@hidden>
> >                [Integer core property]
> > Reviewed-by: David Gibson <address@hidden>
> 
> Igor, Eduardo,
> 
> Do you think we're comfortable enough with this abstract core concept
> to merge it now?  If so which tree should it go through?
spapr is the only user of it, and it makes sense for patch
to be merged as part of series that actually uses it.

Reviewed-by: Igor Mammedov <address@hidden>
> 
> > ---
> >  hw/cpu/Makefile.objs  |  1 +
> >  hw/cpu/core.c         | 88
> > +++++++++++++++++++++++++++++++++++++++++++++++++++
> > include/hw/cpu/core.h | 31 ++++++++++++++++++ 3 files changed, 120
> > insertions(+) create mode 100644 hw/cpu/core.c
> >  create mode 100644 include/hw/cpu/core.h
> > 
> > diff --git a/hw/cpu/Makefile.objs b/hw/cpu/Makefile.objs
> > index 0954a18..942a4bb 100644
> > --- a/hw/cpu/Makefile.objs
> > +++ b/hw/cpu/Makefile.objs
> > @@ -2,4 +2,5 @@ obj-$(CONFIG_ARM11MPCORE) += arm11mpcore.o
> >  obj-$(CONFIG_REALVIEW) += realview_mpcore.o
> >  obj-$(CONFIG_A9MPCORE) += a9mpcore.o
> >  obj-$(CONFIG_A15MPCORE) += a15mpcore.o
> > +obj-y += core.o
> >  
> > diff --git a/hw/cpu/core.c b/hw/cpu/core.c
> > new file mode 100644
> > index 0000000..fa5bc82
> > --- /dev/null
> > +++ b/hw/cpu/core.c
> > @@ -0,0 +1,88 @@
> > +/*
> > + * CPU core abstract device
> > + *
> > + * Copyright (C) 2016 Bharata B Rao <address@hidden>
> > + *
> > + * This work is licensed under the terms of the GNU GPL, version 2
> > or later.
> > + * See the COPYING file in the top-level directory.
> > + */
> > +#include "hw/cpu/core.h"
> > +#include "qapi/visitor.h"
> > +#include "qapi/error.h"
> > +#include "sysemu/cpus.h"
> > +
> > +static void core_prop_get_core(Object *obj, Visitor *v, const char
> > *name,
> > +                               void *opaque, Error **errp)
> > +{
> > +    CPUCore *core = CPU_CORE(obj);
> > +    int64_t value = core->core;
> > +
> > +    visit_type_int(v, name, &value, errp);
> > +}
> > +
> > +static void core_prop_set_core(Object *obj, Visitor *v, const char
> > *name,
> > +                               void *opaque, Error **errp)
> > +{
> > +    CPUCore *core = CPU_CORE(obj);
> > +    Error *local_err = NULL;
> > +    int64_t value;
> > +
> > +    visit_type_int(v, name, &value, &local_err);
> > +    if (local_err) {
> > +        error_propagate(errp, local_err);
> > +        return;
> > +    }
> > +
> > +    core->core = value;
> > +}
> > +
> > +static void core_prop_get_threads(Object *obj, Visitor *v, const
> > char *name,
> > +                                  void *opaque, Error **errp)
> > +{
> > +    CPUCore *core = CPU_CORE(obj);
> > +    int64_t value = core->threads;
> > +
> > +    visit_type_int(v, name, &value, errp);
> > +}
> > +
> > +static void core_prop_set_threads(Object *obj, Visitor *v, const
> > char *name,
> > +                                  void *opaque, Error **errp)
> > +{
> > +    CPUCore *core = CPU_CORE(obj);
> > +    Error *local_err = NULL;
> > +    int64_t value;
> > +
> > +    visit_type_int(v, name, &value, &local_err);
> > +    if (local_err) {
> > +        error_propagate(errp, local_err);
> > +        return;
> > +    }
> > +
> > +    core->threads = value;
> > +}
> > +
> > +static void cpu_core_instance_init(Object *obj)
> > +{
> > +    CPUCore *core = CPU_CORE(obj);
> > +
> > +    object_property_add(obj, "core", "int", core_prop_get_core,
> > +                        core_prop_set_core, NULL, NULL, NULL);
> > +    object_property_add(obj, "threads", "int",
> > core_prop_get_threads,
> > +                        core_prop_set_threads, NULL, NULL, NULL);
> > +    core->threads = smp_threads;
> > +}
> > +
> > +static const TypeInfo cpu_core_type_info = {
> > +    .name = TYPE_CPU_CORE,
> > +    .parent = TYPE_DEVICE,
> > +    .abstract = true,
> > +    .instance_size = sizeof(CPUCore),
> > +    .instance_init = cpu_core_instance_init,
> > +};
> > +
> > +static void cpu_core_register_types(void)
> > +{
> > +    type_register_static(&cpu_core_type_info);
> > +}
> > +
> > +type_init(cpu_core_register_types)
> > diff --git a/include/hw/cpu/core.h b/include/hw/cpu/core.h
> > new file mode 100644
> > index 0000000..a2a5a04
> > --- /dev/null
> > +++ b/include/hw/cpu/core.h
> > @@ -0,0 +1,31 @@
> > +/*
> > + * CPU core abstract device
> > + *
> > + * Copyright (C) 2016 Bharata B Rao <address@hidden>
> > + *
> > + * This work is licensed under the terms of the GNU GPL, version 2
> > or later.
> > + * See the COPYING file in the top-level directory.
> > + */
> > +#ifndef HW_CPU_CORE_H
> > +#define HW_CPU_CORE_H
> > +
> > +#include "qemu/osdep.h"
> > +#include "hw/qdev.h"
> > +
> > +#define TYPE_CPU_CORE "cpu-core"
> > +
> > +#define CPU_CORE(obj) \
> > +    OBJECT_CHECK(CPUCore, (obj), TYPE_CPU_CORE)
> > +
> > +typedef struct CPUCore {
> > +    /*< private >*/
> > +    DeviceState parent_obj;
> > +
> > +    /*< public >*/
> > +    int core;
> > +    int threads;
> > +} CPUCore;
> > +
> > +#define CPU_CORE_PROP_CORE "core"
> > +
> > +#endif
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]