From: "Kuehling, Felix" <Felix.Kuehling-5C7GfCeVMHo@public.gmane.org>
To: "Christian König"
<ckoenig.leichtzumerken-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
"amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org"
<amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org>
Cc: "Yang, Philip" <Philip.Yang-5C7GfCeVMHo@public.gmane.org>
Subject: Re: [PATCH 1/2] drm/amdgpu: cleanup amdgpu_ih_process a bit more
Date: Thu, 31 Jan 2019 21:39:19 +0000 [thread overview]
Message-ID: <2ea91ccb-8dc0-af1a-96cd-bc8a2f018b32@amd.com> (raw)
In-Reply-To: <20190124125256.9900-1-christian.koenig-5C7GfCeVMHo@public.gmane.org>
On 2019-01-24 7:52 a.m., Christian König wrote:
> Remove the callback and call the dispatcher directly.
>
> Signed-off-by: Christian König <christian.koenig@amd.com>
This patch is Reviewed-by: Felix Kuehling <Felix.Kuehling@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
prev parent reply other threads:[~2019-01-31 21:39 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-24 12:52 [PATCH 1/2] drm/amdgpu: cleanup amdgpu_ih_process a bit more Christian König
[not found] ` <20190124125256.9900-1-christian.koenig-5C7GfCeVMHo@public.gmane.org>
2019-01-24 12:52 ` [PATCH 2/2] drm/amdgpu: use ring buffer for fault handling on GMC 9 Christian König
[not found] ` <20190124125256.9900-2-christian.koenig-5C7GfCeVMHo@public.gmane.org>
2019-01-31 21:38 ` Kuehling, Felix
[not found] ` <39534cbd-d199-8a3d-2a8b-51f9d09e06e0-5C7GfCeVMHo@public.gmane.org>
2019-02-01 13:23 ` Christian König
[not found] ` <540f3688-6382-2cd1-f24c-aa378e7f596f-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2019-02-01 16:42 ` Kuehling, Felix
[not found] ` <1ca341ae-1502-6c02-bac4-6bb36d687083-5C7GfCeVMHo@public.gmane.org>
2019-02-01 17:06 ` Koenig, Christian
2019-01-31 21:39 ` Kuehling, Felix [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2ea91ccb-8dc0-af1a-96cd-bc8a2f018b32@amd.com \
--to=felix.kuehling-5c7gfcevmho@public.gmane.org \
--cc=Philip.Yang-5C7GfCeVMHo@public.gmane.org \
--cc=amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
--cc=ckoenig.leichtzumerken-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox