Lines Matching refs:idxd
29 struct idxd_device *idxd; member
34 struct idxd_device *idxd = container_of(work, struct idxd_device, work); in idxd_device_reinit() local
35 struct device *dev = &idxd->pdev->dev; in idxd_device_reinit()
38 idxd_device_reset(idxd); in idxd_device_reinit()
39 rc = idxd_device_config(idxd); in idxd_device_reinit()
43 rc = idxd_device_enable(idxd); in idxd_device_reinit()
47 for (i = 0; i < idxd->max_wqs; i++) { in idxd_device_reinit()
48 if (test_bit(i, idxd->wq_enable_map)) { in idxd_device_reinit()
49 struct idxd_wq *wq = idxd->wqs[i]; in idxd_device_reinit()
53 clear_bit(i, idxd->wq_enable_map); in idxd_device_reinit()
63 idxd_device_clear_state(idxd); in idxd_device_reinit()
74 struct idxd_device *idxd = wq->idxd; in idxd_int_handle_revoke_drain() local
75 struct device *dev = &idxd->pdev->dev; in idxd_int_handle_revoke_drain()
134 struct idxd_device *idxd = revoke->idxd; in idxd_int_handle_revoke() local
135 struct pci_dev *pdev = idxd->pdev; in idxd_int_handle_revoke()
139 if (!idxd->request_int_handles) { in idxd_int_handle_revoke()
154 for (i = 1; i < idxd->irq_cnt; i++) { in idxd_int_handle_revoke()
155 struct idxd_irq_entry *ie = idxd_get_ie(idxd, i); in idxd_int_handle_revoke()
161 rc = idxd_device_request_int_handle(idxd, i, &new_handle, IDXD_IRQ_MSIX); in idxd_int_handle_revoke()
226 struct idxd_device *idxd = wq->idxd; in idxd_evl_fault_work() local
227 struct device *dev = &idxd->pdev->dev; in idxd_evl_fault_work()
228 struct idxd_evl *evl = idxd->evl; in idxd_evl_fault_work()
230 void *cr = (void *)entry_head + idxd->data->evl_cr_off; in idxd_evl_fault_work()
231 int cr_size = idxd->data->compl_size; in idxd_evl_fault_work()
232 u8 *status = (u8 *)cr + idxd->data->cr_status_off; in idxd_evl_fault_work()
233 u8 *result = (u8 *)cr + idxd->data->cr_result_off; in idxd_evl_fault_work()
308 kmem_cache_free(idxd->evl_cache, fault); in idxd_evl_fault_work()
311 static void process_evl_entry(struct idxd_device *idxd, in process_evl_entry() argument
314 struct device *dev = &idxd->pdev->dev; in process_evl_entry()
315 struct idxd_evl *evl = idxd->evl; in process_evl_entry()
326 int ent_size = evl_ent_size(idxd); in process_evl_entry()
334 fault = kmem_cache_alloc(idxd->evl_cache, GFP_ATOMIC); in process_evl_entry()
336 struct idxd_wq *wq = idxd->wqs[entry_head->wq_idx]; in process_evl_entry()
354 static void process_evl_entries(struct idxd_device *idxd) in process_evl_entries() argument
358 struct idxd_evl *evl = idxd->evl; in process_evl_entries()
360 unsigned int ent_size = evl_ent_size(idxd); in process_evl_entries()
369 idxd->reg_base + IDXD_EVLSTATUS_OFFSET + sizeof(u32)); in process_evl_entries()
370 evl_status.bits = ioread64(idxd->reg_base + IDXD_EVLSTATUS_OFFSET); in process_evl_entries()
373 size = idxd->evl->size; in process_evl_entries()
377 process_evl_entry(idxd, entry_head, h); in process_evl_entries()
382 iowrite32(evl_status.bits_lower32, idxd->reg_base + IDXD_EVLSTATUS_OFFSET); in process_evl_entries()
389 struct idxd_device *idxd = ie_to_idxd(irq_entry); in idxd_misc_thread() local
390 struct device *dev = &idxd->pdev->dev; in idxd_misc_thread()
397 cause = ioread32(idxd->reg_base + IDXD_INTCAUSE_OFFSET); in idxd_misc_thread()
401 iowrite32(cause, idxd->reg_base + IDXD_INTCAUSE_OFFSET); in idxd_misc_thread()
407 spin_lock(&idxd->dev_lock); in idxd_misc_thread()
409 idxd->sw_err.bits[i] = ioread64(idxd->reg_base + in idxd_misc_thread()
412 iowrite64(idxd->sw_err.bits[0] & IDXD_SWERR_ACK, in idxd_misc_thread()
413 idxd->reg_base + IDXD_SWERR_OFFSET); in idxd_misc_thread()
415 if (idxd->sw_err.valid && idxd->sw_err.wq_idx_valid) { in idxd_misc_thread()
416 int id = idxd->sw_err.wq_idx; in idxd_misc_thread()
417 struct idxd_wq *wq = idxd->wqs[id]; in idxd_misc_thread()
424 for (i = 0; i < idxd->max_wqs; i++) { in idxd_misc_thread()
425 struct idxd_wq *wq = idxd->wqs[i]; in idxd_misc_thread()
432 spin_unlock(&idxd->dev_lock); in idxd_misc_thread()
437 i, idxd->sw_err.bits[i]); in idxd_misc_thread()
448 revoke->idxd = idxd; in idxd_misc_thread()
450 queue_work(idxd->wq, &revoke->work); in idxd_misc_thread()
454 idxd_wqs_quiesce(idxd); in idxd_misc_thread()
460 complete(idxd->cmd_done); in idxd_misc_thread()
470 perfmon_counter_overflow(idxd); in idxd_misc_thread()
475 process_evl_entries(idxd); in idxd_misc_thread()
487 gensts.bits = ioread32(idxd->reg_base + IDXD_GENSTATS_OFFSET); in idxd_misc_thread()
489 idxd->state = IDXD_DEV_HALTED; in idxd_misc_thread()
496 INIT_WORK(&idxd->work, idxd_device_reinit); in idxd_misc_thread()
497 queue_work(idxd->wq, &idxd->work); in idxd_misc_thread()
499 idxd->state = IDXD_DEV_HALTED; in idxd_misc_thread()
500 idxd_wqs_quiesce(idxd); in idxd_misc_thread()
501 idxd_wqs_unmap_portal(idxd); in idxd_misc_thread()
502 idxd_device_clear_state(idxd); in idxd_misc_thread()
503 dev_err(&idxd->pdev->dev, in idxd_misc_thread()
524 dev_dbg(&wq->idxd->pdev->dev, "Failed to resubmit desc %d to wq %d.\n", in idxd_int_handle_resubmit_work()
546 struct idxd_device *idxd = wq->idxd; in idxd_queue_int_handle_resubmit() local
555 queue_work(idxd->wq, &irw->work); in idxd_queue_int_handle_resubmit()