s390x: fix error propagation in kvm-flic's realize
From the moment it was introduced by commit a2875e6f98 ("s390x/kvm: implement floating-interrupt controller device", 2013-07-16) the kvm-flic is not making realize fail properly in case it's impossible to create the KVM device which basically serves as a backend and is absolutely essential for having an operational kvm-flic. Let's fix this by making sure we do proper error propagation in realize. Signed-off-by: Halil Pasic <pasic@linux.vnet.ibm.com> Fixes: a2875e6f98 "s390x/kvm: implement floating-interrupt controller device" Reviewed-by: Dong Jia Shi <bjsdjshi@linux.vnet.ibm.com> Reviewed-by: Yi Min Zhao <zyimin@linux.vnet.ibm.com> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
This commit is contained in:
parent
1728cff2ab
commit
f62f210943
@ -15,6 +15,7 @@
|
||||
#include "cpu.h"
|
||||
#include <sys/ioctl.h>
|
||||
#include "qemu/error-report.h"
|
||||
#include "qapi/error.h"
|
||||
#include "hw/sysbus.h"
|
||||
#include "sysemu/kvm.h"
|
||||
#include "hw/s390x/s390_flic.h"
|
||||
@ -397,18 +398,22 @@ static void kvm_s390_flic_realize(DeviceState *dev, Error **errp)
|
||||
struct kvm_create_device cd = {0};
|
||||
struct kvm_device_attr test_attr = {0};
|
||||
int ret;
|
||||
Error *errp_local = NULL;
|
||||
|
||||
flic_state->fd = -1;
|
||||
if (!kvm_check_extension(kvm_state, KVM_CAP_DEVICE_CTRL)) {
|
||||
error_setg_errno(&errp_local, errno, "KVM is missing capability"
|
||||
" KVM_CAP_DEVICE_CTRL");
|
||||
trace_flic_no_device_api(errno);
|
||||
return;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
cd.type = KVM_DEV_TYPE_FLIC;
|
||||
ret = kvm_vm_ioctl(kvm_state, KVM_CREATE_DEVICE, &cd);
|
||||
if (ret < 0) {
|
||||
error_setg_errno(&errp_local, errno, "Creating the KVM device failed");
|
||||
trace_flic_create_device(errno);
|
||||
return;
|
||||
goto fail;
|
||||
}
|
||||
flic_state->fd = cd.fd;
|
||||
|
||||
@ -417,6 +422,9 @@ static void kvm_s390_flic_realize(DeviceState *dev, Error **errp)
|
||||
flic_state->clear_io_supported = !ioctl(flic_state->fd,
|
||||
KVM_HAS_DEVICE_ATTR, test_attr);
|
||||
|
||||
return;
|
||||
fail:
|
||||
error_propagate(errp, errp_local);
|
||||
}
|
||||
|
||||
static void kvm_s390_flic_reset(DeviceState *dev)
|
||||
|
Loading…
x
Reference in New Issue
Block a user