Lines Matching refs:node
53 int kfd_interrupt_init(struct kfd_node *node)
57 r = kfifo_alloc(&node->ih_fifo,
58 KFD_IH_NUM_ENTRIES * node->kfd->device_info.ih_ring_entry_size,
61 dev_err(node->adev->dev, "Failed to allocate IH fifo\n");
65 node->ih_wq = alloc_workqueue("KFD IH", WQ_HIGHPRI, 1);
66 if (unlikely(!node->ih_wq)) {
67 kfifo_free(&node->ih_fifo);
68 dev_err(node->adev->dev, "Failed to allocate KFD IH workqueue\n");
71 spin_lock_init(&node->interrupt_lock);
73 INIT_WORK(&node->interrupt_work, interrupt_wq);
75 node->interrupts_active = true;
87 void kfd_interrupt_exit(struct kfd_node *node)
96 spin_lock_irqsave(&node->interrupt_lock, flags);
97 node->interrupts_active = false;
98 spin_unlock_irqrestore(&node->interrupt_lock, flags);
105 flush_workqueue(node->ih_wq);
107 destroy_workqueue(node->ih_wq);
109 kfifo_free(&node->ih_fifo);
115 bool enqueue_ih_ring_entry(struct kfd_node *node, const void *ih_ring_entry)
119 count = kfifo_in(&node->ih_fifo, ih_ring_entry,
120 node->kfd->device_info.ih_ring_entry_size);
121 if (count != node->kfd->device_info.ih_ring_entry_size) {
122 dev_dbg_ratelimited(node->adev->dev,
134 static bool dequeue_ih_ring_entry(struct kfd_node *node, void *ih_ring_entry)
138 count = kfifo_out(&node->ih_fifo, ih_ring_entry,
139 node->kfd->device_info.ih_ring_entry_size);
141 WARN_ON(count && count != node->kfd->device_info.ih_ring_entry_size);
143 return count == node->kfd->device_info.ih_ring_entry_size;