Lines Matching defs:bus

147 static void kvm_io_bus_destroy(struct kvm_io_bus *bus);
1317 struct kvm_io_bus *bus = kvm_get_bus(kvm, i);
1319 if (bus)
1320 kvm_io_bus_destroy(bus);
5371 static void kvm_io_bus_destroy(struct kvm_io_bus *bus)
5375 for (i = 0; i < bus->dev_count; i++) {
5376 struct kvm_io_device *pos = bus->range[i].dev;
5380 kfree(bus);
5413 static int kvm_io_bus_get_first_dev(struct kvm_io_bus *bus,
5424 range = bsearch(&key, bus->range, bus->dev_count,
5429 off = range - bus->range;
5431 while (off > 0 && kvm_io_bus_cmp(&key, &bus->range[off-1]) == 0)
5437 static int __kvm_io_bus_write(struct kvm_vcpu *vcpu, struct kvm_io_bus *bus,
5442 idx = kvm_io_bus_get_first_dev(bus, range->addr, range->len);
5446 while (idx < bus->dev_count &&
5447 kvm_io_bus_cmp(range, &bus->range[idx]) == 0) {
5448 if (!kvm_iodevice_write(vcpu, bus->range[idx].dev, range->addr,
5461 struct kvm_io_bus *bus;
5470 bus = srcu_dereference(vcpu->kvm->buses[bus_idx], &vcpu->kvm->srcu);
5471 if (!bus)
5473 r = __kvm_io_bus_write(vcpu, bus, &range, val);
5482 struct kvm_io_bus *bus;
5490 bus = srcu_dereference(vcpu->kvm->buses[bus_idx], &vcpu->kvm->srcu);
5491 if (!bus)
5495 if ((cookie >= 0) && (cookie < bus->dev_count) &&
5496 (kvm_io_bus_cmp(&range, &bus->range[cookie]) == 0))
5497 if (!kvm_iodevice_write(vcpu, bus->range[cookie].dev, addr, len,
5505 return __kvm_io_bus_write(vcpu, bus, &range, val);
5508 static int __kvm_io_bus_read(struct kvm_vcpu *vcpu, struct kvm_io_bus *bus,
5513 idx = kvm_io_bus_get_first_dev(bus, range->addr, range->len);
5517 while (idx < bus->dev_count &&
5518 kvm_io_bus_cmp(range, &bus->range[idx]) == 0) {
5519 if (!kvm_iodevice_read(vcpu, bus->range[idx].dev, range->addr,
5532 struct kvm_io_bus *bus;
5541 bus = srcu_dereference(vcpu->kvm->buses[bus_idx], &vcpu->kvm->srcu);
5542 if (!bus)
5544 r = __kvm_io_bus_read(vcpu, bus, &range, val);
5553 struct kvm_io_bus *new_bus, *bus;
5556 bus = kvm_get_bus(kvm, bus_idx);
5557 if (!bus)
5561 if (bus->dev_count - bus->ioeventfd_count > NR_IOBUS_DEVS - 1)
5564 new_bus = kmalloc(struct_size(bus, range, bus->dev_count + 1),
5575 for (i = 0; i < bus->dev_count; i++)
5576 if (kvm_io_bus_cmp(&bus->range[i], &range) > 0)
5579 memcpy(new_bus, bus, sizeof(*bus) + i * sizeof(struct kvm_io_range));
5582 memcpy(new_bus->range + i + 1, bus->range + i,
5583 (bus->dev_count - i) * sizeof(struct kvm_io_range));
5586 kfree(bus);
5595 struct kvm_io_bus *new_bus, *bus;
5599 bus = kvm_get_bus(kvm, bus_idx);
5600 if (!bus)
5603 for (i = 0; i < bus->dev_count; i++) {
5604 if (bus->range[i].dev == dev) {
5609 if (i == bus->dev_count)
5612 new_bus = kmalloc(struct_size(bus, range, bus->dev_count - 1),
5615 memcpy(new_bus, bus, struct_size(bus, range, i));
5617 memcpy(new_bus->range + i, bus->range + i + 1,
5625 * If NULL bus is installed, destroy the old bus, including all the
5629 pr_err("kvm: failed to shrink bus, removing it completely\n");
5630 kvm_io_bus_destroy(bus);
5635 kfree(bus);
5642 struct kvm_io_bus *bus;
5648 bus = srcu_dereference(kvm->buses[bus_idx], &kvm->srcu);
5649 if (!bus)
5652 dev_idx = kvm_io_bus_get_first_dev(bus, addr, 1);
5656 iodev = bus->range[dev_idx].dev;