Lines Matching refs:fault

66 struct fault {
426 static void handle_fault_error(struct fault *fault)
430 if (!fault->dev_state->inv_ppr_cb) {
431 set_pri_tag_status(fault->state, fault->tag, PPR_INVALID);
435 status = fault->dev_state->inv_ppr_cb(fault->dev_state->pdev,
436 fault->pasid,
437 fault->address,
438 fault->flags);
441 set_pri_tag_status(fault->state, fault->tag, PPR_SUCCESS);
444 set_pri_tag_status(fault->state, fault->tag, PPR_INVALID);
447 set_pri_tag_status(fault->state, fault->tag, PPR_FAILURE);
454 static bool access_error(struct vm_area_struct *vma, struct fault *fault)
458 if (fault->flags & PPR_FAULT_EXEC)
461 if (fault->flags & PPR_FAULT_READ)
464 if (fault->flags & PPR_FAULT_WRITE)
472 struct fault *fault = container_of(work, struct fault, work);
479 mm = fault->state->mm;
480 address = fault->address;
482 if (fault->flags & PPR_FAULT_USER)
484 if (fault->flags & PPR_FAULT_WRITE)
495 if (access_error(vma, fault))
503 /* failed to service fault */
504 handle_fault_error(fault);
506 finish_pri_tag(fault->dev_state, fault->state, fault->tag);
508 put_pasid_state(fault->state);
510 kfree(fault);
520 struct fault *fault;
562 fault = kzalloc(sizeof(*fault), GFP_ATOMIC);
563 if (fault == NULL) {
564 /* We are OOM - send success and let the device re-fault */
569 fault->dev_state = dev_state;
570 fault->address = iommu_fault->address;
571 fault->state = pasid_state;
572 fault->tag = tag;
573 fault->finish = finish;
574 fault->pasid = iommu_fault->pasid;
575 fault->flags = iommu_fault->flags;
576 INIT_WORK(&fault->work, do_fault);
578 queue_work(iommu_wq, &fault->work);