In preparation to call mmu_hw_do_operation with the as_lock already held,
Add a mmu_hw_do_operation_locked function.

Fixes: 7282f7645d06 ("drm/panfrost: Implement per FD address spaces")
Cc: Tomeu Vizoso <tomeu.viz...@collabora.com>
Cc: Steven Price <steven.pr...@arm.com>
Cc: Alyssa Rosenzweig <alyssa.rosenzw...@collabora.com>
Cc: David Airlie <airl...@linux.ie>
Cc: Daniel Vetter <dan...@ffwll.ch>
Signed-off-by: Rob Herring <r...@kernel.org>
---
v3:
 - new patch

 drivers/gpu/drm/panfrost/panfrost_mmu.c | 26 ++++++++++++-------------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.c 
b/drivers/gpu/drm/panfrost/panfrost_mmu.c
index 2204e60f7808..3407b00d0a3a 100644
--- a/drivers/gpu/drm/panfrost/panfrost_mmu.c
+++ b/drivers/gpu/drm/panfrost/panfrost_mmu.c
@@ -80,19 +80,11 @@ static void lock_region(struct panfrost_device *pfdev, u32 
as_nr,
 }


-static int mmu_hw_do_operation(struct panfrost_device *pfdev,
-                              struct panfrost_mmu *mmu,
-                              u64 iova, size_t size, u32 op)
+static int mmu_hw_do_operation_locked(struct panfrost_device *pfdev, int as_nr,
+                                     u64 iova, size_t size, u32 op)
 {
-       int ret, as_nr;
-
-       spin_lock(&pfdev->as_lock);
-       as_nr = mmu->as;
-
-       if (as_nr < 0) {
-               spin_unlock(&pfdev->as_lock);
+       if (as_nr < 0)
                return 0;
-       }

        if (op != AS_COMMAND_UNLOCK)
                lock_region(pfdev, as_nr, iova, size);
@@ -101,10 +93,18 @@ static int mmu_hw_do_operation(struct panfrost_device 
*pfdev,
        write_cmd(pfdev, as_nr, op);

        /* Wait for the flush to complete */
-       ret = wait_ready(pfdev, as_nr);
+       return wait_ready(pfdev, as_nr);
+}

-       spin_unlock(&pfdev->as_lock);
+static int mmu_hw_do_operation(struct panfrost_device *pfdev,
+                              struct panfrost_mmu *mmu,
+                              u64 iova, size_t size, u32 op)
+{
+       int ret;

+       spin_lock(&pfdev->as_lock);
+       ret = mmu_hw_do_operation_locked(pfdev, mmu->as, iova, size, op);
+       spin_unlock(&pfdev->as_lock);
        return ret;
 }

--
2.20.1
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to