Lines Matching refs:irq_info
31 struct mic_irq_info *irq_info = &mdev->irq_info; in mic_thread_fn() local
36 spin_lock(&irq_info->mic_thread_lock); in mic_thread_fn()
39 if (test_and_clear_bit(i, &irq_info->mask)) { in mic_thread_fn()
40 list_for_each_entry(intr_cb, &irq_info->cb_list[i], in mic_thread_fn()
46 spin_unlock(&irq_info->mic_thread_lock); in mic_thread_fn()
57 struct mic_irq_info *irq_info = &mdev->irq_info; in mic_interrupt() local
67 spin_lock(&irq_info->mic_intr_lock); in mic_interrupt()
71 list_for_each_entry(intr_cb, &irq_info->cb_list[i], in mic_interrupt()
76 set_bit(i, &irq_info->mask); in mic_interrupt()
78 spin_unlock(&irq_info->mic_intr_lock); in mic_interrupt()
98 struct mic_irq_info *info = &mdev->irq_info; in mic_get_available_vector()
134 intr_cb->cb_id = ida_simple_get(&mdev->irq_info.cb_ida, in mic_register_intr_callback()
141 spin_lock(&mdev->irq_info.mic_thread_lock); in mic_register_intr_callback()
142 spin_lock_irqsave(&mdev->irq_info.mic_intr_lock, flags); in mic_register_intr_callback()
143 list_add_tail(&intr_cb->list, &mdev->irq_info.cb_list[idx]); in mic_register_intr_callback()
144 spin_unlock_irqrestore(&mdev->irq_info.mic_intr_lock, flags); in mic_register_intr_callback()
145 spin_unlock(&mdev->irq_info.mic_thread_lock); in mic_register_intr_callback()
169 spin_lock(&mdev->irq_info.mic_thread_lock); in mic_unregister_intr_callback()
170 spin_lock_irqsave(&mdev->irq_info.mic_intr_lock, flags); in mic_unregister_intr_callback()
172 list_for_each_safe(pos, tmp, &mdev->irq_info.cb_list[i]) { in mic_unregister_intr_callback()
176 ida_simple_remove(&mdev->irq_info.cb_ida, in mic_unregister_intr_callback()
180 &mdev->irq_info.mic_intr_lock, flags); in mic_unregister_intr_callback()
181 spin_unlock(&mdev->irq_info.mic_thread_lock); in mic_unregister_intr_callback()
186 spin_unlock_irqrestore(&mdev->irq_info.mic_intr_lock, flags); in mic_unregister_intr_callback()
187 spin_unlock(&mdev->irq_info.mic_thread_lock); in mic_unregister_intr_callback()
202 int entry_size = sizeof(*mdev->irq_info.msix_entries); in mic_setup_msix()
204 mdev->irq_info.msix_entries = kmalloc_array(MIC_MIN_MSIX, in mic_setup_msix()
206 if (!mdev->irq_info.msix_entries) { in mic_setup_msix()
212 mdev->irq_info.msix_entries[i].entry = i; in mic_setup_msix()
214 rc = pci_enable_msix_exact(pdev, mdev->irq_info.msix_entries, in mic_setup_msix()
221 mdev->irq_info.num_vectors = MIC_MIN_MSIX; in mic_setup_msix()
222 mdev->irq_info.mic_msi_map = kzalloc((sizeof(u32) * in mic_setup_msix()
223 mdev->irq_info.num_vectors), GFP_KERNEL); in mic_setup_msix()
225 if (!mdev->irq_info.mic_msi_map) { in mic_setup_msix()
231 "%d MSIx irqs setup\n", mdev->irq_info.num_vectors); in mic_setup_msix()
236 kfree(mdev->irq_info.msix_entries); in mic_setup_msix()
238 mdev->irq_info.num_vectors = 0; in mic_setup_msix()
252 mdev->irq_info.cb_list = kmalloc_array(MIC_NUM_OFFSETS, in mic_setup_callbacks()
253 sizeof(*mdev->irq_info.cb_list), in mic_setup_callbacks()
255 if (!mdev->irq_info.cb_list) in mic_setup_callbacks()
259 INIT_LIST_HEAD(&mdev->irq_info.cb_list[i]); in mic_setup_callbacks()
260 ida_init(&mdev->irq_info.cb_ida); in mic_setup_callbacks()
261 spin_lock_init(&mdev->irq_info.mic_intr_lock); in mic_setup_callbacks()
262 spin_lock_init(&mdev->irq_info.mic_thread_lock); in mic_setup_callbacks()
279 spin_lock(&mdev->irq_info.mic_thread_lock); in mic_release_callbacks()
280 spin_lock_irqsave(&mdev->irq_info.mic_intr_lock, flags); in mic_release_callbacks()
282 if (list_empty(&mdev->irq_info.cb_list[i])) in mic_release_callbacks()
285 list_for_each_safe(pos, tmp, &mdev->irq_info.cb_list[i]) { in mic_release_callbacks()
288 ida_simple_remove(&mdev->irq_info.cb_ida, in mic_release_callbacks()
293 spin_unlock_irqrestore(&mdev->irq_info.mic_intr_lock, flags); in mic_release_callbacks()
294 spin_unlock(&mdev->irq_info.mic_thread_lock); in mic_release_callbacks()
295 ida_destroy(&mdev->irq_info.cb_ida); in mic_release_callbacks()
296 kfree(mdev->irq_info.cb_list); in mic_release_callbacks()
317 mdev->irq_info.num_vectors = 1; in mic_setup_msi()
318 mdev->irq_info.mic_msi_map = kzalloc((sizeof(u32) * in mic_setup_msi()
319 mdev->irq_info.num_vectors), GFP_KERNEL); in mic_setup_msi()
321 if (!mdev->irq_info.mic_msi_map) { in mic_setup_msi()
339 dev_dbg(&pdev->dev, "%d MSI irqs setup\n", mdev->irq_info.num_vectors); in mic_setup_msi()
344 kfree(mdev->irq_info.mic_msi_map); in mic_setup_msi()
347 mdev->irq_info.num_vectors = 0; in mic_setup_msi()
397 next_db = mdev->irq_info.next_avail_src % in mic_next_db()
399 mdev->irq_info.next_avail_src++; in mic_next_db()
454 if (mdev->irq_info.num_vectors > 1) { in mic_request_threaded_irq()
471 mdev->irq_info.mic_msi_map[entry] |= BIT(offset); in mic_request_threaded_irq()
489 mdev->irq_info.mic_msi_map[entry] |= (1 << offset); in mic_request_threaded_irq()
524 if (mdev->irq_info.num_vectors > 1) { in mic_free_irq()
525 if (entry >= mdev->irq_info.num_vectors) { in mic_free_irq()
528 entry, mdev->irq_info.num_vectors); in mic_free_irq()
531 irq = mdev->irq_info.msix_entries[entry].vector; in mic_free_irq()
533 mdev->irq_info.mic_msi_map[entry] &= ~(BIT(offset)); in mic_free_irq()
546 mdev->irq_info.mic_msi_map[entry] &= ~(BIT(src_id)); in mic_free_irq()
598 if (mdev->irq_info.num_vectors > 1) { in mic_free_interrupts()
599 for (i = 0; i < mdev->irq_info.num_vectors; i++) { in mic_free_interrupts()
600 if (mdev->irq_info.mic_msi_map[i]) in mic_free_interrupts()
602 mdev->irq_info.msix_entries[i].vector); in mic_free_interrupts()
604 kfree(mdev->irq_info.mic_msi_map); in mic_free_interrupts()
605 kfree(mdev->irq_info.msix_entries); in mic_free_interrupts()
610 kfree(mdev->irq_info.mic_msi_map); in mic_free_interrupts()
638 for (entry = 0; entry < mdev->irq_info.num_vectors; entry++) { in mic_intr_restore()
640 if (mdev->irq_info.mic_msi_map[entry] & BIT(offset)) in mic_intr_restore()