Lines Matching refs:kvm
93 vcpu->kvm->arch.vgic.vm_ops.add_sgi_source(vcpu, irq, source); in add_sgi_source()
98 return vcpu->kvm->arch.vgic.vm_ops.queue_sgi(vcpu, irq); in queue_sgi()
101 int kvm_vgic_map_resources(struct kvm *kvm) in kvm_vgic_map_resources() argument
103 return kvm->arch.vgic.vm_ops.map_resources(kvm, vgic); in kvm_vgic_map_resources()
248 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_irq_is_edge()
257 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_irq_is_enabled()
264 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_irq_is_queued()
271 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_irq_is_active()
278 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_irq_set_queued()
285 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_irq_clear_queued()
292 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_irq_set_active()
299 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_irq_clear_active()
306 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_dist_irq_get_level()
313 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_dist_irq_set_level()
320 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_dist_irq_clear_level()
327 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_dist_irq_soft_pend()
334 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_dist_irq_clear_soft_pend()
341 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_dist_irq_is_pending()
348 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_dist_irq_set_pending()
355 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_dist_irq_clear_pending()
452 bool vgic_handle_enable_reg(struct kvm *kvm, struct kvm_exit_mmio *mmio, in vgic_handle_enable_reg() argument
457 struct kvm_vcpu *target_vcpu = kvm_get_vcpu(kvm, vcpu_id); in vgic_handle_enable_reg()
459 reg = vgic_bitmap_get_reg(&kvm->arch.vgic.irq_enabled, vcpu_id, offset); in vgic_handle_enable_reg()
467 vgic_update_state(kvm); in vgic_handle_enable_reg()
474 bool vgic_handle_set_pending_reg(struct kvm *kvm, in vgic_handle_set_pending_reg() argument
481 struct vgic_dist *dist = &kvm->arch.vgic; in vgic_handle_set_pending_reg()
504 vgic_update_state(kvm); in vgic_handle_set_pending_reg()
511 bool vgic_handle_clear_pending_reg(struct kvm *kvm, in vgic_handle_clear_pending_reg() argument
518 struct vgic_dist *dist = &kvm->arch.vgic; in vgic_handle_clear_pending_reg()
541 vgic_update_state(kvm); in vgic_handle_clear_pending_reg()
547 bool vgic_handle_set_active_reg(struct kvm *kvm, in vgic_handle_set_active_reg() argument
552 struct vgic_dist *dist = &kvm->arch.vgic; in vgic_handle_set_active_reg()
559 vgic_update_state(kvm); in vgic_handle_set_active_reg()
566 bool vgic_handle_clear_active_reg(struct kvm *kvm, in vgic_handle_clear_active_reg() argument
571 struct vgic_dist *dist = &kvm->arch.vgic; in vgic_handle_clear_active_reg()
578 vgic_update_state(kvm); in vgic_handle_clear_active_reg()
712 vgic_update_state(vcpu->kvm); in vgic_unqueue_irqs()
803 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_handle_mmio_access()
843 vgic_kick_vcpus(vcpu->kvm); in vgic_handle_mmio_access()
884 int vgic_register_kvm_io_dev(struct kvm *kvm, gpa_t base, int len, in vgic_register_kvm_io_dev() argument
893 vcpu = kvm_get_vcpu(kvm, redist_vcpu_id); in vgic_register_kvm_io_dev()
902 mutex_lock(&kvm->slots_lock); in vgic_register_kvm_io_dev()
904 ret = kvm_io_bus_register_dev(kvm, KVM_MMIO_BUS, base, len, in vgic_register_kvm_io_dev()
906 mutex_unlock(&kvm->slots_lock); in vgic_register_kvm_io_dev()
922 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in compute_active_for_cpu()
952 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in compute_pending_for_cpu()
983 void vgic_update_state(struct kvm *kvm) in vgic_update_state() argument
985 struct vgic_dist *dist = &kvm->arch.vgic; in vgic_update_state()
994 kvm_for_each_vcpu(c, vcpu, kvm) { in vgic_update_state()
1111 vgic_update_state(vcpu->kvm); in vgic_queue_irq_to_lr()
1132 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_queue_irq()
1200 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in __kvm_vgic_flush_hwstate()
1262 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_process_maintenance()
1264 struct kvm *kvm = vcpu->kvm; in vgic_process_maintenance() local
1307 kvm_notify_acked_irq(kvm, 0, in vgic_process_maintenance()
1348 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in __kvm_vgic_sync_hwstate()
1379 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in kvm_vgic_flush_hwstate()
1381 if (!irqchip_in_kernel(vcpu->kvm)) in kvm_vgic_flush_hwstate()
1391 if (!irqchip_in_kernel(vcpu->kvm)) in kvm_vgic_sync_hwstate()
1399 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in kvm_vgic_vcpu_pending_irq()
1401 if (!irqchip_in_kernel(vcpu->kvm)) in kvm_vgic_vcpu_pending_irq()
1409 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in kvm_vgic_vcpu_active_irq()
1411 if (!irqchip_in_kernel(vcpu->kvm)) in kvm_vgic_vcpu_active_irq()
1418 void vgic_kick_vcpus(struct kvm *kvm) in vgic_kick_vcpus() argument
1427 kvm_for_each_vcpu(c, vcpu, kvm) { in vgic_kick_vcpus()
1451 static int vgic_update_irq_pending(struct kvm *kvm, int cpuid, in vgic_update_irq_pending() argument
1454 struct vgic_dist *dist = &kvm->arch.vgic; in vgic_update_irq_pending()
1462 vcpu = kvm_get_vcpu(kvm, cpuid); in vgic_update_irq_pending()
1478 vcpu = kvm_get_vcpu(kvm, cpuid); in vgic_update_irq_pending()
1539 int kvm_vgic_inject_irq(struct kvm *kvm, int cpuid, unsigned int irq_num, in kvm_vgic_inject_irq() argument
1545 if (unlikely(!vgic_initialized(kvm))) { in kvm_vgic_inject_irq()
1552 if (kvm->arch.vgic.vgic_model != KVM_DEV_TYPE_ARM_VGIC_V2) { in kvm_vgic_inject_irq()
1556 mutex_lock(&kvm->lock); in kvm_vgic_inject_irq()
1557 ret = vgic_init(kvm); in kvm_vgic_inject_irq()
1558 mutex_unlock(&kvm->lock); in kvm_vgic_inject_irq()
1564 if (irq_num >= min(kvm->arch.vgic.nr_irqs, 1020)) in kvm_vgic_inject_irq()
1567 vcpu_id = vgic_update_irq_pending(kvm, cpuid, irq_num, level); in kvm_vgic_inject_irq()
1570 kvm_vcpu_kick(kvm_get_vcpu(kvm, vcpu_id)); in kvm_vgic_inject_irq()
1643 void kvm_vgic_destroy(struct kvm *kvm) in kvm_vgic_destroy() argument
1645 struct vgic_dist *dist = &kvm->arch.vgic; in kvm_vgic_destroy()
1649 kvm_for_each_vcpu(i, vcpu, kvm) in kvm_vgic_destroy()
1681 int vgic_init(struct kvm *kvm) in vgic_init() argument
1683 struct vgic_dist *dist = &kvm->arch.vgic; in vgic_init()
1688 if (vgic_initialized(kvm)) in vgic_init()
1691 nr_cpus = dist->nr_cpus = atomic_read(&kvm->online_vcpus); in vgic_init()
1740 ret = kvm->arch.vgic.vm_ops.init_model(kvm); in vgic_init()
1744 kvm_for_each_vcpu(vcpu_id, vcpu, kvm) { in vgic_init()
1766 kvm_vgic_destroy(kvm); in vgic_init()
1771 static int init_vgic_model(struct kvm *kvm, int type) in init_vgic_model() argument
1775 vgic_v2_init_emulation(kvm); in init_vgic_model()
1779 vgic_v3_init_emulation(kvm); in init_vgic_model()
1786 if (atomic_read(&kvm->online_vcpus) > kvm->arch.max_vcpus) in init_vgic_model()
1792 int kvm_vgic_create(struct kvm *kvm, u32 type) in kvm_vgic_create() argument
1797 mutex_lock(&kvm->lock); in kvm_vgic_create()
1799 if (irqchip_in_kernel(kvm)) { in kvm_vgic_create()
1821 kvm_for_each_vcpu(i, vcpu, kvm) { in kvm_vgic_create()
1827 kvm_for_each_vcpu(i, vcpu, kvm) { in kvm_vgic_create()
1833 ret = init_vgic_model(kvm, type); in kvm_vgic_create()
1837 spin_lock_init(&kvm->arch.vgic.lock); in kvm_vgic_create()
1838 kvm->arch.vgic.in_kernel = true; in kvm_vgic_create()
1839 kvm->arch.vgic.vgic_model = type; in kvm_vgic_create()
1840 kvm->arch.vgic.vctrl_base = vgic->vctrl_base; in kvm_vgic_create()
1841 kvm->arch.vgic.vgic_dist_base = VGIC_ADDR_UNDEF; in kvm_vgic_create()
1842 kvm->arch.vgic.vgic_cpu_base = VGIC_ADDR_UNDEF; in kvm_vgic_create()
1843 kvm->arch.vgic.vgic_redist_base = VGIC_ADDR_UNDEF; in kvm_vgic_create()
1847 vcpu = kvm_get_vcpu(kvm, vcpu_lock_idx); in kvm_vgic_create()
1852 mutex_unlock(&kvm->lock); in kvm_vgic_create()
1856 static int vgic_ioaddr_overlap(struct kvm *kvm) in vgic_ioaddr_overlap() argument
1858 phys_addr_t dist = kvm->arch.vgic.vgic_dist_base; in vgic_ioaddr_overlap()
1859 phys_addr_t cpu = kvm->arch.vgic.vgic_cpu_base; in vgic_ioaddr_overlap()
1869 static int vgic_ioaddr_assign(struct kvm *kvm, phys_addr_t *ioaddr, in vgic_ioaddr_assign() argument
1886 ret = vgic_ioaddr_overlap(kvm); in vgic_ioaddr_assign()
1906 int kvm_vgic_addr(struct kvm *kvm, unsigned long type, u64 *addr, bool write) in kvm_vgic_addr() argument
1909 struct vgic_dist *vgic = &kvm->arch.vgic; in kvm_vgic_addr()
1914 mutex_lock(&kvm->lock); in kvm_vgic_addr()
1956 r = vgic_ioaddr_assign(kvm, addr_ptr, *addr, in kvm_vgic_addr()
1963 mutex_unlock(&kvm->lock); in kvm_vgic_addr()
1980 r = kvm_vgic_addr(dev->kvm, type, &addr, true); in vgic_set_common_attr()
2002 mutex_lock(&dev->kvm->lock); in vgic_set_common_attr()
2004 if (vgic_ready(dev->kvm) || dev->kvm->arch.vgic.nr_irqs) in vgic_set_common_attr()
2007 dev->kvm->arch.vgic.nr_irqs = val; in vgic_set_common_attr()
2009 mutex_unlock(&dev->kvm->lock); in vgic_set_common_attr()
2016 r = vgic_init(dev->kvm); in vgic_set_common_attr()
2036 r = kvm_vgic_addr(dev->kvm, type, &addr, false); in vgic_get_common_attr()
2047 r = put_user(dev->kvm->arch.vgic.nr_irqs, uaddr); in vgic_get_common_attr()
2143 int kvm_irq_map_gsi(struct kvm *kvm, in kvm_irq_map_gsi() argument
2150 int kvm_irq_map_chip_pin(struct kvm *kvm, unsigned irqchip, unsigned pin) in kvm_irq_map_chip_pin() argument
2155 int kvm_set_irq(struct kvm *kvm, int irq_source_id, in kvm_set_irq() argument
2162 BUG_ON(!vgic_initialized(kvm)); in kvm_set_irq()
2164 return kvm_vgic_inject_irq(kvm, 0, spi, level); in kvm_set_irq()
2169 struct kvm *kvm, int irq_source_id, in kvm_set_msi() argument