summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--virt/kvm/coalesced_mmio.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/virt/kvm/coalesced_mmio.c b/virt/kvm/coalesced_mmio.c
index 3710342cf6ad..6855cce3e528 100644
--- a/virt/kvm/coalesced_mmio.c
+++ b/virt/kvm/coalesced_mmio.c
@@ -175,10 +175,14 @@ int kvm_vm_ioctl_unregister_coalesced_mmio(struct kvm *kvm,
175{ 175{
176 struct kvm_coalesced_mmio_dev *dev, *tmp; 176 struct kvm_coalesced_mmio_dev *dev, *tmp;
177 177
178 if (zone->pio != 1 && zone->pio != 0)
179 return -EINVAL;
180
178 mutex_lock(&kvm->slots_lock); 181 mutex_lock(&kvm->slots_lock);
179 182
180 list_for_each_entry_safe(dev, tmp, &kvm->coalesced_zones, list) 183 list_for_each_entry_safe(dev, tmp, &kvm->coalesced_zones, list)
181 if (coalesced_mmio_in_range(dev, zone->addr, zone->size)) { 184 if (zone->pio == dev->zone.pio &&
185 coalesced_mmio_in_range(dev, zone->addr, zone->size)) {
182 kvm_io_bus_unregister_dev(kvm, 186 kvm_io_bus_unregister_dev(kvm,
183 zone->pio ? KVM_PIO_BUS : KVM_MMIO_BUS, &dev->dev); 187 zone->pio ? KVM_PIO_BUS : KVM_MMIO_BUS, &dev->dev);
184 kvm_iodevice_destructor(&dev->dev); 188 kvm_iodevice_destructor(&dev->dev);