qdev: Fix qdev_try_create() semantics

Since QOM'ification, qdev_try_create() uses object_new() internally,
which asserts "type != NULL" when the type is not registered.
This was revealed by the combination of kvmclock's kvm_enabled() check
and early QOM type registration.

Check whether the class exists before calling object_new(), so that
the caller (e.g., qdev_create) can fail gracefully, telling us which
device could not be created.

Signed-off-by: Andreas Färber <afaerber@suse.de>
Cc: Anthony Liguori <aliguori@codemonkey.ws>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
Andreas Färber 2012-02-17 02:47:44 +01:00 committed by Anthony Liguori
parent 438e1c79f1
commit 4ed658ca92
1 changed files with 3 additions and 0 deletions

View File

@ -117,6 +117,9 @@ DeviceState *qdev_try_create(BusState *bus, const char *name)
{
DeviceState *dev;
if (object_class_by_name(name) == NULL) {
return NULL;
}
dev = DEVICE(object_new(name));
if (!dev) {
return NULL;