cpu: Abstract CPU core type
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 <bharata@linux.vnet.ibm.com> Signed-off-by: Igor Mammedov <imammedo@redhat.com> [Integer core property] Reviewed-by: David Gibson <david@gibson.dropbear.id.au> Reviewed-by: Igor Mammedov <imammedo@redhat.com> [dwg: changed property names to 'core-id' and 'nr-threads'] Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
41346263c4
commit
f1020c2c26
@ -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
|
||||
|
||||
|
88
hw/cpu/core.c
Normal file
88
hw/cpu/core.c
Normal file
@ -0,0 +1,88 @@
|
||||
/*
|
||||
* CPU core abstract device
|
||||
*
|
||||
* Copyright (C) 2016 Bharata B Rao <bharata@linux.vnet.ibm.com>
|
||||
*
|
||||
* 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_id(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
CPUCore *core = CPU_CORE(obj);
|
||||
int64_t value = core->core_id;
|
||||
|
||||
visit_type_int(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void core_prop_set_core_id(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_id = value;
|
||||
}
|
||||
|
||||
static void core_prop_get_nr_threads(Object *obj, Visitor *v, const char *name,
|
||||
void *opaque, Error **errp)
|
||||
{
|
||||
CPUCore *core = CPU_CORE(obj);
|
||||
int64_t value = core->nr_threads;
|
||||
|
||||
visit_type_int(v, name, &value, errp);
|
||||
}
|
||||
|
||||
static void core_prop_set_nr_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->nr_threads = value;
|
||||
}
|
||||
|
||||
static void cpu_core_instance_init(Object *obj)
|
||||
{
|
||||
CPUCore *core = CPU_CORE(obj);
|
||||
|
||||
object_property_add(obj, "core-id", "int", core_prop_get_core_id,
|
||||
core_prop_set_core_id, NULL, NULL, NULL);
|
||||
object_property_add(obj, "nr-threads", "int", core_prop_get_nr_threads,
|
||||
core_prop_set_nr_threads, NULL, NULL, NULL);
|
||||
core->nr_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)
|
31
include/hw/cpu/core.h
Normal file
31
include/hw/cpu/core.h
Normal file
@ -0,0 +1,31 @@
|
||||
/*
|
||||
* CPU core abstract device
|
||||
*
|
||||
* Copyright (C) 2016 Bharata B Rao <bharata@linux.vnet.ibm.com>
|
||||
*
|
||||
* 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_id;
|
||||
int nr_threads;
|
||||
} CPUCore;
|
||||
|
||||
#define CPU_CORE_PROP_CORE_ID "core-id"
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user