• Home
  • Raw
  • Download

Lines Matching full:fault

78 struct fault {  struct
463 static void handle_fault_error(struct fault *fault) in handle_fault_error() argument
467 if (!fault->dev_state->inv_ppr_cb) { in handle_fault_error()
468 set_pri_tag_status(fault->state, fault->tag, PPR_INVALID); in handle_fault_error()
472 status = fault->dev_state->inv_ppr_cb(fault->dev_state->pdev, in handle_fault_error()
473 fault->pasid, in handle_fault_error()
474 fault->address, in handle_fault_error()
475 fault->flags); in handle_fault_error()
478 set_pri_tag_status(fault->state, fault->tag, PPR_SUCCESS); in handle_fault_error()
481 set_pri_tag_status(fault->state, fault->tag, PPR_INVALID); in handle_fault_error()
484 set_pri_tag_status(fault->state, fault->tag, PPR_FAILURE); in handle_fault_error()
491 static bool access_error(struct vm_area_struct *vma, struct fault *fault) in access_error() argument
495 if (fault->flags & PPR_FAULT_EXEC) in access_error()
498 if (fault->flags & PPR_FAULT_READ) in access_error()
501 if (fault->flags & PPR_FAULT_WRITE) in access_error()
509 struct fault *fault = container_of(work, struct fault, work); in do_fault() local
516 mm = fault->state->mm; in do_fault()
517 address = fault->address; in do_fault()
519 if (fault->flags & PPR_FAULT_USER) in do_fault()
521 if (fault->flags & PPR_FAULT_WRITE) in do_fault()
532 if (access_error(vma, fault)) in do_fault()
540 /* failed to service fault */ in do_fault()
541 handle_fault_error(fault); in do_fault()
543 finish_pri_tag(fault->dev_state, fault->state, fault->tag); in do_fault()
545 put_pasid_state(fault->state); in do_fault()
547 kfree(fault); in do_fault()
556 struct fault *fault; in ppr_notifier() local
601 fault = kzalloc(sizeof(*fault), GFP_ATOMIC); in ppr_notifier()
602 if (fault == NULL) { in ppr_notifier()
603 /* We are OOM - send success and let the device re-fault */ in ppr_notifier()
608 fault->dev_state = dev_state; in ppr_notifier()
609 fault->address = iommu_fault->address; in ppr_notifier()
610 fault->state = pasid_state; in ppr_notifier()
611 fault->tag = tag; in ppr_notifier()
612 fault->finish = finish; in ppr_notifier()
613 fault->pasid = iommu_fault->pasid; in ppr_notifier()
614 fault->flags = iommu_fault->flags; in ppr_notifier()
615 INIT_WORK(&fault->work, do_fault); in ppr_notifier()
617 queue_work(iommu_wq, &fault->work); in ppr_notifier()