Lines Matching refs:irq_info
31 struct mic_irq_info *irq_info = &mdev->irq_info; in mic_thread_fn() local
37 spin_lock(&irq_info->mic_thread_lock); in mic_thread_fn()
40 if (test_and_clear_bit(i, &irq_info->mask)) { in mic_thread_fn()
41 list_for_each_entry(intr_cb, &irq_info->cb_list[i], in mic_thread_fn()
47 spin_unlock(&irq_info->mic_thread_lock); in mic_thread_fn()
58 struct mic_irq_info *irq_info = &mdev->irq_info; in mic_interrupt() local
69 spin_lock(&irq_info->mic_intr_lock); in mic_interrupt()
73 list_for_each_entry(intr_cb, &irq_info->cb_list[i], in mic_interrupt()
78 set_bit(i, &irq_info->mask); in mic_interrupt()
80 spin_unlock(&irq_info->mic_intr_lock); in mic_interrupt()
100 struct mic_irq_info *info = &mdev->irq_info; in mic_get_available_vector()
136 intr_cb->cb_id = ida_simple_get(&mdev->irq_info.cb_ida, in mic_register_intr_callback()
143 spin_lock(&mdev->irq_info.mic_thread_lock); in mic_register_intr_callback()
144 spin_lock_irqsave(&mdev->irq_info.mic_intr_lock, flags); in mic_register_intr_callback()
145 list_add_tail(&intr_cb->list, &mdev->irq_info.cb_list[idx]); in mic_register_intr_callback()
146 spin_unlock_irqrestore(&mdev->irq_info.mic_intr_lock, flags); in mic_register_intr_callback()
147 spin_unlock(&mdev->irq_info.mic_thread_lock); in mic_register_intr_callback()
171 spin_lock(&mdev->irq_info.mic_thread_lock); in mic_unregister_intr_callback()
172 spin_lock_irqsave(&mdev->irq_info.mic_intr_lock, flags); in mic_unregister_intr_callback()
174 list_for_each_safe(pos, tmp, &mdev->irq_info.cb_list[i]) { in mic_unregister_intr_callback()
178 ida_simple_remove(&mdev->irq_info.cb_ida, in mic_unregister_intr_callback()
182 &mdev->irq_info.mic_intr_lock, flags); in mic_unregister_intr_callback()
183 spin_unlock(&mdev->irq_info.mic_thread_lock); in mic_unregister_intr_callback()
188 spin_unlock_irqrestore(&mdev->irq_info.mic_intr_lock, flags); in mic_unregister_intr_callback()
189 spin_unlock(&mdev->irq_info.mic_thread_lock); in mic_unregister_intr_callback()
204 int entry_size = sizeof(*mdev->irq_info.msix_entries); in mic_setup_msix()
206 mdev->irq_info.msix_entries = kmalloc_array(MIC_MIN_MSIX, in mic_setup_msix()
208 if (!mdev->irq_info.msix_entries) { in mic_setup_msix()
214 mdev->irq_info.msix_entries[i].entry = i; in mic_setup_msix()
216 rc = pci_enable_msix_exact(pdev, mdev->irq_info.msix_entries, in mic_setup_msix()
223 mdev->irq_info.num_vectors = MIC_MIN_MSIX; in mic_setup_msix()
224 mdev->irq_info.mic_msi_map = kzalloc((sizeof(u32) * in mic_setup_msix()
225 mdev->irq_info.num_vectors), GFP_KERNEL); in mic_setup_msix()
227 if (!mdev->irq_info.mic_msi_map) { in mic_setup_msix()
233 "%d MSIx irqs setup\n", mdev->irq_info.num_vectors); in mic_setup_msix()
238 kfree(mdev->irq_info.msix_entries); in mic_setup_msix()
240 mdev->irq_info.num_vectors = 0; in mic_setup_msix()
254 mdev->irq_info.cb_list = kmalloc_array(MIC_NUM_OFFSETS, in mic_setup_callbacks()
255 sizeof(*mdev->irq_info.cb_list), in mic_setup_callbacks()
257 if (!mdev->irq_info.cb_list) in mic_setup_callbacks()
261 INIT_LIST_HEAD(&mdev->irq_info.cb_list[i]); in mic_setup_callbacks()
262 ida_init(&mdev->irq_info.cb_ida); in mic_setup_callbacks()
263 spin_lock_init(&mdev->irq_info.mic_intr_lock); in mic_setup_callbacks()
264 spin_lock_init(&mdev->irq_info.mic_thread_lock); in mic_setup_callbacks()
281 spin_lock(&mdev->irq_info.mic_thread_lock); in mic_release_callbacks()
282 spin_lock_irqsave(&mdev->irq_info.mic_intr_lock, flags); in mic_release_callbacks()
285 if (list_empty(&mdev->irq_info.cb_list[i])) in mic_release_callbacks()
288 list_for_each_safe(pos, tmp, &mdev->irq_info.cb_list[i]) { in mic_release_callbacks()
291 ida_simple_remove(&mdev->irq_info.cb_ida, in mic_release_callbacks()
296 spin_unlock_irqrestore(&mdev->irq_info.mic_intr_lock, flags); in mic_release_callbacks()
297 spin_unlock(&mdev->irq_info.mic_thread_lock); in mic_release_callbacks()
298 ida_destroy(&mdev->irq_info.cb_ida); in mic_release_callbacks()
299 kfree(mdev->irq_info.cb_list); in mic_release_callbacks()
320 mdev->irq_info.num_vectors = 1; in mic_setup_msi()
321 mdev->irq_info.mic_msi_map = kzalloc((sizeof(u32) * in mic_setup_msi()
322 mdev->irq_info.num_vectors), GFP_KERNEL); in mic_setup_msi()
324 if (!mdev->irq_info.mic_msi_map) { in mic_setup_msi()
342 dev_dbg(&pdev->dev, "%d MSI irqs setup\n", mdev->irq_info.num_vectors); in mic_setup_msi()
347 kfree(mdev->irq_info.mic_msi_map); in mic_setup_msi()
350 mdev->irq_info.num_vectors = 0; in mic_setup_msi()
400 next_db = mdev->irq_info.next_avail_src % in mic_next_db()
402 mdev->irq_info.next_avail_src++; in mic_next_db()
458 if (mdev->irq_info.num_vectors > 1) { in mic_request_threaded_irq()
475 mdev->irq_info.mic_msi_map[entry] |= BIT(offset); in mic_request_threaded_irq()
493 mdev->irq_info.mic_msi_map[entry] |= (1 << offset); in mic_request_threaded_irq()
529 if (mdev->irq_info.num_vectors > 1) { in mic_free_irq()
530 if (entry >= mdev->irq_info.num_vectors) { in mic_free_irq()
533 entry, mdev->irq_info.num_vectors); in mic_free_irq()
536 irq = mdev->irq_info.msix_entries[entry].vector; in mic_free_irq()
538 mdev->irq_info.mic_msi_map[entry] &= ~(BIT(offset)); in mic_free_irq()
551 mdev->irq_info.mic_msi_map[entry] &= ~(BIT(src_id)); in mic_free_irq()
603 if (mdev->irq_info.num_vectors > 1) { in mic_free_interrupts()
604 for (i = 0; i < mdev->irq_info.num_vectors; i++) { in mic_free_interrupts()
605 if (mdev->irq_info.mic_msi_map[i]) in mic_free_interrupts()
607 mdev->irq_info.msix_entries[i].vector); in mic_free_interrupts()
609 kfree(mdev->irq_info.mic_msi_map); in mic_free_interrupts()
610 kfree(mdev->irq_info.msix_entries); in mic_free_interrupts()
615 kfree(mdev->irq_info.mic_msi_map); in mic_free_interrupts()
644 for (entry = 0; entry < mdev->irq_info.num_vectors; entry++) { in mic_intr_restore()
646 if (mdev->irq_info.mic_msi_map[entry] & BIT(offset)) in mic_intr_restore()