[PATCH 11/35] hmm
Chris Wilson
chris at chris-wilson.co.uk
Fri Aug 30 21:31:19 UTC 2019
---
drivers/gpu/drm/i915/i915_gem_gtt.h | 7 +++----
drivers/gpu/drm/i915/i915_vma.c | 17 +++++-----------
drivers/gpu/drm/i915/i915_vma.h | 30 +++++++++++++----------------
3 files changed, 21 insertions(+), 33 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.h b/drivers/gpu/drm/i915/i915_gem_gtt.h
index 3f9d1877afff..e794d1f5eee8 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.h
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.h
@@ -636,10 +636,9 @@ int i915_gem_gtt_insert(struct i915_address_space *vm,
#define PIN_OFFSET_BIAS BIT_ULL(6)
#define PIN_OFFSET_FIXED BIT_ULL(7)
-#define PIN_MBZ BIT_ULL(8) /* I915_VMA_PIN_OVERFLOW */
-#define PIN_GLOBAL BIT_ULL(9) /* I915_VMA_GLOBAL_BIND */
-#define PIN_USER BIT_ULL(10) /* I915_VMA_LOCAL_BIND */
-#define PIN_UPDATE BIT_ULL(11)
+#define PIN_UPDATE BIT_ULL(9)
+#define PIN_GLOBAL BIT_ULL(10) /* I915_VMA_GLOBAL_BIND */
+#define PIN_USER BIT_ULL(11) /* I915_VMA_LOCAL_BIND */
#define PIN_OFFSET_MASK (-I915_GTT_PAGE_SIZE)
diff --git a/drivers/gpu/drm/i915/i915_vma.c b/drivers/gpu/drm/i915/i915_vma.c
index 7e570b99103f..c0df91fa6982 100644
--- a/drivers/gpu/drm/i915/i915_vma.c
+++ b/drivers/gpu/drm/i915/i915_vma.c
@@ -752,12 +752,9 @@ static bool try_fast_pin(struct i915_vma *vma, unsigned int flags)
if (unlikely(!already_bound(bound, flags)))
return false;
- if ((bound & 0xff) < 1)
- goto slow;
-
pin = bound + 1;
- if (WARN_ON(pin & I915_VMA_PIN_OVERFLOW))
- return false;
+ if ((pin & I915_VMA_PIN_MASK) <= 1)
+ goto slow;
} while (!atomic_try_cmpxchg(&vma->flags, &bound, pin));
return true;
@@ -775,7 +772,7 @@ static bool try_fast_pin(struct i915_vma *vma, unsigned int flags)
}
pin = bound + 1;
- if (WARN_ON(pin & I915_VMA_PIN_OVERFLOW)) {
+ if (unlikely(!(pin & I915_VMA_PIN_MASK))) {
pinned = false;
break;
}
@@ -855,16 +852,12 @@ int i915_vma_pin(struct i915_vma *vma, u64 size, u64 alignment, u64 flags)
unsigned int bound;
int err;
- BUILD_BUG_ON(PIN_MBZ != I915_VMA_PIN_OVERFLOW);
BUILD_BUG_ON(PIN_GLOBAL != I915_VMA_GLOBAL_BIND);
BUILD_BUG_ON(PIN_USER != I915_VMA_LOCAL_BIND);
GEM_BUG_ON(flags & PIN_UPDATE);
GEM_BUG_ON(!(flags & (PIN_USER | PIN_GLOBAL)));
- GEM_BUG_ON(flags & I915_VMA_PIN_OVERFLOW);
- GEM_BUG_ON(flags & I915_VMA_ERROR);
-
if (try_fast_pin(vma, flags))
return 0;
@@ -885,8 +878,8 @@ int i915_vma_pin(struct i915_vma *vma, u64 size, u64 alignment, u64 flags)
goto err_fence;
bound = atomic_read(&vma->flags);
- if (unlikely((bound + 1) & I915_VMA_PIN_OVERFLOW)) {
- err = -EAGAIN;
+ if (unlikely(!((bound + 1) & I915_VMA_PIN_MASK))) {
+ err = -EAGAIN; /* pins are meant to be fairly temporary */
goto err_unlock;
}
diff --git a/drivers/gpu/drm/i915/i915_vma.h b/drivers/gpu/drm/i915/i915_vma.h
index 190cd5ebd076..06340a974b64 100644
--- a/drivers/gpu/drm/i915/i915_vma.h
+++ b/drivers/gpu/drm/i915/i915_vma.h
@@ -96,31 +96,27 @@ struct i915_vma {
* exclusive cachelines of a single page, so a maximum of 64 possible
* users.
*/
-#define I915_VMA_PIN_MASK 0xff
-#define I915_VMA_PIN_OVERFLOW_BIT 8
-#define I915_VMA_PIN_OVERFLOW ((int)BIT(I915_VMA_PIN_OVERFLOW_BIT))
+#define I915_VMA_PIN_MASK 0x3ff
/** Flags and address space this VMA is bound to */
-#define I915_VMA_GLOBAL_BIND_BIT 9
-#define I915_VMA_LOCAL_BIND_BIT 10
-#define I915_VMA_ERROR_BIT 11
+#define I915_VMA_GLOBAL_BIND_BIT 10
+#define I915_VMA_LOCAL_BIND_BIT 11
#define I915_VMA_GLOBAL_BIND ((int)BIT(I915_VMA_GLOBAL_BIND_BIT))
#define I915_VMA_LOCAL_BIND ((int)BIT(I915_VMA_LOCAL_BIND_BIT))
-#define I915_VMA_ERROR ((int)BIT(I915_VMA_ERROR_BIT))
-#define I915_VMA_BIND_MASK (I915_VMA_GLOBAL_BIND | \
- I915_VMA_LOCAL_BIND | \
- I915_VMA_ERROR | \
- I915_VMA_PIN_OVERFLOW)
+#define I915_VMA_BIND_MASK (I915_VMA_GLOBAL_BIND | I915_VMA_LOCAL_BIND)
#define I915_VMA_ALLOC_BIT 12
#define I915_VMA_ALLOC ((int)BIT(I915_VMA_ALLOC_BIT))
-#define I915_VMA_GGTT_BIT 13
-#define I915_VMA_CAN_FENCE_BIT 14
-#define I915_VMA_USERFAULT_BIT 15
-#define I915_VMA_GGTT_WRITE_BIT 16
+#define I915_VMA_ERROR_BIT 13
+#define I915_VMA_ERROR ((int)BIT(I915_VMA_ERROR_BIT))
+
+#define I915_VMA_GGTT_BIT 14
+#define I915_VMA_CAN_FENCE_BIT 15
+#define I915_VMA_USERFAULT_BIT 16
+#define I915_VMA_GGTT_WRITE_BIT 17
#define I915_VMA_GGTT ((int)BIT(I915_VMA_GGTT_BIT))
#define I915_VMA_CAN_FENCE ((int)BIT(I915_VMA_CAN_FENCE_BIT))
@@ -364,17 +360,17 @@ static inline bool i915_vma_is_pinned(const struct i915_vma *vma)
static inline void __i915_vma_pin(struct i915_vma *vma)
{
atomic_inc(&vma->flags);
- GEM_BUG_ON(atomic_read(&vma->flags) & I915_VMA_PIN_OVERFLOW);
+ GEM_BUG_ON(!i915_vma_is_pinned(vma));
}
static inline void __i915_vma_unpin(struct i915_vma *vma)
{
+ GEM_BUG_ON(!i915_vma_is_pinned(vma));
atomic_dec(&vma->flags);
}
static inline void i915_vma_unpin(struct i915_vma *vma)
{
- GEM_BUG_ON(!i915_vma_is_pinned(vma));
GEM_BUG_ON(!drm_mm_node_allocated(&vma->node));
__i915_vma_unpin(vma);
}
--
2.23.0
More information about the Intel-gfx-trybot
mailing list