[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC 19/25] accel: Use target-specific accel class if avail
From: |
Eduardo Habkost |
Subject: |
[Qemu-devel] [RFC 19/25] accel: Use target-specific accel class if available |
Date: |
Wed, 9 Jul 2014 19:04:16 -0300 |
Target-specific accelerator subclasses are optional. If a given
accelerator type needs to make it mandatory, the base class can be made
abstract.
Signed-off-by: Eduardo Habkost <address@hidden>
---
hw/core/accel.c | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/hw/core/accel.c b/hw/core/accel.c
index 78e7dfc..6efe36c 100644
--- a/hw/core/accel.c
+++ b/hw/core/accel.c
@@ -51,11 +51,25 @@ static const TypeInfo accel_type = {
};
/* Lookup AccelClass from opt_name. Returns NULL if not found */
-static AccelClass *accel_find(const char *opt_name)
+static AccelClass *accel_find(const char *opt_name, const char *target_name)
{
char *class_name = g_strdup_printf("%s-accel", opt_name);
- AccelClass *ac = ACCEL_CLASS(object_class_by_name(class_name));
+ char *target_class_name = g_strdup_printf("%s-%s-accel",
+ target_name, opt_name);
+ ObjectClass *oc;
+ AccelClass *ac;
+ oc = object_class_by_name(target_class_name);
+ if (!oc) {
+ oc = object_class_by_name(class_name);
+ }
+ /* Must be a TYPE_ACCEL subclass, and not abstract */
+ oc = object_class_dynamic_cast(oc, TYPE_ACCEL);
+ if (oc && object_class_is_abstract(oc)) {
+ oc = NULL;
+ }
+ ac = ACCEL_CLASS(oc);
g_free(class_name);
+ g_free(target_class_name);
return ac;
}
@@ -96,7 +110,7 @@ int init_accelerator(MachineState *ms, const char
*target_name)
p++;
}
p = get_opt_name(buf, sizeof(buf), p, ':');
- acc = accel_find(buf);
+ acc = accel_find(buf, target_name);
if (!acc) {
fprintf(stderr, "\"%s\" accelerator does not exist.\n", buf);
continue;
--
1.9.3
- [Qemu-devel] [RFC 12/25] accel: Move accel init/allowed code to separate function, (continued)
- [Qemu-devel] [RFC 12/25] accel: Move accel init/allowed code to separate function, Eduardo Habkost, 2014/07/09
- [Qemu-devel] [RFC 16/25] accel: Save AccelState on MachineState when initializing, Eduardo Habkost, 2014/07/09
- [Qemu-devel] [RFC 15/25] accel: Create accel object when initializing machine, Eduardo Habkost, 2014/07/09
- [Qemu-devel] [RFC 17/25] kvm: Make KVMState be the TYPE_KVM_ACCEL instance struct, Eduardo Habkost, 2014/07/09
- [Qemu-devel] [RFC 20/25] accel: TYPE_X86_ACCEL interface, Eduardo Habkost, 2014/07/09
- [Qemu-devel] [RFC 24/25] target-i386: Accept "host" as value for CPU vendor, Eduardo Habkost, 2014/07/09
- [Qemu-devel] [RFC 23/25] target-i386: Move accelerator-specific code outside X86CPU.instance_init, Eduardo Habkost, 2014/07/09
- [Qemu-devel] [RFC 18/25] accel: Get target name as argument when initializing accelerator, Eduardo Habkost, 2014/07/09
- [Qemu-devel] [RFC 25/25] target-i386: Move KVM CPUID hacking to accelerator cpu_post_init hook, Eduardo Habkost, 2014/07/10
- [Qemu-devel] [RFC 21/25] kvm: x86 KVM accelerator subclass, Eduardo Habkost, 2014/07/10
- [Qemu-devel] [RFC 19/25] accel: Use target-specific accel class if available,
Eduardo Habkost <=
- [Qemu-devel] [RFC 22/25] target-i386: Add AccelState parameter to cpu_x86_create(), Eduardo Habkost, 2014/07/10