diff options
author | Marcelo Tosatti <mtosatti@redhat.com> | 2009-12-23 11:35:24 -0500 |
---|---|---|
committer | Marcelo Tosatti <mtosatti@redhat.com> | 2010-03-01 10:35:45 -0500 |
commit | e93f8a0f821e290ac5149830110a5f704db7a1fc (patch) | |
tree | f88a5e97286031a8105d63a069a4131b74dab113 /arch/x86/kvm | |
parent | a983fb238728e1123177e8058d4f644b949a7d05 (diff) |
KVM: convert io_bus to SRCU
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Diffstat (limited to 'arch/x86/kvm')
-rw-r--r-- | arch/x86/kvm/i8254.c | 6 | ||||
-rw-r--r-- | arch/x86/kvm/i8259.c | 4 | ||||
-rw-r--r-- | arch/x86/kvm/x86.c | 13 |
3 files changed, 13 insertions, 10 deletions
diff --git a/arch/x86/kvm/i8254.c b/arch/x86/kvm/i8254.c index 15578f180e59..4b433de02e5b 100644 --- a/arch/x86/kvm/i8254.c +++ b/arch/x86/kvm/i8254.c | |||
@@ -645,13 +645,13 @@ struct kvm_pit *kvm_create_pit(struct kvm *kvm, u32 flags) | |||
645 | kvm_register_irq_mask_notifier(kvm, 0, &pit->mask_notifier); | 645 | kvm_register_irq_mask_notifier(kvm, 0, &pit->mask_notifier); |
646 | 646 | ||
647 | kvm_iodevice_init(&pit->dev, &pit_dev_ops); | 647 | kvm_iodevice_init(&pit->dev, &pit_dev_ops); |
648 | ret = __kvm_io_bus_register_dev(&kvm->pio_bus, &pit->dev); | 648 | ret = kvm_io_bus_register_dev(kvm, KVM_PIO_BUS, &pit->dev); |
649 | if (ret < 0) | 649 | if (ret < 0) |
650 | goto fail; | 650 | goto fail; |
651 | 651 | ||
652 | if (flags & KVM_PIT_SPEAKER_DUMMY) { | 652 | if (flags & KVM_PIT_SPEAKER_DUMMY) { |
653 | kvm_iodevice_init(&pit->speaker_dev, &speaker_dev_ops); | 653 | kvm_iodevice_init(&pit->speaker_dev, &speaker_dev_ops); |
654 | ret = __kvm_io_bus_register_dev(&kvm->pio_bus, | 654 | ret = kvm_io_bus_register_dev(kvm, KVM_PIO_BUS, |
655 | &pit->speaker_dev); | 655 | &pit->speaker_dev); |
656 | if (ret < 0) | 656 | if (ret < 0) |
657 | goto fail_unregister; | 657 | goto fail_unregister; |
@@ -660,7 +660,7 @@ struct kvm_pit *kvm_create_pit(struct kvm *kvm, u32 flags) | |||
660 | return pit; | 660 | return pit; |
661 | 661 | ||
662 | fail_unregister: | 662 | fail_unregister: |
663 | __kvm_io_bus_unregister_dev(&kvm->pio_bus, &pit->dev); | 663 | kvm_io_bus_unregister_dev(kvm, KVM_PIO_BUS, &pit->dev); |
664 | 664 | ||
665 | fail: | 665 | fail: |
666 | if (pit->irq_source_id >= 0) | 666 | if (pit->irq_source_id >= 0) |
diff --git a/arch/x86/kvm/i8259.c b/arch/x86/kvm/i8259.c index d057c0cbd245..b7d145b20953 100644 --- a/arch/x86/kvm/i8259.c +++ b/arch/x86/kvm/i8259.c | |||
@@ -533,7 +533,9 @@ struct kvm_pic *kvm_create_pic(struct kvm *kvm) | |||
533 | * Initialize PIO device | 533 | * Initialize PIO device |
534 | */ | 534 | */ |
535 | kvm_iodevice_init(&s->dev, &picdev_ops); | 535 | kvm_iodevice_init(&s->dev, &picdev_ops); |
536 | ret = kvm_io_bus_register_dev(kvm, &kvm->pio_bus, &s->dev); | 536 | down_write(&kvm->slots_lock); |
537 | ret = kvm_io_bus_register_dev(kvm, KVM_PIO_BUS, &s->dev); | ||
538 | up_write(&kvm->slots_lock); | ||
537 | if (ret < 0) { | 539 | if (ret < 0) { |
538 | kfree(s); | 540 | kfree(s); |
539 | return NULL; | 541 | return NULL; |
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 28127c936c3b..9b42673df4af 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c | |||
@@ -2851,7 +2851,7 @@ static int vcpu_mmio_write(struct kvm_vcpu *vcpu, gpa_t addr, int len, | |||
2851 | !kvm_iodevice_write(&vcpu->arch.apic->dev, addr, len, v)) | 2851 | !kvm_iodevice_write(&vcpu->arch.apic->dev, addr, len, v)) |
2852 | return 0; | 2852 | return 0; |
2853 | 2853 | ||
2854 | return kvm_io_bus_write(&vcpu->kvm->mmio_bus, addr, len, v); | 2854 | return kvm_io_bus_write(vcpu->kvm, KVM_MMIO_BUS, addr, len, v); |
2855 | } | 2855 | } |
2856 | 2856 | ||
2857 | static int vcpu_mmio_read(struct kvm_vcpu *vcpu, gpa_t addr, int len, void *v) | 2857 | static int vcpu_mmio_read(struct kvm_vcpu *vcpu, gpa_t addr, int len, void *v) |
@@ -2860,7 +2860,7 @@ static int vcpu_mmio_read(struct kvm_vcpu *vcpu, gpa_t addr, int len, void *v) | |||
2860 | !kvm_iodevice_read(&vcpu->arch.apic->dev, addr, len, v)) | 2860 | !kvm_iodevice_read(&vcpu->arch.apic->dev, addr, len, v)) |
2861 | return 0; | 2861 | return 0; |
2862 | 2862 | ||
2863 | return kvm_io_bus_read(&vcpu->kvm->mmio_bus, addr, len, v); | 2863 | return kvm_io_bus_read(vcpu->kvm, KVM_MMIO_BUS, addr, len, v); |
2864 | } | 2864 | } |
2865 | 2865 | ||
2866 | static int kvm_read_guest_virt(gva_t addr, void *val, unsigned int bytes, | 2866 | static int kvm_read_guest_virt(gva_t addr, void *val, unsigned int bytes, |
@@ -3345,11 +3345,12 @@ static int kernel_pio(struct kvm_vcpu *vcpu, void *pd) | |||
3345 | int r; | 3345 | int r; |
3346 | 3346 | ||
3347 | if (vcpu->arch.pio.in) | 3347 | if (vcpu->arch.pio.in) |
3348 | r = kvm_io_bus_read(&vcpu->kvm->pio_bus, vcpu->arch.pio.port, | 3348 | r = kvm_io_bus_read(vcpu->kvm, KVM_PIO_BUS, vcpu->arch.pio.port, |
3349 | vcpu->arch.pio.size, pd); | 3349 | vcpu->arch.pio.size, pd); |
3350 | else | 3350 | else |
3351 | r = kvm_io_bus_write(&vcpu->kvm->pio_bus, vcpu->arch.pio.port, | 3351 | r = kvm_io_bus_write(vcpu->kvm, KVM_PIO_BUS, |
3352 | vcpu->arch.pio.size, pd); | 3352 | vcpu->arch.pio.port, vcpu->arch.pio.size, |
3353 | pd); | ||
3353 | return r; | 3354 | return r; |
3354 | } | 3355 | } |
3355 | 3356 | ||
@@ -3360,7 +3361,7 @@ static int pio_string_write(struct kvm_vcpu *vcpu) | |||
3360 | int i, r = 0; | 3361 | int i, r = 0; |
3361 | 3362 | ||
3362 | for (i = 0; i < io->cur_count; i++) { | 3363 | for (i = 0; i < io->cur_count; i++) { |
3363 | if (kvm_io_bus_write(&vcpu->kvm->pio_bus, | 3364 | if (kvm_io_bus_write(vcpu->kvm, KVM_PIO_BUS, |
3364 | io->port, io->size, pd)) { | 3365 | io->port, io->size, pd)) { |
3365 | r = -EOPNOTSUPP; | 3366 | r = -EOPNOTSUPP; |
3366 | break; | 3367 | break; |