diff options
| author | Radim Krčmář <rkrcmar@redhat.com> | 2016-12-16 16:10:03 +0100 | 
|---|---|---|
| committer | Radim Krčmář <rkrcmar@redhat.com> | 2017-01-09 14:45:28 +0100 | 
| commit | 099413664c71fcf9d0099eba4f8a4dd59653d5a3 (patch) | |
| tree | 77985de2e54850a188fa11936a6f5fa8145d0628 /arch/x86/kvm/i8259.c | |
| parent | 49776faf93f8074bb4990beac04781a9507d3650 (diff) | |
| download | linux-099413664c71fcf9d0099eba4f8a4dd59653d5a3.tar.bz2 | |
KVM: x86: make pic setup code look like ioapic setup
We don't treat kvm->arch.vpic specially anymore, so the setup can look
like ioapic.  This gets a bit more information out of return values.
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'arch/x86/kvm/i8259.c')
| -rw-r--r-- | arch/x86/kvm/i8259.c | 16 | 
1 files changed, 11 insertions, 5 deletions
| diff --git a/arch/x86/kvm/i8259.c b/arch/x86/kvm/i8259.c index 7cc2360f1848..73ea24d4f119 100644 --- a/arch/x86/kvm/i8259.c +++ b/arch/x86/kvm/i8259.c @@ -598,14 +598,14 @@ static const struct kvm_io_device_ops picdev_eclr_ops = {  	.write    = picdev_eclr_write,  }; -struct kvm_pic *kvm_create_pic(struct kvm *kvm) +int kvm_pic_init(struct kvm *kvm)  {  	struct kvm_pic *s;  	int ret;  	s = kzalloc(sizeof(struct kvm_pic), GFP_KERNEL);  	if (!s) -		return NULL; +		return -ENOMEM;  	spin_lock_init(&s->lock);  	s->kvm = kvm;  	s->pics[0].elcr_mask = 0xf8; @@ -635,7 +635,9 @@ struct kvm_pic *kvm_create_pic(struct kvm *kvm)  	mutex_unlock(&kvm->slots_lock); -	return s; +	kvm->arch.vpic = s; + +	return 0;  fail_unreg_1:  	kvm_io_bus_unregister_dev(kvm, KVM_PIO_BUS, &s->dev_slave); @@ -648,13 +650,17 @@ fail_unlock:  	kfree(s); -	return NULL; +	return ret;  } -void kvm_destroy_pic(struct kvm_pic *vpic) +void kvm_pic_destroy(struct kvm *kvm)  { +	struct kvm_pic *vpic = kvm->arch.vpic; +  	kvm_io_bus_unregister_dev(vpic->kvm, KVM_PIO_BUS, &vpic->dev_master);  	kvm_io_bus_unregister_dev(vpic->kvm, KVM_PIO_BUS, &vpic->dev_slave);  	kvm_io_bus_unregister_dev(vpic->kvm, KVM_PIO_BUS, &vpic->dev_eclr); + +	kvm->arch.vpic = NULL;  	kfree(vpic);  } |