Since i915_gem_obj_ggtt_pin() is an idiom breaking curry function for
i915_gem_object_ggtt_pin(), spare us the confustion and remove it.
Removing it now simplifies later patches to change the i915_vma_pin()
(and friends) interface.

Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk>
---
 drivers/gpu/drm/i915/i915_drv.h              | 35 ++++++++-------------
 drivers/gpu/drm/i915/i915_gem.c              | 46 +++++++++++++--------------
 drivers/gpu/drm/i915/i915_gem_context.c      |  5 ++-
 drivers/gpu/drm/i915/i915_gem_execbuffer.c   | 10 +++---
 drivers/gpu/drm/i915/i915_gem_gtt.h          | 47 +++++++++++++++-------------
 drivers/gpu/drm/i915/i915_gem_render_state.c |  2 +-
 drivers/gpu/drm/i915/i915_guc_submission.c   |  4 +--
 drivers/gpu/drm/i915/intel_guc_loader.c      |  2 +-
 drivers/gpu/drm/i915/intel_lrc.c             |  8 +++--
 drivers/gpu/drm/i915/intel_overlay.c         |  3 +-
 drivers/gpu/drm/i915/intel_ringbuffer.c      | 16 +++++-----
 11 files changed, 89 insertions(+), 89 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index f537d8fc5e0f..861d132b2fe4 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2934,32 +2934,32 @@ void i915_gem_free_object(struct drm_gem_object *obj);
 int __must_check
 i915_vma_pin(struct i915_vma *vma, u64 size, u64 alignment, u64 flags);
 /* Flags used by pin/bind&friends. */
-#define PIN_MAPPABLE   (1<<0)
-#define PIN_NONBLOCK   (1<<1)
-#define PIN_GLOBAL     (1<<2)
-#define PIN_OFFSET_BIAS        (1<<3)
-#define PIN_USER       (1<<4)
-#define PIN_UPDATE     (1<<5)
-#define PIN_ZONE_4G    (1<<6)
-#define PIN_HIGH       (1<<7)
-#define PIN_OFFSET_FIXED       (1<<8)
+#define PIN_GLOBAL     (1<<0)
+#define PIN_USER       (1<<1)
+#define PIN_UPDATE     (1<<2)
+#define PIN_MAPPABLE   (1<<3)
+#define PIN_ZONE_4G    (1<<4)
+#define PIN_NONBLOCK   (1<<5)
+#define PIN_HIGH       (1<<6)
+#define PIN_OFFSET_BIAS        (1<<7)
+#define PIN_OFFSET_FIXED (1<<8)
 #define PIN_OFFSET_MASK (~4095)
 
 static inline void __i915_vma_pin(struct i915_vma *vma)
 {
        GEM_BUG_ON(vma->pin_count == DRM_I915_GEM_OBJECT_MAX_PIN_COUNT);
-       vma->pin_count++;
+       vma->flags++;
 }
 
 static inline bool i915_vma_is_pinned(struct i915_vma *vma)
 {
-       return vma->pin_count;
+       return vma->flags & DRM_I915_GEM_OBJECT_MAX_PIN_COUNT;
 }
 
 static inline void __i915_vma_unpin(struct i915_vma *vma)
 {
        GEM_BUG_ON(!i915_vma_is_pinned(vma));
-       vma->pin_count--;
+       vma->flags--;
 }
 
 static inline void i915_vma_unpin(struct i915_vma *vma)
@@ -2972,7 +2972,7 @@ int __must_check
 i915_gem_object_ggtt_pin(struct drm_i915_gem_object *obj,
                         const struct i915_ggtt_view *view,
                         uint64_t size,
-                        uint32_t alignment,
+                        uint64_t alignment,
                         uint64_t flags);
 
 int i915_vma_bind(struct i915_vma *vma, enum i915_cache_level cache_level,
@@ -3223,15 +3223,6 @@ static inline bool i915_gem_obj_ggtt_bound(struct 
drm_i915_gem_object *obj)
 unsigned long
 i915_gem_obj_ggtt_size(struct drm_i915_gem_object *obj);
 
-static inline int __must_check
-i915_gem_obj_ggtt_pin(struct drm_i915_gem_object *obj,
-                     uint32_t alignment,
-                     unsigned flags)
-{
-       return i915_gem_object_ggtt_pin(obj, &i915_ggtt_view_normal,
-                                       0, alignment, flags);
-}
-
 void i915_gem_object_ggtt_unpin_view(struct drm_i915_gem_object *obj,
                                     const struct i915_ggtt_view *view);
 static inline void
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 71a32a9f9858..53776a071ce7 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -772,7 +772,9 @@ i915_gem_gtt_pwrite_fast(struct drm_device *dev,
        char __user *user_data;
        int page_offset, page_length, ret;
 
-       ret = i915_gem_obj_ggtt_pin(obj, 0, PIN_MAPPABLE | PIN_NONBLOCK);
+       ret = i915_gem_object_ggtt_pin(obj, NULL,
+                                      0, 0,
+                                      PIN_MAPPABLE | PIN_NONBLOCK);
        if (ret)
                goto out;
 
@@ -3408,32 +3410,35 @@ void __i915_vma_set_map_and_fenceable(struct i915_vma 
*vma)
 int
 i915_vma_pin(struct i915_vma *vma, u64 size, u64 alignment, u64 flags)
 {
-       unsigned bound = vma->bound;
+       unsigned bound;
        int ret;
 
        GEM_BUG_ON((flags & (PIN_GLOBAL | PIN_USER)) == 0);
        GEM_BUG_ON((flags & PIN_GLOBAL) && !vma->is_ggtt);
 
-       if (WARN_ON(vma->pin_count == DRM_I915_GEM_OBJECT_MAX_PIN_COUNT))
-               return -EBUSY;
-
        /* Pin early to prevent the shrinker/eviction logic from destroying
         * our vma as we insert and bind.
         */
-       __i915_vma_pin(vma);
+       bound = vma->flags++;
+       if (WARN_ON((bound & 0xf) == (DRM_I915_GEM_OBJECT_MAX_PIN_COUNT-1))) {
+               ret = -EBUSY;
+               goto err;
+       }
 
-       if (!bound) {
+       if ((bound & 0xff) == 0) {
                ret = i915_vma_insert(vma, size, alignment, flags);
                if (ret)
                        goto err;
        }
 
-       ret = i915_vma_bind(vma, vma->obj->cache_level, flags);
-       if (ret)
-               goto err;
+       if (~(bound >> 4) & (flags & (GLOBAL_BIND | LOCAL_BIND))) {
+               ret = i915_vma_bind(vma, vma->obj->cache_level, flags);
+               if (ret)
+                       goto err;
 
-       if ((bound ^ vma->bound) & GLOBAL_BIND)
-               __i915_vma_set_map_and_fenceable(vma);
+               if ((bound ^ vma->flags) & (GLOBAL_BIND << 4))
+                       __i915_vma_set_map_and_fenceable(vma);
+       }
 
        GEM_BUG_ON(i915_vma_misplaced(vma, size, alignment, flags));
        return 0;
@@ -3447,13 +3452,14 @@ int
 i915_gem_object_ggtt_pin(struct drm_i915_gem_object *obj,
                         const struct i915_ggtt_view *view,
                         uint64_t size,
-                        uint32_t alignment,
+                        uint64_t alignment,
                         uint64_t flags)
 {
        struct i915_vma *vma;
        int ret;
 
-       BUG_ON(!view);
+       if (view == NULL)
+               view = &i915_ggtt_view_normal;
 
        vma = i915_gem_obj_lookup_or_create_ggtt_vma(obj, view);
        if (IS_ERR(vma))
@@ -3465,11 +3471,11 @@ i915_gem_object_ggtt_pin(struct drm_i915_gem_object 
*obj,
 
                WARN(vma->pin_count,
                     "bo is already pinned in ggtt with incorrect alignment:"
-                    " offset=%08x %08x, req.alignment=%x, 
req.map_and_fenceable=%d,"
+                    " offset=%08x %08x, req.alignment=%llx, 
req.map_and_fenceable=%d,"
                     " obj->map_and_fenceable=%d\n",
                     upper_32_bits(vma->node.start),
                     lower_32_bits(vma->node.start),
-                    alignment,
+                    (long long)alignment,
                     !!(flags & PIN_MAPPABLE),
                     obj->map_and_fenceable);
                ret = i915_vma_unbind(vma);
@@ -3484,13 +3490,7 @@ void
 i915_gem_object_ggtt_unpin_view(struct drm_i915_gem_object *obj,
                                const struct i915_ggtt_view *view)
 {
-       struct i915_vma *vma = i915_gem_obj_to_ggtt_view(obj, view);
-
-       GEM_BUG_ON(!vma);
-       WARN_ON(i915_vma_is_pinned(vma));
-       WARN_ON(!i915_gem_obj_ggtt_bound_view(obj, view));
-
-       __i915_vma_unpin(vma);
+       i915_vma_unpin(i915_gem_obj_to_ggtt_view(obj, view));
 }
 
 int
diff --git a/drivers/gpu/drm/i915/i915_gem_context.c 
b/drivers/gpu/drm/i915/i915_gem_context.c
index 5ed91406d4e9..c9b8c2c62828 100644
--- a/drivers/gpu/drm/i915/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/i915_gem_context.c
@@ -722,9 +722,8 @@ static int do_rcs_switch(struct drm_i915_gem_request *req)
                return 0;
 
        /* Trying to pin first makes error handling easier. */
-       ret = i915_gem_obj_ggtt_pin(to->engine[RCS].state,
-                                   to->ggtt_alignment,
-                                   0);
+       ret = i915_gem_object_ggtt_pin(to->engine[RCS].state, NULL, 0,
+                                      to->ggtt_alignment, 0);
        if (ret)
                return ret;
 
diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c 
b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
index cc9c0e4073ff..69bf73b51df9 100644
--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
@@ -34,10 +34,10 @@
 #include <linux/dma_remapping.h>
 #include <linux/uaccess.h>
 
-#define  __EXEC_OBJECT_HAS_PIN (1<<31)
-#define  __EXEC_OBJECT_HAS_FENCE (1<<30)
-#define  __EXEC_OBJECT_NEEDS_MAP (1<<29)
-#define  __EXEC_OBJECT_NEEDS_BIAS (1<<28)
+#define  __EXEC_OBJECT_HAS_PIN (1U<<31)
+#define  __EXEC_OBJECT_HAS_FENCE (1U<<30)
+#define  __EXEC_OBJECT_NEEDS_MAP (1U<<29)
+#define  __EXEC_OBJECT_NEEDS_BIAS (1U<<28)
 
 #define BATCH_OFFSET_BIAS (256*1024)
 
@@ -1263,7 +1263,7 @@ i915_gem_execbuffer_parse(struct intel_engine_cs *engine,
        if (ret)
                goto err;
 
-       ret = i915_gem_obj_ggtt_pin(shadow_batch_obj, 0, 0);
+       ret = i915_gem_object_ggtt_pin(shadow_batch_obj, NULL, 0, 0, 0);
        if (ret)
                goto err;
 
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.h 
b/drivers/gpu/drm/i915/i915_gem_gtt.h
index 2bd8ec7e1948..5655358a60e1 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.h
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.h
@@ -184,13 +184,30 @@ struct i915_vma {
 
        struct i915_gem_active last_read[I915_NUM_ENGINES];
 
-       /** Flags and address space this VMA is bound to */
+       union {
+               struct {
+                       /**
+                        * How many users have pinned this object in GTT space. 
The following
+                        * users can each hold at most one reference: 
pwrite/pread, execbuffer
+                        * (objects are not allowed multiple times for the same 
batchbuffer),
+                        * and the framebuffer code. When 
switching/pageflipping, the
+                        * framebuffer code has at most two buffers pinned per 
crtc.
+                        *
+                        * In the worst case this is 1 + 1 + 1 + 2*2 = 7. That 
would fit into 3
+                        * bits with absolutely no headroom. So use 4 bits. */
+                       unsigned int pin_count : 4;
+#define DRM_I915_GEM_OBJECT_MAX_PIN_COUNT 0xf
+
+                       /** Flags and address space this VMA is bound to */
 #define GLOBAL_BIND    (1<<0)
 #define LOCAL_BIND     (1<<1)
-       unsigned int bound : 4;
-       unsigned int active : I915_NUM_ENGINES;
-       bool is_ggtt : 1;
-       bool closed : 1;
+                       unsigned int bound : 4;
+                       unsigned int active : I915_NUM_ENGINES;
+                       bool is_ggtt : 1;
+                       bool closed : 1;
+               };
+               unsigned int flags;
+       };
 
        /**
         * Support different GGTT views into the same object.
@@ -215,39 +232,27 @@ struct i915_vma {
        struct hlist_node exec_node;
        unsigned long exec_handle;
        struct drm_i915_gem_exec_object2 *exec_entry;
-
-       /**
-        * How many users have pinned this object in GTT space. The following
-        * users can each hold at most one reference: pwrite/pread, execbuffer
-        * (objects are not allowed multiple times for the same batchbuffer),
-        * and the framebuffer code. When switching/pageflipping, the
-        * framebuffer code has at most two buffers pinned per crtc.
-        *
-        * In the worst case this is 1 + 1 + 1 + 2*2 = 7. That would fit into 3
-        * bits with absolutely no headroom. So use 4 bits. */
-       unsigned int pin_count:4;
-#define DRM_I915_GEM_OBJECT_MAX_PIN_COUNT 0xf
 };
 
 static inline bool i915_vma_is_active(const struct i915_vma *vma)
 {
-       return vma->active;
+       return vma->flags & (((1 << I915_NUM_ENGINES) - 1) << 8);
 }
 
 static inline void i915_vma_set_active(struct i915_vma *vma, unsigned engine)
 {
-       vma->active |= 1 << engine;
+       vma->flags |= 0x100 << engine;
 }
 
 static inline void i915_vma_unset_active(struct i915_vma *vma, unsigned engine)
 {
-       vma->active &= ~(1 << engine);
+       vma->flags &= ~(0x100 << engine);
 }
 
 static inline bool i915_vma_has_active_engine(const struct i915_vma *vma,
                                              unsigned engine)
 {
-       return vma->active & (1 << engine);
+       return vma->flags & (0x100 << engine);
 }
 
 struct i915_page_dma {
diff --git a/drivers/gpu/drm/i915/i915_gem_render_state.c 
b/drivers/gpu/drm/i915/i915_gem_render_state.c
index c0abe9a2210f..4cf82697b3db 100644
--- a/drivers/gpu/drm/i915/i915_gem_render_state.c
+++ b/drivers/gpu/drm/i915/i915_gem_render_state.c
@@ -72,7 +72,7 @@ static int render_state_init(struct render_state *so,
        if (IS_ERR(so->obj))
                return PTR_ERR(so->obj);
 
-       ret = i915_gem_obj_ggtt_pin(so->obj, 4096, 0);
+       ret = i915_gem_object_ggtt_pin(so->obj, NULL, 0, 0, 0);
        if (ret)
                goto free_gem;
 
diff --git a/drivers/gpu/drm/i915/i915_guc_submission.c 
b/drivers/gpu/drm/i915/i915_guc_submission.c
index cc4792df249d..63ef34c78494 100644
--- a/drivers/gpu/drm/i915/i915_guc_submission.c
+++ b/drivers/gpu/drm/i915/i915_guc_submission.c
@@ -613,8 +613,8 @@ static struct drm_i915_gem_object 
*gem_allocate_guc_obj(struct drm_device *dev,
                return NULL;
        }
 
-       if (i915_gem_obj_ggtt_pin(obj, PAGE_SIZE,
-                       PIN_OFFSET_BIAS | GUC_WOPCM_TOP)) {
+       if (i915_gem_object_ggtt_pin(obj, NULL, 0, PAGE_SIZE,
+                                    PIN_OFFSET_BIAS | GUC_WOPCM_TOP)) {
                i915_gem_object_put(obj);
                return NULL;
        }
diff --git a/drivers/gpu/drm/i915/intel_guc_loader.c 
b/drivers/gpu/drm/i915/intel_guc_loader.c
index 74a5f11a5689..be93b458968a 100644
--- a/drivers/gpu/drm/i915/intel_guc_loader.c
+++ b/drivers/gpu/drm/i915/intel_guc_loader.c
@@ -321,7 +321,7 @@ static int guc_ucode_xfer(struct drm_i915_private *dev_priv)
                return ret;
        }
 
-       ret = i915_gem_obj_ggtt_pin(guc_fw->guc_fw_obj, 0, 0);
+       ret = i915_gem_object_ggtt_pin(guc_fw->guc_fw_obj, NULL, 0, 0, 0);
        if (ret) {
                DRM_DEBUG_DRIVER("pin failed %d\n", ret);
                return ret;
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
index 964108cbb9c0..6cdc421fdc37 100644
--- a/drivers/gpu/drm/i915/intel_lrc.c
+++ b/drivers/gpu/drm/i915/intel_lrc.c
@@ -774,8 +774,9 @@ static int intel_lr_context_pin(struct i915_gem_context 
*ctx,
        if (ce->pin_count++)
                return 0;
 
-       ret = i915_gem_obj_ggtt_pin(ce->state, GEN8_LR_CONTEXT_ALIGN,
-                                   PIN_OFFSET_BIAS | GUC_WOPCM_TOP);
+       ret = i915_gem_object_ggtt_pin(ce->state, NULL,
+                                      0, GEN8_LR_CONTEXT_ALIGN,
+                                      PIN_OFFSET_BIAS | GUC_WOPCM_TOP);
        if (ret)
                goto err;
 
@@ -1154,7 +1155,8 @@ static int lrc_setup_wa_ctx_obj(struct intel_engine_cs 
*engine, u32 size)
                return ret;
        }
 
-       ret = i915_gem_obj_ggtt_pin(engine->wa_ctx.obj, PAGE_SIZE, 0);
+       ret = i915_gem_object_ggtt_pin(engine->wa_ctx.obj, NULL,
+                                      0, PAGE_SIZE, 0);
        if (ret) {
                DRM_DEBUG_DRIVER("pin LRC WA ctx backing obj failed: %d\n",
                                 ret);
diff --git a/drivers/gpu/drm/i915/intel_overlay.c 
b/drivers/gpu/drm/i915/intel_overlay.c
index 5f645ad2babd..9b0fb7e23cbb 100644
--- a/drivers/gpu/drm/i915/intel_overlay.c
+++ b/drivers/gpu/drm/i915/intel_overlay.c
@@ -1412,7 +1412,8 @@ void intel_setup_overlay(struct drm_i915_private 
*dev_priv)
                }
                overlay->flip_addr = reg_bo->phys_handle->busaddr;
        } else {
-               ret = i915_gem_obj_ggtt_pin(reg_bo, PAGE_SIZE, PIN_MAPPABLE);
+               ret = i915_gem_object_ggtt_pin(reg_bo, NULL,
+                                              0, PAGE_SIZE, PIN_MAPPABLE);
                if (ret) {
                        DRM_ERROR("failed to pin overlay register bo\n");
                        goto out_free_bo;
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c 
b/drivers/gpu/drm/i915/intel_ringbuffer.c
index d63e4fdc60de..f86039455c5a 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -648,7 +648,7 @@ int intel_init_pipe_control(struct intel_engine_cs *engine, 
int size)
                goto err;
        }
 
-       ret = i915_gem_obj_ggtt_pin(obj, 4096, PIN_HIGH);
+       ret = i915_gem_object_ggtt_pin(obj, NULL, 0, 4096, PIN_HIGH);
        if (ret)
                goto err_unref;
 
@@ -1816,7 +1816,7 @@ static int init_status_page(struct intel_engine_cs 
*engine)
                         * actualy map it).
                         */
                        flags |= PIN_MAPPABLE;
-               ret = i915_gem_obj_ggtt_pin(obj, 4096, flags);
+               ret = i915_gem_object_ggtt_pin(obj, NULL, 0, 4096, flags);
                if (ret) {
 err_unref:
                        i915_gem_object_put(obj);
@@ -1863,7 +1863,7 @@ int intel_ring_pin(struct intel_ring *ring)
        int ret;
 
        if (HAS_LLC(dev_priv) && !obj->stolen) {
-               ret = i915_gem_obj_ggtt_pin(obj, PAGE_SIZE, flags);
+               ret = i915_gem_object_ggtt_pin(obj, NULL, 0, PAGE_SIZE, flags);
                if (ret)
                        return ret;
 
@@ -1877,8 +1877,8 @@ int intel_ring_pin(struct intel_ring *ring)
                        goto err_unpin;
                }
        } else {
-               ret = i915_gem_obj_ggtt_pin(obj, PAGE_SIZE,
-                                           flags | PIN_MAPPABLE);
+               ret = i915_gem_object_ggtt_pin(obj, NULL, 0, PAGE_SIZE,
+                                              flags | PIN_MAPPABLE);
                if (ret)
                        return ret;
 
@@ -2007,7 +2007,8 @@ static int intel_ring_context_pin(struct i915_gem_context 
*ctx,
                return 0;
 
        if (ce->state) {
-               ret = i915_gem_obj_ggtt_pin(ce->state, ctx->ggtt_alignment, 0);
+               ret = i915_gem_object_ggtt_pin(ce->state, NULL, 0,
+                                              ctx->ggtt_alignment, 0);
                if (ret)
                        goto error;
        }
@@ -2574,7 +2575,8 @@ int intel_init_render_ring_buffer(struct drm_device *dev)
                                i915.semaphores = 0;
                        } else {
                                i915_gem_object_set_cache_level(obj, 
I915_CACHE_LLC);
-                               ret = i915_gem_obj_ggtt_pin(obj, 0, 
PIN_NONBLOCK);
+                               ret = i915_gem_object_ggtt_pin(obj, NULL,
+                                                              0, 0, 0);
                                if (ret != 0) {
                                        i915_gem_object_put(obj);
                                        DRM_ERROR("Failed to pin semaphore bo. 
Disabling semaphores\n");
-- 
2.8.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to