Lines Matching refs:iter

36 static void iter_next(struct vgic_state_iter *iter)
38 if (iter->dist_id == 0) {
39 iter->dist_id++;
43 iter->intid++;
44 if (iter->intid == VGIC_NR_PRIVATE_IRQS &&
45 ++iter->vcpu_id < iter->nr_cpus)
46 iter->intid = 0;
48 if (iter->intid >= (iter->nr_spis + VGIC_NR_PRIVATE_IRQS)) {
49 if (iter->lpi_idx < iter->nr_lpis)
50 iter->intid = iter->lpi_array[iter->lpi_idx];
51 iter->lpi_idx++;
55 static void iter_init(struct kvm *kvm, struct vgic_state_iter *iter,
60 memset(iter, 0, sizeof(*iter));
62 iter->nr_cpus = nr_cpus;
63 iter->nr_spis = kvm->arch.vgic.nr_spis;
65 iter->nr_lpis = vgic_copy_lpi_list(kvm, NULL, &iter->lpi_array);
66 if (iter->nr_lpis < 0)
67 iter->nr_lpis = 0;
72 iter_next(iter);
75 static bool end_of_vgic(struct vgic_state_iter *iter)
77 return iter->dist_id > 0 &&
78 iter->vcpu_id == iter->nr_cpus &&
79 iter->intid >= (iter->nr_spis + VGIC_NR_PRIVATE_IRQS) &&
80 iter->lpi_idx > iter->nr_lpis;
86 struct vgic_state_iter *iter;
89 iter = kvm->arch.vgic.iter;
90 if (iter) {
91 iter = ERR_PTR(-EBUSY);
95 iter = kmalloc(sizeof(*iter), GFP_KERNEL);
96 if (!iter) {
97 iter = ERR_PTR(-ENOMEM);
101 iter_init(kvm, iter, *pos);
102 kvm->arch.vgic.iter = iter;
104 if (end_of_vgic(iter))
105 iter = NULL;
108 return iter;
114 struct vgic_state_iter *iter = kvm->arch.vgic.iter;
117 iter_next(iter);
118 if (end_of_vgic(iter))
119 iter = NULL;
120 return iter;
126 struct vgic_state_iter *iter;
136 iter = kvm->arch.vgic.iter;
137 kfree(iter->lpi_array);
138 kfree(iter);
139 kvm->arch.vgic.iter = NULL;
233 struct vgic_state_iter *iter = v;
238 if (iter->dist_id == 0) {
246 if (iter->vcpu_id < iter->nr_cpus)
247 vcpu = kvm_get_vcpu(kvm, iter->vcpu_id);
249 irq = vgic_get_irq(kvm, vcpu, iter->intid);
251 seq_printf(s, " LPI %4d freed\n", iter->intid);