]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - virt/kvm/kvm_main.c
Merge tag 'kvm-arm-for-4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm...
[karo-tx-linux.git] / virt / kvm / kvm_main.c
index 154b9ab459b0a3ac51bd30262afa372ae26d67aa..61b31a5f76c856f2d7e7f09c6b68ff5ac2fea526 100644 (file)
@@ -3545,6 +3545,30 @@ int kvm_io_bus_unregister_dev(struct kvm *kvm, enum kvm_bus bus_idx,
        return r;
 }
 
+struct kvm_io_device *kvm_io_bus_get_dev(struct kvm *kvm, enum kvm_bus bus_idx,
+                                        gpa_t addr)
+{
+       struct kvm_io_bus *bus;
+       int dev_idx, srcu_idx;
+       struct kvm_io_device *iodev = NULL;
+
+       srcu_idx = srcu_read_lock(&kvm->srcu);
+
+       bus = srcu_dereference(kvm->buses[bus_idx], &kvm->srcu);
+
+       dev_idx = kvm_io_bus_get_first_dev(bus, addr, 1);
+       if (dev_idx < 0)
+               goto out_unlock;
+
+       iodev = bus->range[dev_idx].dev;
+
+out_unlock:
+       srcu_read_unlock(&kvm->srcu, srcu_idx);
+
+       return iodev;
+}
+EXPORT_SYMBOL_GPL(kvm_io_bus_get_dev);
+
 static struct notifier_block kvm_cpu_notifier = {
        .notifier_call = kvm_cpu_hotplug,
 };