From: Huang Rui <ray.huang-5C7GfCeVMHo@public.gmane.org>
To: "Christian König"
<ckoenig.leichtzumerken-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Cc: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org
Subject: Re: [PATCH 3/9] drm/amdgpu: cleanup amdgpu_ih.c
Date: Tue, 25 Sep 2018 18:28:24 +0800 [thread overview]
Message-ID: <20180925102823.GD30495@hr-amur2> (raw)
In-Reply-To: <20180924123820.1873-3-christian.koenig-5C7GfCeVMHo@public.gmane.org>
On Mon, Sep 24, 2018 at 02:38:14PM +0200, Christian König wrote:
> Cleanup amdgpu_ih.c to be able to handle multiple interrupt rings.
>
> Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Huang Rui <ray.huang@amd.com>
Will we have multiple interrupt rings in new asic?
Thanks,
Ray
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c | 152 ++++++++++++++------------------
> drivers/gpu/drm/amd/amdgpu/amdgpu_ih.h | 8 +-
> drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c | 2 +-
> drivers/gpu/drm/amd/amdgpu/cik_ih.c | 4 +-
> drivers/gpu/drm/amd/amdgpu/cz_ih.c | 4 +-
> drivers/gpu/drm/amd/amdgpu/iceland_ih.c | 4 +-
> drivers/gpu/drm/amd/amdgpu/si_ih.c | 4 +-
> drivers/gpu/drm/amd/amdgpu/tonga_ih.c | 4 +-
> drivers/gpu/drm/amd/amdgpu/vega10_ih.c | 4 +-
> 9 files changed, 84 insertions(+), 102 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c
> index 4ed86218cef3..15fb0f9738ab 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c
> @@ -26,44 +26,20 @@
> #include "amdgpu_ih.h"
> #include "amdgpu_amdkfd.h"
>
> -/**
> - * amdgpu_ih_ring_alloc - allocate memory for the IH ring
> - *
> - * @adev: amdgpu_device pointer
> - *
> - * Allocate a ring buffer for the interrupt controller.
> - * Returns 0 for success, errors for failure.
> - */
> -static int amdgpu_ih_ring_alloc(struct amdgpu_device *adev)
> -{
> - int r;
> -
> - /* Allocate ring buffer */
> - if (adev->irq.ih.ring_obj == NULL) {
> - r = amdgpu_bo_create_kernel(adev, adev->irq.ih.ring_size,
> - PAGE_SIZE, AMDGPU_GEM_DOMAIN_GTT,
> - &adev->irq.ih.ring_obj,
> - &adev->irq.ih.gpu_addr,
> - (void **)&adev->irq.ih.ring);
> - if (r) {
> - DRM_ERROR("amdgpu: failed to create ih ring buffer (%d).\n", r);
> - return r;
> - }
> - }
> - return 0;
> -}
> -
> /**
> * amdgpu_ih_ring_init - initialize the IH state
> *
> * @adev: amdgpu_device pointer
> + * @ih: ih ring to initialize
> + * @ring_size: ring size to allocate
> + * @use_bus_addr: true when we can use dma_alloc_coherent
> *
> * Initializes the IH state and allocates a buffer
> * for the IH ring buffer.
> * Returns 0 for success, errors for failure.
> */
> -int amdgpu_ih_ring_init(struct amdgpu_device *adev, unsigned ring_size,
> - bool use_bus_addr)
> +int amdgpu_ih_ring_init(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih,
> + unsigned ring_size, bool use_bus_addr)
> {
> u32 rb_bufsz;
> int r;
> @@ -71,70 +47,76 @@ int amdgpu_ih_ring_init(struct amdgpu_device *adev, unsigned ring_size,
> /* Align ring size */
> rb_bufsz = order_base_2(ring_size / 4);
> ring_size = (1 << rb_bufsz) * 4;
> - adev->irq.ih.ring_size = ring_size;
> - adev->irq.ih.ptr_mask = adev->irq.ih.ring_size - 1;
> - adev->irq.ih.rptr = 0;
> - adev->irq.ih.use_bus_addr = use_bus_addr;
> -
> - if (adev->irq.ih.use_bus_addr) {
> - if (!adev->irq.ih.ring) {
> - /* add 8 bytes for the rptr/wptr shadows and
> - * add them to the end of the ring allocation.
> - */
> - adev->irq.ih.ring = pci_alloc_consistent(adev->pdev,
> - adev->irq.ih.ring_size + 8,
> - &adev->irq.ih.rb_dma_addr);
> - if (adev->irq.ih.ring == NULL)
> - return -ENOMEM;
> - memset((void *)adev->irq.ih.ring, 0, adev->irq.ih.ring_size + 8);
> - adev->irq.ih.wptr_offs = (adev->irq.ih.ring_size / 4) + 0;
> - adev->irq.ih.rptr_offs = (adev->irq.ih.ring_size / 4) + 1;
> - }
> - return 0;
> + ih->ring_size = ring_size;
> + ih->ptr_mask = ih->ring_size - 1;
> + ih->rptr = 0;
> + ih->use_bus_addr = use_bus_addr;
> +
> + if (use_bus_addr) {
> + if (ih->ring)
> + return 0;
> +
> + /* add 8 bytes for the rptr/wptr shadows and
> + * add them to the end of the ring allocation.
> + */
> + ih->ring = dma_alloc_coherent(adev->dev, ih->ring_size + 8,
> + &ih->rb_dma_addr, GFP_KERNEL);
> + if (ih->ring == NULL)
> + return -ENOMEM;
> +
> + memset((void *)ih->ring, 0, ih->ring_size + 8);
> + ih->wptr_offs = (ih->ring_size / 4) + 0;
> + ih->rptr_offs = (ih->ring_size / 4) + 1;
> } else {
> - r = amdgpu_device_wb_get(adev, &adev->irq.ih.wptr_offs);
> + r = amdgpu_device_wb_get(adev, &ih->wptr_offs);
> + if (r)
> + return r;
> +
> + r = amdgpu_device_wb_get(adev, &ih->rptr_offs);
> if (r) {
> - dev_err(adev->dev, "(%d) ih wptr_offs wb alloc failed\n", r);
> + amdgpu_device_wb_free(adev, ih->wptr_offs);
> return r;
> }
>
> - r = amdgpu_device_wb_get(adev, &adev->irq.ih.rptr_offs);
> + r = amdgpu_bo_create_kernel(adev, ih->ring_size, PAGE_SIZE,
> + AMDGPU_GEM_DOMAIN_GTT,
> + &ih->ring_obj, &ih->gpu_addr,
> + (void **)&ih->ring);
> if (r) {
> - amdgpu_device_wb_free(adev, adev->irq.ih.wptr_offs);
> - dev_err(adev->dev, "(%d) ih rptr_offs wb alloc failed\n", r);
> + amdgpu_device_wb_free(adev, ih->rptr_offs);
> + amdgpu_device_wb_free(adev, ih->wptr_offs);
> return r;
> }
> -
> - return amdgpu_ih_ring_alloc(adev);
> }
> + return 0;
> }
>
> /**
> * amdgpu_ih_ring_fini - tear down the IH state
> *
> * @adev: amdgpu_device pointer
> + * @ih: ih ring to tear down
> *
> * Tears down the IH state and frees buffer
> * used for the IH ring buffer.
> */
> -void amdgpu_ih_ring_fini(struct amdgpu_device *adev)
> +void amdgpu_ih_ring_fini(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih)
> {
> - if (adev->irq.ih.use_bus_addr) {
> - if (adev->irq.ih.ring) {
> - /* add 8 bytes for the rptr/wptr shadows and
> - * add them to the end of the ring allocation.
> - */
> - pci_free_consistent(adev->pdev, adev->irq.ih.ring_size + 8,
> - (void *)adev->irq.ih.ring,
> - adev->irq.ih.rb_dma_addr);
> - adev->irq.ih.ring = NULL;
> - }
> + if (ih->use_bus_addr) {
> + if (!ih->ring)
> + return;
> +
> + /* add 8 bytes for the rptr/wptr shadows and
> + * add them to the end of the ring allocation.
> + */
> + dma_free_coherent(adev->dev, ih->ring_size + 8,
> + (void *)ih->ring, ih->rb_dma_addr);
> + ih->ring = NULL;
> } else {
> - amdgpu_bo_free_kernel(&adev->irq.ih.ring_obj,
> - &adev->irq.ih.gpu_addr,
> - (void **)&adev->irq.ih.ring);
> - amdgpu_device_wb_free(adev, adev->irq.ih.wptr_offs);
> - amdgpu_device_wb_free(adev, adev->irq.ih.rptr_offs);
> + amdgpu_bo_free_kernel(&ih->ring_obj, &ih->gpu_addr,
> + (void **)&ih->ring);
> + amdgpu_device_wb_free(adev, ih->wptr_offs);
> + amdgpu_device_wb_free(adev, ih->rptr_offs);
> }
> }
>
> @@ -142,56 +124,56 @@ void amdgpu_ih_ring_fini(struct amdgpu_device *adev)
> * amdgpu_ih_process - interrupt handler
> *
> * @adev: amdgpu_device pointer
> + * @ih: ih ring to process
> *
> * Interrupt hander (VI), walk the IH ring.
> * Returns irq process return code.
> */
> -int amdgpu_ih_process(struct amdgpu_device *adev)
> +int amdgpu_ih_process(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih)
> {
> struct amdgpu_iv_entry entry;
> u32 wptr;
>
> - if (!adev->irq.ih.enabled || adev->shutdown)
> + if (!ih->enabled || adev->shutdown)
> return IRQ_NONE;
>
> wptr = amdgpu_ih_get_wptr(adev);
>
> restart_ih:
> /* is somebody else already processing irqs? */
> - if (atomic_xchg(&adev->irq.ih.lock, 1))
> + if (atomic_xchg(&ih->lock, 1))
> return IRQ_NONE;
>
> - DRM_DEBUG("%s: rptr %d, wptr %d\n", __func__, adev->irq.ih.rptr, wptr);
> + DRM_DEBUG("%s: rptr %d, wptr %d\n", __func__, ih->rptr, wptr);
>
> /* Order reading of wptr vs. reading of IH ring data */
> rmb();
>
> - while (adev->irq.ih.rptr != wptr) {
> - u32 ring_index = adev->irq.ih.rptr >> 2;
> + while (ih->rptr != wptr) {
> + u32 ring_index = ih->rptr >> 2;
>
> /* Prescreening of high-frequency interrupts */
> if (!amdgpu_ih_prescreen_iv(adev)) {
> - adev->irq.ih.rptr &= adev->irq.ih.ptr_mask;
> + ih->rptr &= ih->ptr_mask;
> continue;
> }
>
> /* Before dispatching irq to IP blocks, send it to amdkfd */
> amdgpu_amdkfd_interrupt(adev,
> - (const void *) &adev->irq.ih.ring[ring_index]);
> + (const void *) &ih->ring[ring_index]);
>
> - entry.iv_entry = (const uint32_t *)
> - &adev->irq.ih.ring[ring_index];
> + entry.iv_entry = (const uint32_t *)&ih->ring[ring_index];
> amdgpu_ih_decode_iv(adev, &entry);
> - adev->irq.ih.rptr &= adev->irq.ih.ptr_mask;
> + ih->rptr &= ih->ptr_mask;
>
> amdgpu_irq_dispatch(adev, &entry);
> }
> amdgpu_ih_set_rptr(adev);
> - atomic_set(&adev->irq.ih.lock, 0);
> + atomic_set(&ih->lock, 0);
>
> /* make sure wptr hasn't changed while processing */
> wptr = amdgpu_ih_get_wptr(adev);
> - if (wptr != adev->irq.ih.rptr)
> + if (wptr != ih->rptr)
> goto restart_ih;
>
> return IRQ_HANDLED;
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.h
> index 0d5b3f5201d2..3e55f985005c 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.h
> @@ -82,9 +82,9 @@ struct amdgpu_ih_funcs {
> #define amdgpu_ih_decode_iv(adev, iv) (adev)->irq.ih_funcs->decode_iv((adev), (iv))
> #define amdgpu_ih_set_rptr(adev) (adev)->irq.ih_funcs->set_rptr((adev))
>
> -int amdgpu_ih_ring_init(struct amdgpu_device *adev, unsigned ring_size,
> - bool use_bus_addr);
> -void amdgpu_ih_ring_fini(struct amdgpu_device *adev);
> -int amdgpu_ih_process(struct amdgpu_device *adev);
> +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);
>
> #endif
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
> index b927e8798534..aaa8545e458a 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
> @@ -163,7 +163,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);
> + ret = amdgpu_ih_process(adev, &adev->irq.ih);
> if (ret == IRQ_HANDLED)
> pm_runtime_mark_last_busy(dev->dev);
> return ret;
> diff --git a/drivers/gpu/drm/amd/amdgpu/cik_ih.c b/drivers/gpu/drm/amd/amdgpu/cik_ih.c
> index e75183e09820..c37c4b76e7e9 100644
> --- a/drivers/gpu/drm/amd/amdgpu/cik_ih.c
> +++ b/drivers/gpu/drm/amd/amdgpu/cik_ih.c
> @@ -318,7 +318,7 @@ static int cik_ih_sw_init(void *handle)
> int r;
> struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>
> - r = amdgpu_ih_ring_init(adev, 64 * 1024, false);
> + r = amdgpu_ih_ring_init(adev, &adev->irq.ih, 64 * 1024, false);
> if (r)
> return r;
>
> @@ -332,7 +332,7 @@ static int cik_ih_sw_fini(void *handle)
> struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>
> amdgpu_irq_fini(adev);
> - amdgpu_ih_ring_fini(adev);
> + amdgpu_ih_ring_fini(adev, &adev->irq.ih);
> amdgpu_irq_remove_domain(adev);
>
> return 0;
> diff --git a/drivers/gpu/drm/amd/amdgpu/cz_ih.c b/drivers/gpu/drm/amd/amdgpu/cz_ih.c
> index 9385da1e1e40..306e0bd154fa 100644
> --- a/drivers/gpu/drm/amd/amdgpu/cz_ih.c
> +++ b/drivers/gpu/drm/amd/amdgpu/cz_ih.c
> @@ -297,7 +297,7 @@ static int cz_ih_sw_init(void *handle)
> int r;
> struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>
> - r = amdgpu_ih_ring_init(adev, 64 * 1024, false);
> + r = amdgpu_ih_ring_init(adev, &adev->irq.ih, 64 * 1024, false);
> if (r)
> return r;
>
> @@ -311,7 +311,7 @@ static int cz_ih_sw_fini(void *handle)
> struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>
> amdgpu_irq_fini(adev);
> - amdgpu_ih_ring_fini(adev);
> + amdgpu_ih_ring_fini(adev, &adev->irq.ih);
> amdgpu_irq_remove_domain(adev);
>
> return 0;
> diff --git a/drivers/gpu/drm/amd/amdgpu/iceland_ih.c b/drivers/gpu/drm/amd/amdgpu/iceland_ih.c
> index 45ef0a818e11..9005deeec612 100644
> --- a/drivers/gpu/drm/amd/amdgpu/iceland_ih.c
> +++ b/drivers/gpu/drm/amd/amdgpu/iceland_ih.c
> @@ -297,7 +297,7 @@ static int iceland_ih_sw_init(void *handle)
> int r;
> struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>
> - r = amdgpu_ih_ring_init(adev, 64 * 1024, false);
> + r = amdgpu_ih_ring_init(adev, &adev->irq.ih, 64 * 1024, false);
> if (r)
> return r;
>
> @@ -311,7 +311,7 @@ static int iceland_ih_sw_fini(void *handle)
> struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>
> amdgpu_irq_fini(adev);
> - amdgpu_ih_ring_fini(adev);
> + amdgpu_ih_ring_fini(adev, &adev->irq.ih);
> amdgpu_irq_remove_domain(adev);
>
> return 0;
> diff --git a/drivers/gpu/drm/amd/amdgpu/si_ih.c b/drivers/gpu/drm/amd/amdgpu/si_ih.c
> index 97711d327527..acdf6075957a 100644
> --- a/drivers/gpu/drm/amd/amdgpu/si_ih.c
> +++ b/drivers/gpu/drm/amd/amdgpu/si_ih.c
> @@ -170,7 +170,7 @@ static int si_ih_sw_init(void *handle)
> int r;
> struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>
> - r = amdgpu_ih_ring_init(adev, 64 * 1024, false);
> + r = amdgpu_ih_ring_init(adev, &adev->irq.ih, 64 * 1024, false);
> if (r)
> return r;
>
> @@ -182,7 +182,7 @@ static int si_ih_sw_fini(void *handle)
> struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>
> amdgpu_irq_fini(adev);
> - amdgpu_ih_ring_fini(adev);
> + amdgpu_ih_ring_fini(adev, &adev->irq.ih);
>
> return 0;
> }
> diff --git a/drivers/gpu/drm/amd/amdgpu/tonga_ih.c b/drivers/gpu/drm/amd/amdgpu/tonga_ih.c
> index a79a3776888a..83fdf810ffc7 100644
> --- a/drivers/gpu/drm/amd/amdgpu/tonga_ih.c
> +++ b/drivers/gpu/drm/amd/amdgpu/tonga_ih.c
> @@ -317,7 +317,7 @@ static int tonga_ih_sw_init(void *handle)
> int r;
> struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>
> - r = amdgpu_ih_ring_init(adev, 64 * 1024, true);
> + r = amdgpu_ih_ring_init(adev, &adev->irq.ih, 64 * 1024, true);
> if (r)
> return r;
>
> @@ -334,7 +334,7 @@ static int tonga_ih_sw_fini(void *handle)
> struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>
> amdgpu_irq_fini(adev);
> - amdgpu_ih_ring_fini(adev);
> + amdgpu_ih_ring_fini(adev, &adev->irq.ih);
> amdgpu_irq_remove_domain(adev);
>
> return 0;
> diff --git a/drivers/gpu/drm/amd/amdgpu/vega10_ih.c b/drivers/gpu/drm/amd/amdgpu/vega10_ih.c
> index 37487b4cbd6e..a99f71797aa3 100644
> --- a/drivers/gpu/drm/amd/amdgpu/vega10_ih.c
> +++ b/drivers/gpu/drm/amd/amdgpu/vega10_ih.c
> @@ -380,7 +380,7 @@ static int vega10_ih_sw_init(void *handle)
> int r;
> struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>
> - r = amdgpu_ih_ring_init(adev, 256 * 1024, true);
> + r = amdgpu_ih_ring_init(adev, &adev->irq.ih, 256 * 1024, true);
> if (r)
> return r;
>
> @@ -397,7 +397,7 @@ static int vega10_ih_sw_fini(void *handle)
> struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>
> amdgpu_irq_fini(adev);
> - amdgpu_ih_ring_fini(adev);
> + amdgpu_ih_ring_fini(adev, &adev->irq.ih);
>
> return 0;
> }
> --
> 2.14.1
>
> _______________________________________________
> 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
next prev parent reply other threads:[~2018-09-25 10:28 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-09-24 12:38 [PATCH 1/9] drm/amdgpu: drop extra newline in amdgpu_iv trace Christian König
[not found] ` <20180924123820.1873-1-christian.koenig-5C7GfCeVMHo@public.gmane.org>
2018-09-24 12:38 ` [PATCH 2/9] drm/amdgpu: make function pointers mandatory Christian König
[not found] ` <20180924123820.1873-2-christian.koenig-5C7GfCeVMHo@public.gmane.org>
2018-09-25 10:03 ` Huang Rui
2018-09-24 12:38 ` [PATCH 3/9] drm/amdgpu: cleanup amdgpu_ih.c Christian König
[not found] ` <20180924123820.1873-3-christian.koenig-5C7GfCeVMHo@public.gmane.org>
2018-09-25 10:28 ` Huang Rui [this message]
2018-09-25 11:01 ` Christian König
[not found] ` <ea1b4ebf-c4ee-c03b-b3e7-6f66df831373-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2018-09-26 8:52 ` Huang, Ray
[not found] ` <BY2PR12MB0040B93400AD69D00699F870EC150-K//h7OWB4q7Zvl48JdS6+wdYzm3356FpvxpqHgZTriW3zl9H0oFU5g@public.gmane.org>
2018-09-26 8:57 ` Christian König
[not found] ` <366f6d5f-67f8-0d86-274c-bf93a59c60d3-5C7GfCeVMHo@public.gmane.org>
2018-09-26 10:36 ` Huang, Ray
2018-09-24 12:38 ` [PATCH 4/9] drm/amdgpu: move more interrupt processing into amdgpu_irq.c Christian König
[not found] ` <20180924123820.1873-4-christian.koenig-5C7GfCeVMHo@public.gmane.org>
2018-09-26 6:13 ` Huang Rui
2018-09-24 12:38 ` [PATCH 5/9] drm/amdgpu: move more defines into amdgpu_irq.h Christian König
[not found] ` <20180924123820.1873-5-christian.koenig-5C7GfCeVMHo@public.gmane.org>
2018-09-26 6:14 ` Huang Rui
2018-09-24 12:38 ` [PATCH 6/9] drm/amdgpu: separate IH and IRQ funcs Christian König
[not found] ` <20180924123820.1873-6-christian.koenig-5C7GfCeVMHo@public.gmane.org>
2018-09-26 6:05 ` Huang Rui
2018-09-26 8:09 ` Christian König
[not found] ` <39fb9a51-2e85-0828-a193-b54059dec405-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2018-09-26 9:16 ` Huang, Ray
[not found] ` <BY2PR12MB00400B029B1F4C1256CE558AEC150-K//h7OWB4q7Zvl48JdS6+wdYzm3356FpvxpqHgZTriW3zl9H0oFU5g@public.gmane.org>
2018-09-26 9:18 ` Christian König
2018-09-24 12:38 ` [PATCH 7/9] drm/amdgpu: add IH ring to ih_get_wptr/ih_set_rptr Christian König
[not found] ` <20180924123820.1873-7-christian.koenig-5C7GfCeVMHo@public.gmane.org>
2018-09-26 7:36 ` Huang Rui
2018-09-26 7:40 ` Huang Rui
2018-09-24 12:38 ` [PATCH 8/9] drm/amdgpu: simplify IH programming Christian König
[not found] ` <20180924123820.1873-8-christian.koenig-5C7GfCeVMHo@public.gmane.org>
2018-09-26 8:48 ` Huang, Ray
2018-09-24 12:38 ` [PATCH 9/9] drm/amdgpu: enable IH ring 1 and ring 2 Christian König
[not found] ` <20180924123820.1873-9-christian.koenig-5C7GfCeVMHo@public.gmane.org>
2018-09-26 8:49 ` Huang, Ray
2018-09-25 9:54 ` [PATCH 1/9] drm/amdgpu: drop extra newline in amdgpu_iv trace Huang Rui
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=20180925102823.GD30495@hr-amur2 \
--to=ray.huang-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