Lines Matching refs:fault
67 struct fault {
428 static void handle_fault_error(struct fault *fault)
432 if (!fault->dev_state->inv_ppr_cb) {
433 set_pri_tag_status(fault->state, fault->tag, PPR_INVALID);
437 status = fault->dev_state->inv_ppr_cb(fault->dev_state->pdev,
438 fault->pasid,
439 fault->address,
440 fault->flags);
443 set_pri_tag_status(fault->state, fault->tag, PPR_SUCCESS);
446 set_pri_tag_status(fault->state, fault->tag, PPR_INVALID);
449 set_pri_tag_status(fault->state, fault->tag, PPR_FAILURE);
456 static bool access_error(struct vm_area_struct *vma, struct fault *fault)
460 if (fault->flags & PPR_FAULT_EXEC)
463 if (fault->flags & PPR_FAULT_READ)
466 if (fault->flags & PPR_FAULT_WRITE)
474 struct fault *fault = container_of(work, struct fault, work);
481 mm = fault->state->mm;
482 address = fault->address;
484 if (fault->flags & PPR_FAULT_USER)
486 if (fault->flags & PPR_FAULT_WRITE)
497 if (access_error(vma, fault))
505 /* failed to service fault */
506 handle_fault_error(fault);
508 finish_pri_tag(fault->dev_state, fault->state, fault->tag);
510 put_pasid_state(fault->state);
512 kfree(fault);
522 struct fault *fault;
565 fault = kzalloc(sizeof(*fault), GFP_ATOMIC);
566 if (fault == NULL) {
567 /* We are OOM - send success and let the device re-fault */
572 fault->dev_state = dev_state;
573 fault->address = iommu_fault->address;
574 fault->state = pasid_state;
575 fault->tag = tag;
576 fault->finish = finish;
577 fault->pasid = iommu_fault->pasid;
578 fault->flags = iommu_fault->flags;
579 INIT_WORK(&fault->work, do_fault);
581 queue_work(iommu_wq, &fault->work);