All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/3] drm/radeon: fix VMID use tracking
@ 2014-01-23 13:24 Christian König
  2014-01-23 13:24 ` [PATCH 2/3] drm/radeon: add missing trace point Christian König
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Christian König @ 2014-01-23 13:24 UTC (permalink / raw)
  To: alexdeucher; +Cc: dri-devel

From: Christian König <christian.koenig@amd.com>

Otherwise we allocate a new VMID on nearly every submit.

Signed-off-by: Christian König <christian.koenig@amd.com>
---
 drivers/gpu/drm/radeon/radeon.h      | 2 ++
 drivers/gpu/drm/radeon/radeon_gart.c | 8 +++++++-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index c5519ca..4a8ac1c 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -867,6 +867,8 @@ struct radeon_vm {
 	struct radeon_fence		*fence;
 	/* last flush or NULL if we still need to flush */
 	struct radeon_fence		*last_flush;
+	/* last use of vmid */
+	struct radeon_fence		*last_id_use;
 };
 
 struct radeon_vm_manager {
diff --git a/drivers/gpu/drm/radeon/radeon_gart.c b/drivers/gpu/drm/radeon/radeon_gart.c
index 96e4400..0e9143b 100644
--- a/drivers/gpu/drm/radeon/radeon_gart.c
+++ b/drivers/gpu/drm/radeon/radeon_gart.c
@@ -713,7 +713,7 @@ struct radeon_fence *radeon_vm_grab_id(struct radeon_device *rdev,
 	unsigned i;
 
 	/* check if the id is still valid */
-	if (vm->fence && vm->fence == rdev->vm_manager.active[vm->id])
+	if (vm->last_id_use && vm->last_id_use == rdev->vm_manager.active[vm->id])
 		return NULL;
 
 	/* we definately need to flush */
@@ -769,6 +769,9 @@ void radeon_vm_fence(struct radeon_device *rdev,
 
 	radeon_fence_unref(&vm->fence);
 	vm->fence = radeon_fence_ref(fence);
+
+	radeon_fence_unref(&vm->last_id_use);
+	vm->last_id_use = radeon_fence_ref(fence);
 }
 
 /**
@@ -1303,6 +1306,8 @@ void radeon_vm_init(struct radeon_device *rdev, struct radeon_vm *vm)
 {
 	vm->id = 0;
 	vm->fence = NULL;
+	vm->last_flush = NULL;
+	vm->last_id_use = NULL;
 	mutex_init(&vm->mutex);
 	INIT_LIST_HEAD(&vm->list);
 	INIT_LIST_HEAD(&vm->va);
@@ -1341,5 +1346,6 @@ void radeon_vm_fini(struct radeon_device *rdev, struct radeon_vm *vm)
 	}
 	radeon_fence_unref(&vm->fence);
 	radeon_fence_unref(&vm->last_flush);
+	radeon_fence_unref(&vm->last_id_use);
 	mutex_unlock(&vm->mutex);
 }
-- 
1.8.1.2

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

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 2/3] drm/radeon: add missing trace point
  2014-01-23 13:24 [PATCH 1/3] drm/radeon: fix VMID use tracking Christian König
@ 2014-01-23 13:24 ` Christian König
  2014-01-23 13:24 ` [PATCH 3/3] drm/radeon: add ring to fence trace functions Christian König
  2014-01-23 17:46 ` [PATCH 1/3] drm/radeon: fix VMID use tracking Alex Deucher
  2 siblings, 0 replies; 6+ messages in thread
From: Christian König @ 2014-01-23 13:24 UTC (permalink / raw)
  To: alexdeucher; +Cc: dri-devel

From: Christian König <christian.koenig@amd.com>

Signed-off-by: Christian König <christian.koenig@amd.com>
---
 drivers/gpu/drm/radeon/radeon_gart.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/gpu/drm/radeon/radeon_gart.c b/drivers/gpu/drm/radeon/radeon_gart.c
index 0e9143b..a8f9b46 100644
--- a/drivers/gpu/drm/radeon/radeon_gart.c
+++ b/drivers/gpu/drm/radeon/radeon_gart.c
@@ -726,6 +726,7 @@ struct radeon_fence *radeon_vm_grab_id(struct radeon_device *rdev,
 		if (fence == NULL) {
 			/* found a free one */
 			vm->id = i;
+			trace_radeon_vm_grab_id(vm->id, ring);
 			return NULL;
 		}
 
-- 
1.8.1.2

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

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 3/3] drm/radeon: add ring to fence trace functions
  2014-01-23 13:24 [PATCH 1/3] drm/radeon: fix VMID use tracking Christian König
  2014-01-23 13:24 ` [PATCH 2/3] drm/radeon: add missing trace point Christian König
@ 2014-01-23 13:24 ` Christian König
  2014-01-23 17:46 ` [PATCH 1/3] drm/radeon: fix VMID use tracking Alex Deucher
  2 siblings, 0 replies; 6+ messages in thread
From: Christian König @ 2014-01-23 13:24 UTC (permalink / raw)
  To: alexdeucher; +Cc: dri-devel

From: Christian König <christian.koenig@amd.com>

Signed-off-by: Christian König <christian.koenig@amd.com>
---
 drivers/gpu/drm/radeon/radeon_fence.c |  6 +++---
 drivers/gpu/drm/radeon/radeon_trace.h | 21 ++++++++++++---------
 2 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/drivers/gpu/drm/radeon/radeon_fence.c b/drivers/gpu/drm/radeon/radeon_fence.c
index 866744e..c37cb79 100644
--- a/drivers/gpu/drm/radeon/radeon_fence.c
+++ b/drivers/gpu/drm/radeon/radeon_fence.c
@@ -121,7 +121,7 @@ int radeon_fence_emit(struct radeon_device *rdev,
 	(*fence)->seq = ++rdev->fence_drv[ring].sync_seq[ring];
 	(*fence)->ring = ring;
 	radeon_fence_ring_emit(rdev, ring, *fence);
-	trace_radeon_fence_emit(rdev->ddev, (*fence)->seq);
+	trace_radeon_fence_emit(rdev->ddev, ring, (*fence)->seq);
 	return 0;
 }
 
@@ -313,7 +313,7 @@ static int radeon_fence_wait_seq(struct radeon_device *rdev, u64 *target_seq,
 				continue;
 
 			last_seq[i] = atomic64_read(&rdev->fence_drv[i].last_seq);
-			trace_radeon_fence_wait_begin(rdev->ddev, target_seq[i]);
+			trace_radeon_fence_wait_begin(rdev->ddev, i, target_seq[i]);
 			radeon_irq_kms_sw_irq_get(rdev, i);
 		}
 
@@ -332,7 +332,7 @@ static int radeon_fence_wait_seq(struct radeon_device *rdev, u64 *target_seq,
 				continue;
 
 			radeon_irq_kms_sw_irq_put(rdev, i);
-			trace_radeon_fence_wait_end(rdev->ddev, target_seq[i]);
+			trace_radeon_fence_wait_end(rdev->ddev, i, target_seq[i]);
 		}
 
 		if (unlikely(r < 0))
diff --git a/drivers/gpu/drm/radeon/radeon_trace.h b/drivers/gpu/drm/radeon/radeon_trace.h
index 0473257..f749f2c 100644
--- a/drivers/gpu/drm/radeon/radeon_trace.h
+++ b/drivers/gpu/drm/radeon/radeon_trace.h
@@ -106,42 +106,45 @@ TRACE_EVENT(radeon_vm_set_page,
 
 DECLARE_EVENT_CLASS(radeon_fence_request,
 
-	    TP_PROTO(struct drm_device *dev, u32 seqno),
+	    TP_PROTO(struct drm_device *dev, int ring, u32 seqno),
 
-	    TP_ARGS(dev, seqno),
+	    TP_ARGS(dev, ring, seqno),
 
 	    TP_STRUCT__entry(
 			     __field(u32, dev)
+			     __field(int, ring)
 			     __field(u32, seqno)
 			     ),
 
 	    TP_fast_assign(
 			   __entry->dev = dev->primary->index;
+			   __entry->ring = ring;
 			   __entry->seqno = seqno;
 			   ),
 
-	    TP_printk("dev=%u, seqno=%u", __entry->dev, __entry->seqno)
+	    TP_printk("dev=%u, ring=%d, seqno=%u",
+		      __entry->dev, __entry->ring, __entry->seqno)
 );
 
 DEFINE_EVENT(radeon_fence_request, radeon_fence_emit,
 
-	    TP_PROTO(struct drm_device *dev, u32 seqno),
+	    TP_PROTO(struct drm_device *dev, int ring, u32 seqno),
 
-	    TP_ARGS(dev, seqno)
+	    TP_ARGS(dev, ring, seqno)
 );
 
 DEFINE_EVENT(radeon_fence_request, radeon_fence_wait_begin,
 
-	    TP_PROTO(struct drm_device *dev, u32 seqno),
+	    TP_PROTO(struct drm_device *dev, int ring, u32 seqno),
 
-	    TP_ARGS(dev, seqno)
+	    TP_ARGS(dev, ring, seqno)
 );
 
 DEFINE_EVENT(radeon_fence_request, radeon_fence_wait_end,
 
-	    TP_PROTO(struct drm_device *dev, u32 seqno),
+	    TP_PROTO(struct drm_device *dev, int ring, u32 seqno),
 
-	    TP_ARGS(dev, seqno)
+	    TP_ARGS(dev, ring, seqno)
 );
 
 DECLARE_EVENT_CLASS(radeon_semaphore_request,
-- 
1.8.1.2

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

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/3] drm/radeon: fix VMID use tracking
  2014-01-23 13:24 [PATCH 1/3] drm/radeon: fix VMID use tracking Christian König
  2014-01-23 13:24 ` [PATCH 2/3] drm/radeon: add missing trace point Christian König
  2014-01-23 13:24 ` [PATCH 3/3] drm/radeon: add ring to fence trace functions Christian König
@ 2014-01-23 17:46 ` Alex Deucher
  2014-01-24 15:52   ` Christian König
  2 siblings, 1 reply; 6+ messages in thread
From: Alex Deucher @ 2014-01-23 17:46 UTC (permalink / raw)
  To: Christian König; +Cc: Maling list - DRI developers

On Thu, Jan 23, 2014 at 8:24 AM, Christian König
<deathsimple@vodafone.de> wrote:
> From: Christian König <christian.koenig@amd.com>
>
> Otherwise we allocate a new VMID on nearly every submit.

I wonder if this fix would allow us to fix up this:
http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=466476dfdcafbb4286ffa232a3a792731b9dc852

Alex

>
> Signed-off-by: Christian König <christian.koenig@amd.com>
> ---
>  drivers/gpu/drm/radeon/radeon.h      | 2 ++
>  drivers/gpu/drm/radeon/radeon_gart.c | 8 +++++++-
>  2 files changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
> index c5519ca..4a8ac1c 100644
> --- a/drivers/gpu/drm/radeon/radeon.h
> +++ b/drivers/gpu/drm/radeon/radeon.h
> @@ -867,6 +867,8 @@ struct radeon_vm {
>         struct radeon_fence             *fence;
>         /* last flush or NULL if we still need to flush */
>         struct radeon_fence             *last_flush;
> +       /* last use of vmid */
> +       struct radeon_fence             *last_id_use;
>  };
>
>  struct radeon_vm_manager {
> diff --git a/drivers/gpu/drm/radeon/radeon_gart.c b/drivers/gpu/drm/radeon/radeon_gart.c
> index 96e4400..0e9143b 100644
> --- a/drivers/gpu/drm/radeon/radeon_gart.c
> +++ b/drivers/gpu/drm/radeon/radeon_gart.c
> @@ -713,7 +713,7 @@ struct radeon_fence *radeon_vm_grab_id(struct radeon_device *rdev,
>         unsigned i;
>
>         /* check if the id is still valid */
> -       if (vm->fence && vm->fence == rdev->vm_manager.active[vm->id])
> +       if (vm->last_id_use && vm->last_id_use == rdev->vm_manager.active[vm->id])
>                 return NULL;
>
>         /* we definately need to flush */
> @@ -769,6 +769,9 @@ void radeon_vm_fence(struct radeon_device *rdev,
>
>         radeon_fence_unref(&vm->fence);
>         vm->fence = radeon_fence_ref(fence);
> +
> +       radeon_fence_unref(&vm->last_id_use);
> +       vm->last_id_use = radeon_fence_ref(fence);
>  }
>
>  /**
> @@ -1303,6 +1306,8 @@ void radeon_vm_init(struct radeon_device *rdev, struct radeon_vm *vm)
>  {
>         vm->id = 0;
>         vm->fence = NULL;
> +       vm->last_flush = NULL;
> +       vm->last_id_use = NULL;
>         mutex_init(&vm->mutex);
>         INIT_LIST_HEAD(&vm->list);
>         INIT_LIST_HEAD(&vm->va);
> @@ -1341,5 +1346,6 @@ void radeon_vm_fini(struct radeon_device *rdev, struct radeon_vm *vm)
>         }
>         radeon_fence_unref(&vm->fence);
>         radeon_fence_unref(&vm->last_flush);
> +       radeon_fence_unref(&vm->last_id_use);
>         mutex_unlock(&vm->mutex);
>  }
> --
> 1.8.1.2
>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/3] drm/radeon: fix VMID use tracking
  2014-01-23 17:46 ` [PATCH 1/3] drm/radeon: fix VMID use tracking Alex Deucher
@ 2014-01-24 15:52   ` Christian König
  2014-01-24 15:55     ` Alex Deucher
  0 siblings, 1 reply; 6+ messages in thread
From: Christian König @ 2014-01-24 15:52 UTC (permalink / raw)
  To: Alex Deucher; +Cc: Maling list - DRI developers

Am 23.01.2014 18:46, schrieb Alex Deucher:
> On Thu, Jan 23, 2014 at 8:24 AM, Christian König
> <deathsimple@vodafone.de> wrote:
>> From: Christian König <christian.koenig@amd.com>
>>
>> Otherwise we allocate a new VMID on nearly every submit.
> I wonder if this fix would allow us to fix up this:
> http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=466476dfdcafbb4286ffa232a3a792731b9dc852

It's probably a step into the right direction, but not necessary the 
complete solution.

For now I would say we should keep the extra flushing as it is.

Christian.

> Alex
>
>> Signed-off-by: Christian König <christian.koenig@amd.com>
>> ---
>>   drivers/gpu/drm/radeon/radeon.h      | 2 ++
>>   drivers/gpu/drm/radeon/radeon_gart.c | 8 +++++++-
>>   2 files changed, 9 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
>> index c5519ca..4a8ac1c 100644
>> --- a/drivers/gpu/drm/radeon/radeon.h
>> +++ b/drivers/gpu/drm/radeon/radeon.h
>> @@ -867,6 +867,8 @@ struct radeon_vm {
>>          struct radeon_fence             *fence;
>>          /* last flush or NULL if we still need to flush */
>>          struct radeon_fence             *last_flush;
>> +       /* last use of vmid */
>> +       struct radeon_fence             *last_id_use;
>>   };
>>
>>   struct radeon_vm_manager {
>> diff --git a/drivers/gpu/drm/radeon/radeon_gart.c b/drivers/gpu/drm/radeon/radeon_gart.c
>> index 96e4400..0e9143b 100644
>> --- a/drivers/gpu/drm/radeon/radeon_gart.c
>> +++ b/drivers/gpu/drm/radeon/radeon_gart.c
>> @@ -713,7 +713,7 @@ struct radeon_fence *radeon_vm_grab_id(struct radeon_device *rdev,
>>          unsigned i;
>>
>>          /* check if the id is still valid */
>> -       if (vm->fence && vm->fence == rdev->vm_manager.active[vm->id])
>> +       if (vm->last_id_use && vm->last_id_use == rdev->vm_manager.active[vm->id])
>>                  return NULL;
>>
>>          /* we definately need to flush */
>> @@ -769,6 +769,9 @@ void radeon_vm_fence(struct radeon_device *rdev,
>>
>>          radeon_fence_unref(&vm->fence);
>>          vm->fence = radeon_fence_ref(fence);
>> +
>> +       radeon_fence_unref(&vm->last_id_use);
>> +       vm->last_id_use = radeon_fence_ref(fence);
>>   }
>>
>>   /**
>> @@ -1303,6 +1306,8 @@ void radeon_vm_init(struct radeon_device *rdev, struct radeon_vm *vm)
>>   {
>>          vm->id = 0;
>>          vm->fence = NULL;
>> +       vm->last_flush = NULL;
>> +       vm->last_id_use = NULL;
>>          mutex_init(&vm->mutex);
>>          INIT_LIST_HEAD(&vm->list);
>>          INIT_LIST_HEAD(&vm->va);
>> @@ -1341,5 +1346,6 @@ void radeon_vm_fini(struct radeon_device *rdev, struct radeon_vm *vm)
>>          }
>>          radeon_fence_unref(&vm->fence);
>>          radeon_fence_unref(&vm->last_flush);
>> +       radeon_fence_unref(&vm->last_id_use);
>>          mutex_unlock(&vm->mutex);
>>   }
>> --
>> 1.8.1.2
>>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/3] drm/radeon: fix VMID use tracking
  2014-01-24 15:52   ` Christian König
@ 2014-01-24 15:55     ` Alex Deucher
  0 siblings, 0 replies; 6+ messages in thread
From: Alex Deucher @ 2014-01-24 15:55 UTC (permalink / raw)
  To: Christian König; +Cc: Maling list - DRI developers

On Fri, Jan 24, 2014 at 10:52 AM, Christian König
<deathsimple@vodafone.de> wrote:
> Am 23.01.2014 18:46, schrieb Alex Deucher:
>
>> On Thu, Jan 23, 2014 at 8:24 AM, Christian König
>> <deathsimple@vodafone.de> wrote:
>>>
>>> From: Christian König <christian.koenig@amd.com>
>>>
>>> Otherwise we allocate a new VMID on nearly every submit.
>>
>> I wonder if this fix would allow us to fix up this:
>>
>> http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=466476dfdcafbb4286ffa232a3a792731b9dc852
>
>
> It's probably a step into the right direction, but not necessary the
> complete solution.
>
> For now I would say we should keep the extra flushing as it is.

Patches applied.  thanks!

Alex

>
> Christian.
>
>
>> Alex
>>
>>> Signed-off-by: Christian König <christian.koenig@amd.com>
>>> ---
>>>   drivers/gpu/drm/radeon/radeon.h      | 2 ++
>>>   drivers/gpu/drm/radeon/radeon_gart.c | 8 +++++++-
>>>   2 files changed, 9 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/gpu/drm/radeon/radeon.h
>>> b/drivers/gpu/drm/radeon/radeon.h
>>> index c5519ca..4a8ac1c 100644
>>> --- a/drivers/gpu/drm/radeon/radeon.h
>>> +++ b/drivers/gpu/drm/radeon/radeon.h
>>> @@ -867,6 +867,8 @@ struct radeon_vm {
>>>          struct radeon_fence             *fence;
>>>          /* last flush or NULL if we still need to flush */
>>>          struct radeon_fence             *last_flush;
>>> +       /* last use of vmid */
>>> +       struct radeon_fence             *last_id_use;
>>>   };
>>>
>>>   struct radeon_vm_manager {
>>> diff --git a/drivers/gpu/drm/radeon/radeon_gart.c
>>> b/drivers/gpu/drm/radeon/radeon_gart.c
>>> index 96e4400..0e9143b 100644
>>> --- a/drivers/gpu/drm/radeon/radeon_gart.c
>>> +++ b/drivers/gpu/drm/radeon/radeon_gart.c
>>> @@ -713,7 +713,7 @@ struct radeon_fence *radeon_vm_grab_id(struct
>>> radeon_device *rdev,
>>>          unsigned i;
>>>
>>>          /* check if the id is still valid */
>>> -       if (vm->fence && vm->fence == rdev->vm_manager.active[vm->id])
>>> +       if (vm->last_id_use && vm->last_id_use ==
>>> rdev->vm_manager.active[vm->id])
>>>                  return NULL;
>>>
>>>          /* we definately need to flush */
>>> @@ -769,6 +769,9 @@ void radeon_vm_fence(struct radeon_device *rdev,
>>>
>>>          radeon_fence_unref(&vm->fence);
>>>          vm->fence = radeon_fence_ref(fence);
>>> +
>>> +       radeon_fence_unref(&vm->last_id_use);
>>> +       vm->last_id_use = radeon_fence_ref(fence);
>>>   }
>>>
>>>   /**
>>> @@ -1303,6 +1306,8 @@ void radeon_vm_init(struct radeon_device *rdev,
>>> struct radeon_vm *vm)
>>>   {
>>>          vm->id = 0;
>>>          vm->fence = NULL;
>>> +       vm->last_flush = NULL;
>>> +       vm->last_id_use = NULL;
>>>          mutex_init(&vm->mutex);
>>>          INIT_LIST_HEAD(&vm->list);
>>>          INIT_LIST_HEAD(&vm->va);
>>> @@ -1341,5 +1346,6 @@ void radeon_vm_fini(struct radeon_device *rdev,
>>> struct radeon_vm *vm)
>>>          }
>>>          radeon_fence_unref(&vm->fence);
>>>          radeon_fence_unref(&vm->last_flush);
>>> +       radeon_fence_unref(&vm->last_id_use);
>>>          mutex_unlock(&vm->mutex);
>>>   }
>>> --
>>> 1.8.1.2
>>>
>

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2014-01-24 15:55 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-01-23 13:24 [PATCH 1/3] drm/radeon: fix VMID use tracking Christian König
2014-01-23 13:24 ` [PATCH 2/3] drm/radeon: add missing trace point Christian König
2014-01-23 13:24 ` [PATCH 3/3] drm/radeon: add ring to fence trace functions Christian König
2014-01-23 17:46 ` [PATCH 1/3] drm/radeon: fix VMID use tracking Alex Deucher
2014-01-24 15:52   ` Christian König
2014-01-24 15:55     ` Alex Deucher

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.