Lines Matching refs:dist

248 	struct vgic_dist *dist = &vcpu->kvm->arch.vgic;  in vgic_irq_is_edge()  local
251 irq_val = vgic_bitmap_get_irq_val(&dist->irq_cfg, vcpu->vcpu_id, irq); in vgic_irq_is_edge()
257 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_irq_is_enabled() local
259 return vgic_bitmap_get_irq_val(&dist->irq_enabled, vcpu->vcpu_id, irq); in vgic_irq_is_enabled()
264 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_irq_is_queued() local
266 return vgic_bitmap_get_irq_val(&dist->irq_queued, vcpu->vcpu_id, irq); in vgic_irq_is_queued()
271 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_irq_is_active() local
273 return vgic_bitmap_get_irq_val(&dist->irq_active, vcpu->vcpu_id, irq); in vgic_irq_is_active()
278 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_irq_set_queued() local
280 vgic_bitmap_set_irq_val(&dist->irq_queued, vcpu->vcpu_id, irq, 1); in vgic_irq_set_queued()
285 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_irq_clear_queued() local
287 vgic_bitmap_set_irq_val(&dist->irq_queued, vcpu->vcpu_id, irq, 0); in vgic_irq_clear_queued()
292 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_irq_set_active() local
294 vgic_bitmap_set_irq_val(&dist->irq_active, vcpu->vcpu_id, irq, 1); in vgic_irq_set_active()
299 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_irq_clear_active() local
301 vgic_bitmap_set_irq_val(&dist->irq_active, vcpu->vcpu_id, irq, 0); in vgic_irq_clear_active()
306 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_dist_irq_get_level() local
308 return vgic_bitmap_get_irq_val(&dist->irq_level, vcpu->vcpu_id, irq); in vgic_dist_irq_get_level()
313 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_dist_irq_set_level() local
315 vgic_bitmap_set_irq_val(&dist->irq_level, vcpu->vcpu_id, irq, 1); in vgic_dist_irq_set_level()
320 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_dist_irq_clear_level() local
322 vgic_bitmap_set_irq_val(&dist->irq_level, vcpu->vcpu_id, irq, 0); in vgic_dist_irq_clear_level()
327 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_dist_irq_soft_pend() local
329 return vgic_bitmap_get_irq_val(&dist->irq_soft_pend, vcpu->vcpu_id, irq); in vgic_dist_irq_soft_pend()
334 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_dist_irq_clear_soft_pend() local
336 vgic_bitmap_set_irq_val(&dist->irq_soft_pend, vcpu->vcpu_id, irq, 0); in vgic_dist_irq_clear_soft_pend()
341 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_dist_irq_is_pending() local
343 return vgic_bitmap_get_irq_val(&dist->irq_pending, vcpu->vcpu_id, irq); in vgic_dist_irq_is_pending()
348 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_dist_irq_set_pending() local
350 vgic_bitmap_set_irq_val(&dist->irq_pending, vcpu->vcpu_id, irq, 1); in vgic_dist_irq_set_pending()
355 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_dist_irq_clear_pending() local
357 vgic_bitmap_set_irq_val(&dist->irq_pending, vcpu->vcpu_id, irq, 0); in vgic_dist_irq_clear_pending()
481 struct vgic_dist *dist = &kvm->arch.vgic; in vgic_handle_set_pending_reg() local
483 reg = vgic_bitmap_get_reg(&dist->irq_cfg, vcpu_id, offset); in vgic_handle_set_pending_reg()
487 reg = vgic_bitmap_get_reg(&dist->irq_pending, vcpu_id, offset); in vgic_handle_set_pending_reg()
493 reg = vgic_bitmap_get_reg(&dist->irq_soft_pend, in vgic_handle_set_pending_reg()
518 struct vgic_dist *dist = &kvm->arch.vgic; in vgic_handle_clear_pending_reg() local
520 reg = vgic_bitmap_get_reg(&dist->irq_pending, vcpu_id, offset); in vgic_handle_clear_pending_reg()
525 level_active = vgic_bitmap_get_reg(&dist->irq_level, in vgic_handle_clear_pending_reg()
527 reg = vgic_bitmap_get_reg(&dist->irq_pending, vcpu_id, offset); in vgic_handle_clear_pending_reg()
537 reg = vgic_bitmap_get_reg(&dist->irq_soft_pend, in vgic_handle_clear_pending_reg()
552 struct vgic_dist *dist = &kvm->arch.vgic; in vgic_handle_set_active_reg() local
554 reg = vgic_bitmap_get_reg(&dist->irq_active, vcpu_id, offset); in vgic_handle_set_active_reg()
571 struct vgic_dist *dist = &kvm->arch.vgic; in vgic_handle_clear_active_reg() local
573 reg = vgic_bitmap_get_reg(&dist->irq_active, vcpu_id, offset); in vgic_handle_clear_active_reg()
730 static bool vgic_validate_access(const struct vgic_dist *dist, in vgic_validate_access() argument
740 if (irq >= dist->nr_irqs) in vgic_validate_access()
803 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_handle_mmio_access() local
825 spin_lock(&dist->lock); in vgic_handle_mmio_access()
827 if (vgic_validate_access(dist, range, offset)) { in vgic_handle_mmio_access()
834 spin_unlock(&dist->lock); in vgic_handle_mmio_access()
915 static int vgic_nr_shared_irqs(struct vgic_dist *dist) in vgic_nr_shared_irqs() argument
917 return dist->nr_irqs - VGIC_NR_PRIVATE_IRQS; in vgic_nr_shared_irqs()
922 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in compute_active_for_cpu() local
925 int nr_shared = vgic_nr_shared_irqs(dist); in compute_active_for_cpu()
932 active = vgic_bitmap_get_cpu_map(&dist->irq_active, vcpu_id); in compute_active_for_cpu()
933 enabled = vgic_bitmap_get_cpu_map(&dist->irq_enabled, vcpu_id); in compute_active_for_cpu()
936 active = vgic_bitmap_get_shared_map(&dist->irq_active); in compute_active_for_cpu()
937 enabled = vgic_bitmap_get_shared_map(&dist->irq_enabled); in compute_active_for_cpu()
940 vgic_bitmap_get_shared_map(&dist->irq_spi_target[vcpu_id]), in compute_active_for_cpu()
952 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in compute_pending_for_cpu() local
955 int nr_shared = vgic_nr_shared_irqs(dist); in compute_pending_for_cpu()
962 pending = vgic_bitmap_get_cpu_map(&dist->irq_pending, vcpu_id); in compute_pending_for_cpu()
963 enabled = vgic_bitmap_get_cpu_map(&dist->irq_enabled, vcpu_id); in compute_pending_for_cpu()
966 pending = vgic_bitmap_get_shared_map(&dist->irq_pending); in compute_pending_for_cpu()
967 enabled = vgic_bitmap_get_shared_map(&dist->irq_enabled); in compute_pending_for_cpu()
970 vgic_bitmap_get_shared_map(&dist->irq_spi_target[vcpu_id]), in compute_pending_for_cpu()
976 pending_shared < vgic_nr_shared_irqs(dist)); in compute_pending_for_cpu()
985 struct vgic_dist *dist = &kvm->arch.vgic; in vgic_update_state() local
989 if (!dist->enabled) { in vgic_update_state()
990 set_bit(0, dist->irq_pending_on_cpu); in vgic_update_state()
996 set_bit(c, dist->irq_pending_on_cpu); in vgic_update_state()
999 set_bit(c, dist->irq_active_on_cpu); in vgic_update_state()
1001 clear_bit(c, dist->irq_active_on_cpu); in vgic_update_state()
1132 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_queue_irq() local
1139 BUG_ON(irq >= dist->nr_irqs); in vgic_queue_irq()
1200 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in __kvm_vgic_flush_hwstate() local
1204 int nr_shared = vgic_nr_shared_irqs(dist); in __kvm_vgic_flush_hwstate()
1255 clear_bit(vcpu_id, dist->irq_pending_on_cpu); in __kvm_vgic_flush_hwstate()
1262 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_process_maintenance() local
1281 spin_lock(&dist->lock); in vgic_process_maintenance()
1305 spin_unlock(&dist->lock); in vgic_process_maintenance()
1309 spin_lock(&dist->lock); in vgic_process_maintenance()
1320 spin_unlock(&dist->lock); in vgic_process_maintenance()
1348 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in __kvm_vgic_sync_hwstate() local
1367 BUG_ON(vlr.irq >= dist->nr_irqs); in __kvm_vgic_sync_hwstate()
1374 set_bit(vcpu->vcpu_id, dist->irq_pending_on_cpu); in __kvm_vgic_sync_hwstate()
1379 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in kvm_vgic_flush_hwstate() local
1384 spin_lock(&dist->lock); in kvm_vgic_flush_hwstate()
1386 spin_unlock(&dist->lock); in kvm_vgic_flush_hwstate()
1399 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in kvm_vgic_vcpu_pending_irq() local
1404 return test_bit(vcpu->vcpu_id, dist->irq_pending_on_cpu); in kvm_vgic_vcpu_pending_irq()
1409 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in kvm_vgic_vcpu_active_irq() local
1414 return test_bit(vcpu->vcpu_id, dist->irq_active_on_cpu); in kvm_vgic_vcpu_active_irq()
1454 struct vgic_dist *dist = &kvm->arch.vgic; in vgic_update_irq_pending() local
1460 spin_lock(&dist->lock); in vgic_update_irq_pending()
1472 cpuid = dist->irq_spi_cpu[irq_num - VGIC_NR_PRIVATE_IRQS]; in vgic_update_irq_pending()
1516 set_bit(cpuid, dist->irq_pending_on_cpu); in vgic_update_irq_pending()
1520 spin_unlock(&dist->lock); in vgic_update_irq_pending()
1645 struct vgic_dist *dist = &kvm->arch.vgic; in kvm_vgic_destroy() local
1652 vgic_free_bitmap(&dist->irq_enabled); in kvm_vgic_destroy()
1653 vgic_free_bitmap(&dist->irq_level); in kvm_vgic_destroy()
1654 vgic_free_bitmap(&dist->irq_pending); in kvm_vgic_destroy()
1655 vgic_free_bitmap(&dist->irq_soft_pend); in kvm_vgic_destroy()
1656 vgic_free_bitmap(&dist->irq_queued); in kvm_vgic_destroy()
1657 vgic_free_bitmap(&dist->irq_cfg); in kvm_vgic_destroy()
1658 vgic_free_bytemap(&dist->irq_priority); in kvm_vgic_destroy()
1659 if (dist->irq_spi_target) { in kvm_vgic_destroy()
1660 for (i = 0; i < dist->nr_cpus; i++) in kvm_vgic_destroy()
1661 vgic_free_bitmap(&dist->irq_spi_target[i]); in kvm_vgic_destroy()
1663 kfree(dist->irq_sgi_sources); in kvm_vgic_destroy()
1664 kfree(dist->irq_spi_cpu); in kvm_vgic_destroy()
1665 kfree(dist->irq_spi_mpidr); in kvm_vgic_destroy()
1666 kfree(dist->irq_spi_target); in kvm_vgic_destroy()
1667 kfree(dist->irq_pending_on_cpu); in kvm_vgic_destroy()
1668 kfree(dist->irq_active_on_cpu); in kvm_vgic_destroy()
1669 dist->irq_sgi_sources = NULL; in kvm_vgic_destroy()
1670 dist->irq_spi_cpu = NULL; in kvm_vgic_destroy()
1671 dist->irq_spi_target = NULL; in kvm_vgic_destroy()
1672 dist->irq_pending_on_cpu = NULL; in kvm_vgic_destroy()
1673 dist->irq_active_on_cpu = NULL; in kvm_vgic_destroy()
1674 dist->nr_cpus = 0; in kvm_vgic_destroy()
1683 struct vgic_dist *dist = &kvm->arch.vgic; in vgic_init() local
1691 nr_cpus = dist->nr_cpus = atomic_read(&kvm->online_vcpus); in vgic_init()
1699 if (!dist->nr_irqs) in vgic_init()
1700 dist->nr_irqs = VGIC_NR_IRQS_LEGACY; in vgic_init()
1702 nr_irqs = dist->nr_irqs; in vgic_init()
1704 ret = vgic_init_bitmap(&dist->irq_enabled, nr_cpus, nr_irqs); in vgic_init()
1705 ret |= vgic_init_bitmap(&dist->irq_level, nr_cpus, nr_irqs); in vgic_init()
1706 ret |= vgic_init_bitmap(&dist->irq_pending, nr_cpus, nr_irqs); in vgic_init()
1707 ret |= vgic_init_bitmap(&dist->irq_soft_pend, nr_cpus, nr_irqs); in vgic_init()
1708 ret |= vgic_init_bitmap(&dist->irq_queued, nr_cpus, nr_irqs); in vgic_init()
1709 ret |= vgic_init_bitmap(&dist->irq_active, nr_cpus, nr_irqs); in vgic_init()
1710 ret |= vgic_init_bitmap(&dist->irq_cfg, nr_cpus, nr_irqs); in vgic_init()
1711 ret |= vgic_init_bytemap(&dist->irq_priority, nr_cpus, nr_irqs); in vgic_init()
1716 dist->irq_sgi_sources = kzalloc(nr_cpus * VGIC_NR_SGIS, GFP_KERNEL); in vgic_init()
1717 dist->irq_spi_cpu = kzalloc(nr_irqs - VGIC_NR_PRIVATE_IRQS, GFP_KERNEL); in vgic_init()
1718 dist->irq_spi_target = kzalloc(sizeof(*dist->irq_spi_target) * nr_cpus, in vgic_init()
1720 dist->irq_pending_on_cpu = kzalloc(BITS_TO_LONGS(nr_cpus) * sizeof(long), in vgic_init()
1722 dist->irq_active_on_cpu = kzalloc(BITS_TO_LONGS(nr_cpus) * sizeof(long), in vgic_init()
1724 if (!dist->irq_sgi_sources || in vgic_init()
1725 !dist->irq_spi_cpu || in vgic_init()
1726 !dist->irq_spi_target || in vgic_init()
1727 !dist->irq_pending_on_cpu || in vgic_init()
1728 !dist->irq_active_on_cpu) { in vgic_init()
1734 ret |= vgic_init_bitmap(&dist->irq_spi_target[i], in vgic_init()
1751 for (i = 0; i < dist->nr_irqs; i++) { in vgic_init()
1753 vgic_bitmap_set_irq_val(&dist->irq_enabled, in vgic_init()
1756 vgic_bitmap_set_irq_val(&dist->irq_cfg, in vgic_init()
1858 phys_addr_t dist = kvm->arch.vgic.vgic_dist_base; in vgic_ioaddr_overlap() local
1861 if (IS_VGIC_ADDR_UNDEF(dist) || IS_VGIC_ADDR_UNDEF(cpu)) in vgic_ioaddr_overlap()
1863 if ((dist <= cpu && dist + KVM_VGIC_V2_DIST_SIZE > cpu) || in vgic_ioaddr_overlap()
1864 (cpu <= dist && cpu + KVM_VGIC_V2_CPU_SIZE > dist)) in vgic_ioaddr_overlap()