From: Joerg Roedel <[email protected]>

Get rid of the three error paths that look the same and move
error handling to a single place.

Signed-off-by: Joerg Roedel <[email protected]>
---
 drivers/iommu/amd_iommu_v2.c | 24 ++++++++----------------
 1 file changed, 8 insertions(+), 16 deletions(-)

diff --git a/drivers/iommu/amd_iommu_v2.c b/drivers/iommu/amd_iommu_v2.c
index afa8f9c..cd1a222 100644
--- a/drivers/iommu/amd_iommu_v2.c
+++ b/drivers/iommu/amd_iommu_v2.c
@@ -514,10 +514,10 @@ static void do_fault(struct work_struct *work)
 {
        struct fault *fault = container_of(work, struct fault, work);
        struct vm_area_struct *vma;
+       int ret = VM_FAULT_ERROR;
        unsigned int flags = 0;
        struct mm_struct *mm;
        u64 address;
-       int ret;
 
        mm = fault->state->mm;
        address = fault->address;
@@ -529,31 +529,23 @@ static void do_fault(struct work_struct *work)
 
        down_read(&mm->mmap_sem);
        vma = find_extend_vma(mm, address);
-       if (!vma || address < vma->vm_start) {
+       if (!vma || address < vma->vm_start)
                /* failed to get a vma in the right range */
-               up_read(&mm->mmap_sem);
-               handle_fault_error(fault);
                goto out;
-       }
 
        /* Check if we have the right permissions on the vma */
-       if (access_error(vma, fault)) {
-               up_read(&mm->mmap_sem);
-               handle_fault_error(fault);
+       if (access_error(vma, fault))
                goto out;
-       }
 
        ret = handle_mm_fault(mm, vma, address, flags);
-       if (ret & VM_FAULT_ERROR) {
-               /* failed to service fault */
-               up_read(&mm->mmap_sem);
-               handle_fault_error(fault);
-               goto out;
-       }
 
+out:
        up_read(&mm->mmap_sem);
 
-out:
+       if (ret & VM_FAULT_ERROR)
+               /* failed to service fault */
+               handle_fault_error(fault);
+
        finish_pri_tag(fault->dev_state, fault->state, fault->tag);
 
        put_pasid_state(fault->state);
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to