Lines Matching refs:entry
66 struct ptirq_remapping_info *n, *entry = NULL; in find_ptirq_entry() local
76 entry = n; in find_ptirq_entry()
87 entry = n; in find_ptirq_entry()
94 return entry; in find_ptirq_entry()
97 static void ptirq_enqueue_softirq(struct ptirq_remapping_info *entry) in ptirq_enqueue_softirq() argument
105 list_del(&entry->softirq_node); in ptirq_enqueue_softirq()
107 list_add_tail(&entry->softirq_node, &get_cpu_var(softirq_dev_entry_list)); in ptirq_enqueue_softirq()
114 struct ptirq_remapping_info *entry = (struct ptirq_remapping_info *) data; in ptirq_intr_delay_callback() local
116 ptirq_enqueue_softirq(entry); in ptirq_intr_delay_callback()
122 struct ptirq_remapping_info *entry = NULL; in ptirq_dequeue_softirq() local
127 …entry = get_first_item(&per_cpu(softirq_dev_entry_list, pcpu_id), struct ptirq_remapping_info, sof… in ptirq_dequeue_softirq()
129 list_del_init(&entry->softirq_node); in ptirq_dequeue_softirq()
132 if (is_service_vm(entry->vm) || timer_expired(&entry->intr_delay_timer, cpu_ticks(), NULL)) { in ptirq_dequeue_softirq()
136 (void)add_timer(&entry->intr_delay_timer); in ptirq_dequeue_softirq()
137 entry = NULL; in ptirq_dequeue_softirq()
142 return entry; in ptirq_dequeue_softirq()
147 struct ptirq_remapping_info *entry = NULL; in ptirq_alloc_entry() local
151 entry = &ptirq_entries[ptirq_id]; in ptirq_alloc_entry()
152 (void)memset((void *)entry, 0U, sizeof(struct ptirq_remapping_info)); in ptirq_alloc_entry()
153 entry->ptdev_entry_id = ptirq_id; in ptirq_alloc_entry()
154 entry->intr_type = intr_type; in ptirq_alloc_entry()
155 entry->vm = vm; in ptirq_alloc_entry()
156 entry->intr_count = 0UL; in ptirq_alloc_entry()
157 entry->irte_idx = INVALID_IRTE_ID; in ptirq_alloc_entry()
159 INIT_LIST_HEAD(&entry->softirq_node); in ptirq_alloc_entry()
161 initialize_timer(&entry->intr_delay_timer, ptirq_intr_delay_callback, entry, 0UL, 0UL); in ptirq_alloc_entry()
163 entry->active = false; in ptirq_alloc_entry()
168 return entry; in ptirq_alloc_entry()
171 void ptirq_release_entry(struct ptirq_remapping_info *entry) in ptirq_release_entry() argument
176 list_del_init(&entry->softirq_node); in ptirq_release_entry()
177 del_timer(&entry->intr_delay_timer); in ptirq_release_entry()
180 …bitmap_clear_lock((entry->ptdev_entry_id) & 0x3FU, &ptirq_entry_bitmaps[entry->ptdev_entry_id >> 6… in ptirq_release_entry()
182 (void)memset((void *)entry, 0U, sizeof(struct ptirq_remapping_info)); in ptirq_release_entry()
188 struct ptirq_remapping_info *entry = (struct ptirq_remapping_info *) data; in ptirq_interrupt_handler() local
195 if (!is_service_vm(entry->vm)) { in ptirq_interrupt_handler()
196 entry->intr_count++; in ptirq_interrupt_handler()
199 if (entry->vm->intr_inject_delay_delta > 0UL) { in ptirq_interrupt_handler()
202 if (timer_is_started(&entry->intr_delay_timer)) { in ptirq_interrupt_handler()
205 update_timer(&entry->intr_delay_timer, in ptirq_interrupt_handler()
206 cpu_ticks() + entry->vm->intr_inject_delay_delta, 0UL); in ptirq_interrupt_handler()
209 update_timer(&entry->intr_delay_timer, 0UL, 0UL); in ptirq_interrupt_handler()
214 ptirq_enqueue_softirq(entry); in ptirq_interrupt_handler()
219 int32_t ptirq_activate_entry(struct ptirq_remapping_info *entry, uint32_t phys_irq) in ptirq_activate_entry() argument
225 if ((entry->intr_type == PTDEV_INTR_INTX) || !is_pi_capable(entry->vm)) { in ptirq_activate_entry()
227 ret = request_irq(phys_irq, ptirq_interrupt_handler, (void *)entry, IRQF_PT); in ptirq_activate_entry()
236 entry->allocated_pirq = irq; in ptirq_activate_entry()
237 entry->active = true; in ptirq_activate_entry()
239 key = ptirq_hash_key(NULL, &(entry->phys_sid)); in ptirq_activate_entry()
240 hlist_add_head(&entry->phys_link, &(phys_sid_htable[key])); in ptirq_activate_entry()
241 key = ptirq_hash_key(entry->vm, &(entry->virt_sid)); in ptirq_activate_entry()
242 hlist_add_head(&entry->virt_link, &(virt_sid_htable[key])); in ptirq_activate_entry()
248 void ptirq_deactivate_entry(struct ptirq_remapping_info *entry) in ptirq_deactivate_entry() argument
250 hlist_del(&entry->phys_link); in ptirq_deactivate_entry()
251 hlist_del(&entry->virt_link); in ptirq_deactivate_entry()
252 entry->active = false; in ptirq_deactivate_entry()
253 if (entry->allocated_pirq != IRQ_INVALID) { in ptirq_deactivate_entry()
254 free_irq(entry->allocated_pirq); in ptirq_deactivate_entry()
268 struct ptirq_remapping_info *entry; in ptdev_release_all_entries() local
273 entry = &ptirq_entries[idx]; in ptdev_release_all_entries()
274 if ((entry->vm == vm) && is_entry_active(entry)) { in ptdev_release_all_entries()
276 if (entry->release_cb != NULL) { in ptdev_release_all_entries()
277 entry->release_cb(entry); in ptdev_release_all_entries()
279 ptirq_deactivate_entry(entry); in ptdev_release_all_entries()
280 ptirq_release_entry(entry); in ptdev_release_all_entries()
291 struct ptirq_remapping_info *entry; in ptirq_get_intr_data() local
294 entry = &ptirq_entries[i]; in ptirq_get_intr_data()
295 if (!is_entry_active(entry) || (entry->allocated_pirq == IRQ_INVALID)) { in ptirq_get_intr_data()
298 if (entry->vm == target_vm) { in ptirq_get_intr_data()
299 buffer[index] = entry->allocated_pirq; in ptirq_get_intr_data()
300 buffer[index + 1U] = entry->intr_count; in ptirq_get_intr_data()