aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kvm/i8259.c
diff options
context:
space:
mode:
authorGregory Haskins <ghaskins@novell.com>2009-07-07 17:08:44 -0400
committerAvi Kivity <avi@redhat.com>2009-09-10 01:33:12 -0400
commit090b7aff27120cdae76a346a70db394844fea598 (patch)
tree4676410f57a44d7c0fba9d791fc77d7850ad1d51 /arch/x86/kvm/i8259.c
parentfef07aae9cd9ed82f94228c311b35360f1f38902 (diff)
KVM: make io_bus interface more robust
Today kvm_io_bus_regsiter_dev() returns void and will internally BUG_ON if it fails. We want to create dynamic MMIO/PIO entries driven from userspace later in the series, so we need to enhance the code to be more robust with the following changes: 1) Add a return value to the registration function 2) Fix up all the callsites to check the return code, handle any failures, and percolate the error up to the caller. 3) Add an unregister function that collapses holes in the array Signed-off-by: Gregory Haskins <ghaskins@novell.com> Acked-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'arch/x86/kvm/i8259.c')
-rw-r--r--arch/x86/kvm/i8259.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/arch/x86/kvm/i8259.c b/arch/x86/kvm/i8259.c
index e4bcbddecb36..daf4606b0293 100644
--- a/arch/x86/kvm/i8259.c
+++ b/arch/x86/kvm/i8259.c
@@ -539,6 +539,8 @@ static const struct kvm_io_device_ops picdev_ops = {
539struct kvm_pic *kvm_create_pic(struct kvm *kvm) 539struct kvm_pic *kvm_create_pic(struct kvm *kvm)
540{ 540{
541 struct kvm_pic *s; 541 struct kvm_pic *s;
542 int ret;
543
542 s = kzalloc(sizeof(struct kvm_pic), GFP_KERNEL); 544 s = kzalloc(sizeof(struct kvm_pic), GFP_KERNEL);
543 if (!s) 545 if (!s)
544 return NULL; 546 return NULL;
@@ -555,6 +557,11 @@ struct kvm_pic *kvm_create_pic(struct kvm *kvm)
555 * Initialize PIO device 557 * Initialize PIO device
556 */ 558 */
557 kvm_iodevice_init(&s->dev, &picdev_ops); 559 kvm_iodevice_init(&s->dev, &picdev_ops);
558 kvm_io_bus_register_dev(kvm, &kvm->pio_bus, &s->dev); 560 ret = kvm_io_bus_register_dev(kvm, &kvm->pio_bus, &s->dev);
561 if (ret < 0) {
562 kfree(s);
563 return NULL;
564 }
565
559 return s; 566 return s;
560} 567}