All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] drm/amdgpu: cleanup amdgpu_ih_process a bit more
@ 2019-01-16 14:32 Christian König
       [not found] ` <20190116143225.12909-1-christian.koenig-5C7GfCeVMHo@public.gmane.org>
  0 siblings, 1 reply; 3+ messages in thread
From: Christian König @ 2019-01-16 14:32 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

Remove the callback and call the dispatcher directly.

Signed-off-by: Christian König <christian.koenig@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c  |  6 ++--
 drivers/gpu/drm/amd/amdgpu/amdgpu_ih.h  |  4 +--
 drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c | 48 +++++++++----------------
 drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h |  2 +-
 4 files changed, 21 insertions(+), 39 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c
index d0a5db777b6d..1c50be3ab8a9 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c
@@ -140,9 +140,7 @@ void amdgpu_ih_ring_fini(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih)
  * Interrupt hander (VI), walk the IH ring.
  * Returns irq process return code.
  */
-int amdgpu_ih_process(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih,
-		      void (*callback)(struct amdgpu_device *adev,
-				       struct amdgpu_ih_ring *ih))
+int amdgpu_ih_process(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih)
 {
 	u32 wptr;
 
@@ -162,7 +160,7 @@ int amdgpu_ih_process(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih,
 	rmb();
 
 	while (ih->rptr != wptr) {
-		callback(adev, ih);
+		amdgpu_irq_dispatch(adev, ih);
 		ih->rptr &= ih->ptr_mask;
 	}
 
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.h
index 1ccb1831382a..113a1ba13d4a 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.h
@@ -69,8 +69,6 @@ struct amdgpu_ih_funcs {
 int amdgpu_ih_ring_init(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih,
 			unsigned ring_size, bool use_bus_addr);
 void amdgpu_ih_ring_fini(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih);
-int amdgpu_ih_process(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih,
-		      void (*callback)(struct amdgpu_device *adev,
-				       struct amdgpu_ih_ring *ih));
+int amdgpu_ih_process(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih);
 
 #endif
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
index 8bfb3dab46f7..af4c3b1af322 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
@@ -130,29 +130,6 @@ void amdgpu_irq_disable_all(struct amdgpu_device *adev)
 	spin_unlock_irqrestore(&adev->irq.lock, irqflags);
 }
 
-/**
- * amdgpu_irq_callback - callback from the IH ring
- *
- * @adev: amdgpu device pointer
- * @ih: amdgpu ih ring
- *
- * Callback from IH ring processing to handle the entry at the current position
- * and advance the read pointer.
- */
-static void amdgpu_irq_callback(struct amdgpu_device *adev,
-				struct amdgpu_ih_ring *ih)
-{
-	u32 ring_index = ih->rptr >> 2;
-	struct amdgpu_iv_entry entry;
-
-	entry.iv_entry = (const uint32_t *)&ih->ring[ring_index];
-	amdgpu_ih_decode_iv(adev, &entry);
-
-	trace_amdgpu_iv(ih - &adev->irq.ih, &entry);
-
-	amdgpu_irq_dispatch(adev, &entry);
-}
-
 /**
  * amdgpu_irq_handler - IRQ handler
  *
@@ -170,7 +147,7 @@ irqreturn_t amdgpu_irq_handler(int irq, void *arg)
 	struct amdgpu_device *adev = dev->dev_private;
 	irqreturn_t ret;
 
-	ret = amdgpu_ih_process(adev, &adev->irq.ih, amdgpu_irq_callback);
+	ret = amdgpu_ih_process(adev, &adev->irq.ih);
 	if (ret == IRQ_HANDLED)
 		pm_runtime_mark_last_busy(dev->dev);
 	return ret;
@@ -188,7 +165,7 @@ static void amdgpu_irq_handle_ih1(struct work_struct *work)
 	struct amdgpu_device *adev = container_of(work, struct amdgpu_device,
 						  irq.ih1_work);
 
-	amdgpu_ih_process(adev, &adev->irq.ih1, amdgpu_irq_callback);
+	amdgpu_ih_process(adev, &adev->irq.ih1);
 }
 
 /**
@@ -203,7 +180,7 @@ static void amdgpu_irq_handle_ih2(struct work_struct *work)
 	struct amdgpu_device *adev = container_of(work, struct amdgpu_device,
 						  irq.ih2_work);
 
-	amdgpu_ih_process(adev, &adev->irq.ih2, amdgpu_irq_callback);
+	amdgpu_ih_process(adev, &adev->irq.ih2);
 }
 
 /**
@@ -394,14 +371,23 @@ int amdgpu_irq_add_id(struct amdgpu_device *adev,
  * Dispatches IRQ to IP blocks.
  */
 void amdgpu_irq_dispatch(struct amdgpu_device *adev,
-			 struct amdgpu_iv_entry *entry)
+			 struct amdgpu_ih_ring *ih)
 {
-	unsigned client_id = entry->client_id;
-	unsigned src_id = entry->src_id;
+	u32 ring_index = ih->rptr >> 2;
+	struct amdgpu_iv_entry entry;
+	unsigned client_id, src_id;
 	struct amdgpu_irq_src *src;
 	bool handled = false;
 	int r;
 
+	entry.iv_entry = (const uint32_t *)&ih->ring[ring_index];
+	amdgpu_ih_decode_iv(adev, &entry);
+
+	trace_amdgpu_iv(ih - &adev->irq.ih, &entry);
+
+	client_id = entry.client_id;
+	src_id = entry.src_id;
+
 	if (client_id >= AMDGPU_IRQ_CLIENTID_MAX) {
 		DRM_DEBUG("Invalid client_id in IV: %d\n", client_id);
 
@@ -416,7 +402,7 @@ void amdgpu_irq_dispatch(struct amdgpu_device *adev,
 			  client_id, src_id);
 
 	} else if ((src = adev->irq.client[client_id].sources[src_id])) {
-		r = src->funcs->process(adev, src, entry);
+		r = src->funcs->process(adev, src, &entry);
 		if (r < 0)
 			DRM_ERROR("error processing interrupt (%d)\n", r);
 		else if (r)
@@ -428,7 +414,7 @@ void amdgpu_irq_dispatch(struct amdgpu_device *adev,
 
 	/* Send it to amdkfd as well if it isn't already handled */
 	if (!handled)
-		amdgpu_amdkfd_interrupt(adev, entry->iv_entry);
+		amdgpu_amdkfd_interrupt(adev, entry.iv_entry);
 }
 
 /**
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h
index c27decfda494..c718e94a55c9 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h
@@ -108,7 +108,7 @@ int amdgpu_irq_add_id(struct amdgpu_device *adev,
 		      unsigned client_id, unsigned src_id,
 		      struct amdgpu_irq_src *source);
 void amdgpu_irq_dispatch(struct amdgpu_device *adev,
-			 struct amdgpu_iv_entry *entry);
+			 struct amdgpu_ih_ring *ih);
 int amdgpu_irq_update(struct amdgpu_device *adev, struct amdgpu_irq_src *src,
 		      unsigned type);
 int amdgpu_irq_get(struct amdgpu_device *adev, struct amdgpu_irq_src *src,
-- 
2.17.1

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

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

* Re: [PATCH] drm/amdgpu: cleanup amdgpu_ih_process a bit more
       [not found] ` <20190116143225.12909-1-christian.koenig-5C7GfCeVMHo@public.gmane.org>
@ 2019-02-08 12:42   ` Christian König
       [not found]     ` <87ce1a30-b541-4a54-7686-bb552ab164f1-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
  0 siblings, 1 reply; 3+ messages in thread
From: Christian König @ 2019-02-08 12:42 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

Ping? Just a minor cleanup without functional change.

Am 16.01.19 um 15:32 schrieb Christian König:
> Remove the callback and call the dispatcher directly.
>
> Signed-off-by: Christian König <christian.koenig@amd.com>
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c  |  6 ++--
>   drivers/gpu/drm/amd/amdgpu/amdgpu_ih.h  |  4 +--
>   drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c | 48 +++++++++----------------
>   drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h |  2 +-
>   4 files changed, 21 insertions(+), 39 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c
> index d0a5db777b6d..1c50be3ab8a9 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c
> @@ -140,9 +140,7 @@ void amdgpu_ih_ring_fini(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih)
>    * Interrupt hander (VI), walk the IH ring.
>    * Returns irq process return code.
>    */
> -int amdgpu_ih_process(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih,
> -		      void (*callback)(struct amdgpu_device *adev,
> -				       struct amdgpu_ih_ring *ih))
> +int amdgpu_ih_process(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih)
>   {
>   	u32 wptr;
>   
> @@ -162,7 +160,7 @@ int amdgpu_ih_process(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih,
>   	rmb();
>   
>   	while (ih->rptr != wptr) {
> -		callback(adev, ih);
> +		amdgpu_irq_dispatch(adev, ih);
>   		ih->rptr &= ih->ptr_mask;
>   	}
>   
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.h
> index 1ccb1831382a..113a1ba13d4a 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.h
> @@ -69,8 +69,6 @@ struct amdgpu_ih_funcs {
>   int amdgpu_ih_ring_init(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih,
>   			unsigned ring_size, bool use_bus_addr);
>   void amdgpu_ih_ring_fini(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih);
> -int amdgpu_ih_process(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih,
> -		      void (*callback)(struct amdgpu_device *adev,
> -				       struct amdgpu_ih_ring *ih));
> +int amdgpu_ih_process(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih);
>   
>   #endif
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
> index 8bfb3dab46f7..af4c3b1af322 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
> @@ -130,29 +130,6 @@ void amdgpu_irq_disable_all(struct amdgpu_device *adev)
>   	spin_unlock_irqrestore(&adev->irq.lock, irqflags);
>   }
>   
> -/**
> - * amdgpu_irq_callback - callback from the IH ring
> - *
> - * @adev: amdgpu device pointer
> - * @ih: amdgpu ih ring
> - *
> - * Callback from IH ring processing to handle the entry at the current position
> - * and advance the read pointer.
> - */
> -static void amdgpu_irq_callback(struct amdgpu_device *adev,
> -				struct amdgpu_ih_ring *ih)
> -{
> -	u32 ring_index = ih->rptr >> 2;
> -	struct amdgpu_iv_entry entry;
> -
> -	entry.iv_entry = (const uint32_t *)&ih->ring[ring_index];
> -	amdgpu_ih_decode_iv(adev, &entry);
> -
> -	trace_amdgpu_iv(ih - &adev->irq.ih, &entry);
> -
> -	amdgpu_irq_dispatch(adev, &entry);
> -}
> -
>   /**
>    * amdgpu_irq_handler - IRQ handler
>    *
> @@ -170,7 +147,7 @@ irqreturn_t amdgpu_irq_handler(int irq, void *arg)
>   	struct amdgpu_device *adev = dev->dev_private;
>   	irqreturn_t ret;
>   
> -	ret = amdgpu_ih_process(adev, &adev->irq.ih, amdgpu_irq_callback);
> +	ret = amdgpu_ih_process(adev, &adev->irq.ih);
>   	if (ret == IRQ_HANDLED)
>   		pm_runtime_mark_last_busy(dev->dev);
>   	return ret;
> @@ -188,7 +165,7 @@ static void amdgpu_irq_handle_ih1(struct work_struct *work)
>   	struct amdgpu_device *adev = container_of(work, struct amdgpu_device,
>   						  irq.ih1_work);
>   
> -	amdgpu_ih_process(adev, &adev->irq.ih1, amdgpu_irq_callback);
> +	amdgpu_ih_process(adev, &adev->irq.ih1);
>   }
>   
>   /**
> @@ -203,7 +180,7 @@ static void amdgpu_irq_handle_ih2(struct work_struct *work)
>   	struct amdgpu_device *adev = container_of(work, struct amdgpu_device,
>   						  irq.ih2_work);
>   
> -	amdgpu_ih_process(adev, &adev->irq.ih2, amdgpu_irq_callback);
> +	amdgpu_ih_process(adev, &adev->irq.ih2);
>   }
>   
>   /**
> @@ -394,14 +371,23 @@ int amdgpu_irq_add_id(struct amdgpu_device *adev,
>    * Dispatches IRQ to IP blocks.
>    */
>   void amdgpu_irq_dispatch(struct amdgpu_device *adev,
> -			 struct amdgpu_iv_entry *entry)
> +			 struct amdgpu_ih_ring *ih)
>   {
> -	unsigned client_id = entry->client_id;
> -	unsigned src_id = entry->src_id;
> +	u32 ring_index = ih->rptr >> 2;
> +	struct amdgpu_iv_entry entry;
> +	unsigned client_id, src_id;
>   	struct amdgpu_irq_src *src;
>   	bool handled = false;
>   	int r;
>   
> +	entry.iv_entry = (const uint32_t *)&ih->ring[ring_index];
> +	amdgpu_ih_decode_iv(adev, &entry);
> +
> +	trace_amdgpu_iv(ih - &adev->irq.ih, &entry);
> +
> +	client_id = entry.client_id;
> +	src_id = entry.src_id;
> +
>   	if (client_id >= AMDGPU_IRQ_CLIENTID_MAX) {
>   		DRM_DEBUG("Invalid client_id in IV: %d\n", client_id);
>   
> @@ -416,7 +402,7 @@ void amdgpu_irq_dispatch(struct amdgpu_device *adev,
>   			  client_id, src_id);
>   
>   	} else if ((src = adev->irq.client[client_id].sources[src_id])) {
> -		r = src->funcs->process(adev, src, entry);
> +		r = src->funcs->process(adev, src, &entry);
>   		if (r < 0)
>   			DRM_ERROR("error processing interrupt (%d)\n", r);
>   		else if (r)
> @@ -428,7 +414,7 @@ void amdgpu_irq_dispatch(struct amdgpu_device *adev,
>   
>   	/* Send it to amdkfd as well if it isn't already handled */
>   	if (!handled)
> -		amdgpu_amdkfd_interrupt(adev, entry->iv_entry);
> +		amdgpu_amdkfd_interrupt(adev, entry.iv_entry);
>   }
>   
>   /**
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h
> index c27decfda494..c718e94a55c9 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h
> @@ -108,7 +108,7 @@ int amdgpu_irq_add_id(struct amdgpu_device *adev,
>   		      unsigned client_id, unsigned src_id,
>   		      struct amdgpu_irq_src *source);
>   void amdgpu_irq_dispatch(struct amdgpu_device *adev,
> -			 struct amdgpu_iv_entry *entry);
> +			 struct amdgpu_ih_ring *ih);
>   int amdgpu_irq_update(struct amdgpu_device *adev, struct amdgpu_irq_src *src,
>   		      unsigned type);
>   int amdgpu_irq_get(struct amdgpu_device *adev, struct amdgpu_irq_src *src,

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

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

* Re: [PATCH] drm/amdgpu: cleanup amdgpu_ih_process a bit more
       [not found]     ` <87ce1a30-b541-4a54-7686-bb552ab164f1-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
@ 2019-02-08 14:27       ` Kuehling, Felix
  0 siblings, 0 replies; 3+ messages in thread
From: Kuehling, Felix @ 2019-02-08 14:27 UTC (permalink / raw)
  To: Christian König, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

Sorry, I thought I had reviewed that already. The change is Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>

________________________________________
From: amd-gfx <amd-gfx-bounces@lists.freedesktop.org> on behalf of Christian König <ckoenig.leichtzumerken@gmail.com>
Sent: Friday, February 8, 2019 7:42 AM
To: amd-gfx@lists.freedesktop.org
Subject: Re: [PATCH] drm/amdgpu: cleanup amdgpu_ih_process a bit more

Ping? Just a minor cleanup without functional change.

Am 16.01.19 um 15:32 schrieb Christian König:
> Remove the callback and call the dispatcher directly.
>
> Signed-off-by: Christian König <christian.koenig@amd.com>
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c  |  6 ++--
>   drivers/gpu/drm/amd/amdgpu/amdgpu_ih.h  |  4 +--
>   drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c | 48 +++++++++----------------
>   drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h |  2 +-
>   4 files changed, 21 insertions(+), 39 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c
> index d0a5db777b6d..1c50be3ab8a9 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c
> @@ -140,9 +140,7 @@ void amdgpu_ih_ring_fini(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih)
>    * Interrupt hander (VI), walk the IH ring.
>    * Returns irq process return code.
>    */
> -int amdgpu_ih_process(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih,
> -                   void (*callback)(struct amdgpu_device *adev,
> -                                    struct amdgpu_ih_ring *ih))
> +int amdgpu_ih_process(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih)
>   {
>       u32 wptr;
>
> @@ -162,7 +160,7 @@ int amdgpu_ih_process(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih,
>       rmb();
>
>       while (ih->rptr != wptr) {
> -             callback(adev, ih);
> +             amdgpu_irq_dispatch(adev, ih);
>               ih->rptr &= ih->ptr_mask;
>       }
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.h
> index 1ccb1831382a..113a1ba13d4a 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.h
> @@ -69,8 +69,6 @@ struct amdgpu_ih_funcs {
>   int amdgpu_ih_ring_init(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih,
>                       unsigned ring_size, bool use_bus_addr);
>   void amdgpu_ih_ring_fini(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih);
> -int amdgpu_ih_process(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih,
> -                   void (*callback)(struct amdgpu_device *adev,
> -                                    struct amdgpu_ih_ring *ih));
> +int amdgpu_ih_process(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih);
>
>   #endif
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
> index 8bfb3dab46f7..af4c3b1af322 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
> @@ -130,29 +130,6 @@ void amdgpu_irq_disable_all(struct amdgpu_device *adev)
>       spin_unlock_irqrestore(&adev->irq.lock, irqflags);
>   }
>
> -/**
> - * amdgpu_irq_callback - callback from the IH ring
> - *
> - * @adev: amdgpu device pointer
> - * @ih: amdgpu ih ring
> - *
> - * Callback from IH ring processing to handle the entry at the current position
> - * and advance the read pointer.
> - */
> -static void amdgpu_irq_callback(struct amdgpu_device *adev,
> -                             struct amdgpu_ih_ring *ih)
> -{
> -     u32 ring_index = ih->rptr >> 2;
> -     struct amdgpu_iv_entry entry;
> -
> -     entry.iv_entry = (const uint32_t *)&ih->ring[ring_index];
> -     amdgpu_ih_decode_iv(adev, &entry);
> -
> -     trace_amdgpu_iv(ih - &adev->irq.ih, &entry);
> -
> -     amdgpu_irq_dispatch(adev, &entry);
> -}
> -
>   /**
>    * amdgpu_irq_handler - IRQ handler
>    *
> @@ -170,7 +147,7 @@ irqreturn_t amdgpu_irq_handler(int irq, void *arg)
>       struct amdgpu_device *adev = dev->dev_private;
>       irqreturn_t ret;
>
> -     ret = amdgpu_ih_process(adev, &adev->irq.ih, amdgpu_irq_callback);
> +     ret = amdgpu_ih_process(adev, &adev->irq.ih);
>       if (ret == IRQ_HANDLED)
>               pm_runtime_mark_last_busy(dev->dev);
>       return ret;
> @@ -188,7 +165,7 @@ static void amdgpu_irq_handle_ih1(struct work_struct *work)
>       struct amdgpu_device *adev = container_of(work, struct amdgpu_device,
>                                                 irq.ih1_work);
>
> -     amdgpu_ih_process(adev, &adev->irq.ih1, amdgpu_irq_callback);
> +     amdgpu_ih_process(adev, &adev->irq.ih1);
>   }
>
>   /**
> @@ -203,7 +180,7 @@ static void amdgpu_irq_handle_ih2(struct work_struct *work)
>       struct amdgpu_device *adev = container_of(work, struct amdgpu_device,
>                                                 irq.ih2_work);
>
> -     amdgpu_ih_process(adev, &adev->irq.ih2, amdgpu_irq_callback);
> +     amdgpu_ih_process(adev, &adev->irq.ih2);
>   }
>
>   /**
> @@ -394,14 +371,23 @@ int amdgpu_irq_add_id(struct amdgpu_device *adev,
>    * Dispatches IRQ to IP blocks.
>    */
>   void amdgpu_irq_dispatch(struct amdgpu_device *adev,
> -                      struct amdgpu_iv_entry *entry)
> +                      struct amdgpu_ih_ring *ih)
>   {
> -     unsigned client_id = entry->client_id;
> -     unsigned src_id = entry->src_id;
> +     u32 ring_index = ih->rptr >> 2;
> +     struct amdgpu_iv_entry entry;
> +     unsigned client_id, src_id;
>       struct amdgpu_irq_src *src;
>       bool handled = false;
>       int r;
>
> +     entry.iv_entry = (const uint32_t *)&ih->ring[ring_index];
> +     amdgpu_ih_decode_iv(adev, &entry);
> +
> +     trace_amdgpu_iv(ih - &adev->irq.ih, &entry);
> +
> +     client_id = entry.client_id;
> +     src_id = entry.src_id;
> +
>       if (client_id >= AMDGPU_IRQ_CLIENTID_MAX) {
>               DRM_DEBUG("Invalid client_id in IV: %d\n", client_id);
>
> @@ -416,7 +402,7 @@ void amdgpu_irq_dispatch(struct amdgpu_device *adev,
>                         client_id, src_id);
>
>       } else if ((src = adev->irq.client[client_id].sources[src_id])) {
> -             r = src->funcs->process(adev, src, entry);
> +             r = src->funcs->process(adev, src, &entry);
>               if (r < 0)
>                       DRM_ERROR("error processing interrupt (%d)\n", r);
>               else if (r)
> @@ -428,7 +414,7 @@ void amdgpu_irq_dispatch(struct amdgpu_device *adev,
>
>       /* Send it to amdkfd as well if it isn't already handled */
>       if (!handled)
> -             amdgpu_amdkfd_interrupt(adev, entry->iv_entry);
> +             amdgpu_amdkfd_interrupt(adev, entry.iv_entry);
>   }
>
>   /**
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h
> index c27decfda494..c718e94a55c9 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h
> @@ -108,7 +108,7 @@ int amdgpu_irq_add_id(struct amdgpu_device *adev,
>                     unsigned client_id, unsigned src_id,
>                     struct amdgpu_irq_src *source);
>   void amdgpu_irq_dispatch(struct amdgpu_device *adev,
> -                      struct amdgpu_iv_entry *entry);
> +                      struct amdgpu_ih_ring *ih);
>   int amdgpu_irq_update(struct amdgpu_device *adev, struct amdgpu_irq_src *src,
>                     unsigned type);
>   int amdgpu_irq_get(struct amdgpu_device *adev, struct amdgpu_irq_src *src,

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

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

end of thread, other threads:[~2019-02-08 14:27 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-01-16 14:32 [PATCH] drm/amdgpu: cleanup amdgpu_ih_process a bit more Christian König
     [not found] ` <20190116143225.12909-1-christian.koenig-5C7GfCeVMHo@public.gmane.org>
2019-02-08 12:42   ` Christian König
     [not found]     ` <87ce1a30-b541-4a54-7686-bb552ab164f1-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2019-02-08 14:27       ` Kuehling, Felix

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.