* [PATCH 1/3] drm/amdgpu: add infrastructure for soft IH ring
@ 2020-11-02 11:33 Christian König
2020-11-02 11:33 ` [PATCH 2/3] drm/amdgpu: enabled software IH ring for Vega Christian König
2020-11-02 11:33 ` [PATCH 3/3] drm/amdgpu: make sure retry faults are handled in a work item on Vega Christian König
0 siblings, 2 replies; 7+ messages in thread
From: Christian König @ 2020-11-02 11:33 UTC (permalink / raw)
To: amd-gfx, felix.kuehling
Add a soft IH ring implementation similar to the hardware IH1/2.
This can be used if the hardware delegation of interrupts to IH1/2
doesn't work for some reason.
Signed-off-by: Christian König <christian.koenig@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c | 29 ++++++++++++++++++++
drivers/gpu/drm/amd/amdgpu/amdgpu_ih.h | 2 ++
drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c | 35 +++++++++++++++++++++++++
drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h | 8 ++++--
4 files changed, 72 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c
index 111a301ce878..dcd9b4a8e20b 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c
@@ -131,6 +131,35 @@ void amdgpu_ih_ring_fini(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih)
}
}
+/**
+ * amdgpu_ih_ring_write - write IV to the ring buffer
+ *
+ * @ih: ih ring to write to
+ * @iv: the iv to write
+ * @num_dw: size of the iv in dw
+ *
+ * Writes an IV to the ring buffer using the CPU and increment the wptr.
+ * Used for testing and delegating IVs to a software ring.
+ */
+void amdgpu_ih_ring_write(struct amdgpu_ih_ring *ih, const uint32_t *iv,
+ unsigned int num_dw)
+{
+ uint32_t wptr = le32_to_cpu(*ih->wptr_cpu) >> 2;
+ unsigned int i;
+
+ for (i = 0; i < num_dw; ++i)
+ ih->ring[wptr++] = cpu_to_le32(iv[i]);
+
+ wptr <<= 2;
+ wptr &= ih->ptr_mask;
+
+ /* Only commit the new wptr if we don't overflow */
+ if (wptr != READ_ONCE(ih->rptr)) {
+ wmb();
+ WRITE_ONCE(*ih->wptr_cpu, cpu_to_le32(wptr));
+ }
+}
+
/**
* amdgpu_ih_process - interrupt handler
*
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.h
index 4e0bb645176d..3c9cfe7eecff 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.h
@@ -72,6 +72,8 @@ 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);
+void amdgpu_ih_ring_write(struct amdgpu_ih_ring *ih, const uint32_t *iv,
+ unsigned int num_dw);
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 300ac73b4738..bea57e8e793f 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
@@ -206,6 +206,21 @@ static void amdgpu_irq_handle_ih2(struct work_struct *work)
amdgpu_ih_process(adev, &adev->irq.ih2);
}
+/**
+ * amdgpu_irq_handle_ih_soft - kick of processing for ih_soft
+ *
+ * @work: work structure in struct amdgpu_irq
+ *
+ * Kick of processing IH soft ring.
+ */
+static void amdgpu_irq_handle_ih_soft(struct work_struct *work)
+{
+ struct amdgpu_device *adev = container_of(work, struct amdgpu_device,
+ irq.ih_soft_work);
+
+ amdgpu_ih_process(adev, &adev->irq.ih_soft);
+}
+
/**
* amdgpu_msi_ok - check whether MSI functionality is enabled
*
@@ -281,6 +296,7 @@ int amdgpu_irq_init(struct amdgpu_device *adev)
INIT_WORK(&adev->irq.ih1_work, amdgpu_irq_handle_ih1);
INIT_WORK(&adev->irq.ih2_work, amdgpu_irq_handle_ih2);
+ INIT_WORK(&adev->irq.ih_soft_work, amdgpu_irq_handle_ih_soft);
adev->irq.installed = true;
/* Use vector 0 for MSI-X */
@@ -413,6 +429,7 @@ void amdgpu_irq_dispatch(struct amdgpu_device *adev,
bool handled = false;
int r;
+ entry.ih = ih;
entry.iv_entry = (const uint32_t *)&ih->ring[ring_index];
amdgpu_ih_decode_iv(adev, &entry);
@@ -450,6 +467,24 @@ void amdgpu_irq_dispatch(struct amdgpu_device *adev,
amdgpu_amdkfd_interrupt(adev, entry.iv_entry);
}
+/**
+ * amdgpu_irq_delegate - delegate IV to soft IH ring
+ *
+ * @adev: amdgpu device pointer
+ * @entry: IV entry
+ * @num_dw: size of IV
+ *
+ * Delegate the IV to the soft IH ring and schedule processing of it. Used
+ * if the hardware delegation to IH1 or IH2 doesn't work for some reason.
+ */
+void amdgpu_irq_delegate(struct amdgpu_device *adev,
+ struct amdgpu_iv_entry *entry,
+ unsigned int num_dw)
+{
+ amdgpu_ih_ring_write(&adev->irq.ih_soft, entry->iv_entry, num_dw);
+ schedule_work(&adev->irq.ih_soft_work);
+}
+
/**
* amdgpu_irq_update - update hardware interrupt state
*
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h
index c718e94a55c9..ac527e5deae6 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h
@@ -44,6 +44,7 @@ enum amdgpu_interrupt_state {
};
struct amdgpu_iv_entry {
+ struct amdgpu_ih_ring *ih;
unsigned client_id;
unsigned src_id;
unsigned ring_id;
@@ -88,9 +89,9 @@ struct amdgpu_irq {
bool msi_enabled; /* msi enabled */
/* interrupt rings */
- struct amdgpu_ih_ring ih, ih1, ih2;
+ struct amdgpu_ih_ring ih, ih1, ih2, ih_soft;
const struct amdgpu_ih_funcs *ih_funcs;
- struct work_struct ih1_work, ih2_work;
+ struct work_struct ih1_work, ih2_work, ih_soft_work;
struct amdgpu_irq_src self_irq;
/* gen irq stuff */
@@ -109,6 +110,9 @@ int amdgpu_irq_add_id(struct amdgpu_device *adev,
struct amdgpu_irq_src *source);
void amdgpu_irq_dispatch(struct amdgpu_device *adev,
struct amdgpu_ih_ring *ih);
+void amdgpu_irq_delegate(struct amdgpu_device *adev,
+ struct amdgpu_iv_entry *entry,
+ unsigned int num_dw);
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.25.1
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/3] drm/amdgpu: enabled software IH ring for Vega
2020-11-02 11:33 [PATCH 1/3] drm/amdgpu: add infrastructure for soft IH ring Christian König
@ 2020-11-02 11:33 ` Christian König
2020-11-02 18:53 ` Alex Deucher
2020-11-02 11:33 ` [PATCH 3/3] drm/amdgpu: make sure retry faults are handled in a work item on Vega Christian König
1 sibling, 1 reply; 7+ messages in thread
From: Christian König @ 2020-11-02 11:33 UTC (permalink / raw)
To: amd-gfx, felix.kuehling
Seems like we won't get the hardware IH1/2 rings on Vega20 working.
Signed-off-by: Christian König <christian.koenig@amd.com>
---
drivers/gpu/drm/amd/amdgpu/vega10_ih.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/drivers/gpu/drm/amd/amdgpu/vega10_ih.c b/drivers/gpu/drm/amd/amdgpu/vega10_ih.c
index 407c6093c2ec..cef61dd46a37 100644
--- a/drivers/gpu/drm/amd/amdgpu/vega10_ih.c
+++ b/drivers/gpu/drm/amd/amdgpu/vega10_ih.c
@@ -91,6 +91,9 @@ static void vega10_ih_enable_interrupts(struct amdgpu_device *adev)
}
adev->irq.ih2.enabled = true;
}
+
+ if (adev->irq.ih_soft.ring_size)
+ adev->irq.ih_soft.enabled = true;
}
/**
@@ -606,6 +609,10 @@ static int vega10_ih_sw_init(void *handle)
adev->irq.ih2.use_doorbell = true;
adev->irq.ih2.doorbell_index = (adev->doorbell_index.ih + 2) << 1;
+ r = amdgpu_ih_ring_init(adev, &adev->irq.ih_soft, PAGE_SIZE, true);
+ if (r)
+ return r;
+
r = amdgpu_irq_init(adev);
return r;
--
2.25.1
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 3/3] drm/amdgpu: make sure retry faults are handled in a work item on Vega
2020-11-02 11:33 [PATCH 1/3] drm/amdgpu: add infrastructure for soft IH ring Christian König
2020-11-02 11:33 ` [PATCH 2/3] drm/amdgpu: enabled software IH ring for Vega Christian König
@ 2020-11-02 11:33 ` Christian König
1 sibling, 0 replies; 7+ messages in thread
From: Christian König @ 2020-11-02 11:33 UTC (permalink / raw)
To: amd-gfx, felix.kuehling
Looks like we can't enabled the IH1/IH2 feature for Vega20, make sure
retry faults are handled on a separate ring anyway.
Signed-off-by: Christian König <christian.koenig@amd.com>
---
drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 31 ++++++++++++++++++++-------
1 file changed, 23 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
index 0c3421d587e8..32a6c15c2e08 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
@@ -524,14 +524,29 @@ static int gmc_v9_0_process_interrupt(struct amdgpu_device *adev,
addr = (u64)entry->src_data[0] << 12;
addr |= ((u64)entry->src_data[1] & 0xf) << 44;
- if (retry_fault && amdgpu_gmc_filter_faults(adev, addr, entry->pasid,
- entry->timestamp))
- return 1; /* This also prevents sending it to KFD */
-
- /* If it's the first fault for this address, process it normally */
- if (retry_fault && !in_interrupt() &&
- amdgpu_vm_handle_fault(adev, entry->pasid, addr))
- return 1; /* This also prevents sending it to KFD */
+ if (retry_fault) {
+ /* Returning 1 here also prevents sending the IV to the KFD */
+
+ /* Process it onyl if it's the first fault for this address */
+ if (entry->ih != &adev->irq.ih_soft &&
+ amdgpu_gmc_filter_faults(adev, addr, entry->pasid,
+ entry->timestamp))
+ return 1;
+
+ /* Delegate it to a different ring if the hardware hasn't
+ * already done it.
+ */
+ if (in_interrupt()) {
+ amdgpu_irq_delegate(adev, entry, 8);
+ return 1;
+ }
+
+ /* Try to handle the recoverable page faults by filling page
+ * tables
+ */
+ if (amdgpu_vm_handle_fault(adev, entry->pasid, addr))
+ return 1;
+ }
if (!printk_ratelimit())
return 0;
--
2.25.1
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 2/3] drm/amdgpu: enabled software IH ring for Vega
2020-11-02 11:33 ` [PATCH 2/3] drm/amdgpu: enabled software IH ring for Vega Christian König
@ 2020-11-02 18:53 ` Alex Deucher
2020-11-02 18:59 ` Felix Kuehling
0 siblings, 1 reply; 7+ messages in thread
From: Alex Deucher @ 2020-11-02 18:53 UTC (permalink / raw)
To: Christian König; +Cc: Kuehling, Felix, amd-gfx list
On Mon, Nov 2, 2020 at 6:34 AM Christian König
<ckoenig.leichtzumerken@gmail.com> wrote:
>
> Seems like we won't get the hardware IH1/2 rings on Vega20 working.
>
> Signed-off-by: Christian König <christian.koenig@amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/vega10_ih.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/vega10_ih.c b/drivers/gpu/drm/amd/amdgpu/vega10_ih.c
> index 407c6093c2ec..cef61dd46a37 100644
> --- a/drivers/gpu/drm/amd/amdgpu/vega10_ih.c
> +++ b/drivers/gpu/drm/amd/amdgpu/vega10_ih.c
> @@ -91,6 +91,9 @@ static void vega10_ih_enable_interrupts(struct amdgpu_device *adev)
> }
> adev->irq.ih2.enabled = true;
> }
> +
> + if (adev->irq.ih_soft.ring_size)
> + adev->irq.ih_soft.enabled = true;
> }
>
> /**
> @@ -606,6 +609,10 @@ static int vega10_ih_sw_init(void *handle)
> adev->irq.ih2.use_doorbell = true;
> adev->irq.ih2.doorbell_index = (adev->doorbell_index.ih + 2) << 1;
>
> + r = amdgpu_ih_ring_init(adev, &adev->irq.ih_soft, PAGE_SIZE, true);
> + if (r)
> + return r;
> +
Should we only enable this on vega20?
Alex
> r = amdgpu_irq_init(adev);
>
> return r;
> --
> 2.25.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
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 2/3] drm/amdgpu: enabled software IH ring for Vega
2020-11-02 18:53 ` Alex Deucher
@ 2020-11-02 18:59 ` Felix Kuehling
2020-11-02 19:58 ` Christian König
0 siblings, 1 reply; 7+ messages in thread
From: Felix Kuehling @ 2020-11-02 18:59 UTC (permalink / raw)
To: Alex Deucher, Christian König; +Cc: amd-gfx list
Am 2020-11-02 um 1:53 p.m. schrieb Alex Deucher:
> On Mon, Nov 2, 2020 at 6:34 AM Christian König
> <ckoenig.leichtzumerken@gmail.com> wrote:
>> Seems like we won't get the hardware IH1/2 rings on Vega20 working.
>>
>> Signed-off-by: Christian König <christian.koenig@amd.com>
>> ---
>> drivers/gpu/drm/amd/amdgpu/vega10_ih.c | 7 +++++++
>> 1 file changed, 7 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/vega10_ih.c b/drivers/gpu/drm/amd/amdgpu/vega10_ih.c
>> index 407c6093c2ec..cef61dd46a37 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/vega10_ih.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/vega10_ih.c
>> @@ -91,6 +91,9 @@ static void vega10_ih_enable_interrupts(struct amdgpu_device *adev)
>> }
>> adev->irq.ih2.enabled = true;
>> }
>> +
>> + if (adev->irq.ih_soft.ring_size)
>> + adev->irq.ih_soft.enabled = true;
>> }
>>
>> /**
>> @@ -606,6 +609,10 @@ static int vega10_ih_sw_init(void *handle)
>> adev->irq.ih2.use_doorbell = true;
>> adev->irq.ih2.doorbell_index = (adev->doorbell_index.ih + 2) << 1;
>>
>> + r = amdgpu_ih_ring_init(adev, &adev->irq.ih_soft, PAGE_SIZE, true);
>> + if (r)
>> + return r;
>> +
> Should we only enable this on vega20?
It affects other GPUs as well. Including probably some Navi GPUs. We'll
probably need a similar change in navi10_ih.c.
Is there a way to reliably detect whether IH redirection works. Or do we
need to allocate the soft IH ring unconditionally?
Regards,
Felix
>
> Alex
>
>
>> r = amdgpu_irq_init(adev);
>>
>> return r;
>> --
>> 2.25.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
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 2/3] drm/amdgpu: enabled software IH ring for Vega
2020-11-02 18:59 ` Felix Kuehling
@ 2020-11-02 19:58 ` Christian König
2020-11-03 13:26 ` Christian König
0 siblings, 1 reply; 7+ messages in thread
From: Christian König @ 2020-11-02 19:58 UTC (permalink / raw)
To: Felix Kuehling, Alex Deucher; +Cc: amd-gfx list
Am 02.11.20 um 19:59 schrieb Felix Kuehling:
> Am 2020-11-02 um 1:53 p.m. schrieb Alex Deucher:
>> On Mon, Nov 2, 2020 at 6:34 AM Christian König
>> <ckoenig.leichtzumerken@gmail.com> wrote:
>>> Seems like we won't get the hardware IH1/2 rings on Vega20 working.
>>>
>>> Signed-off-by: Christian König <christian.koenig@amd.com>
>>> ---
>>> drivers/gpu/drm/amd/amdgpu/vega10_ih.c | 7 +++++++
>>> 1 file changed, 7 insertions(+)
>>>
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/vega10_ih.c b/drivers/gpu/drm/amd/amdgpu/vega10_ih.c
>>> index 407c6093c2ec..cef61dd46a37 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/vega10_ih.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/vega10_ih.c
>>> @@ -91,6 +91,9 @@ static void vega10_ih_enable_interrupts(struct amdgpu_device *adev)
>>> }
>>> adev->irq.ih2.enabled = true;
>>> }
>>> +
>>> + if (adev->irq.ih_soft.ring_size)
>>> + adev->irq.ih_soft.enabled = true;
>>> }
>>>
>>> /**
>>> @@ -606,6 +609,10 @@ static int vega10_ih_sw_init(void *handle)
>>> adev->irq.ih2.use_doorbell = true;
>>> adev->irq.ih2.doorbell_index = (adev->doorbell_index.ih + 2) << 1;
>>>
>>> + r = amdgpu_ih_ring_init(adev, &adev->irq.ih_soft, PAGE_SIZE, true);
>>> + if (r)
>>> + return r;
>>> +
>> Should we only enable this on vega20?
> It affects other GPUs as well. Including probably some Navi GPUs. We'll
> probably need a similar change in navi10_ih.c.
>
> Is there a way to reliably detect whether IH redirection works. Or do we
> need to allocate the soft IH ring unconditionally?
We can allocate it unconditionally on Vega and Navi, it's just a single
page ring buffer which is only used when needed.
What worries me more is that testing shows that I can't even enable IV
tracing or risk that a single CPU becomes so busy with processing IVs
that I get "stuck for 23 seconds" warnings.
We *really* need the hardware to work correctly either by using the CAM
for filtering page faults or by redirecting them to the different IH ring.
Regards,
Christian.
>
> Regards,
> Felix
>
>
>> Alex
>>
>>
>>> r = amdgpu_irq_init(adev);
>>>
>>> return r;
>>> --
>>> 2.25.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
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 2/3] drm/amdgpu: enabled software IH ring for Vega
2020-11-02 19:58 ` Christian König
@ 2020-11-03 13:26 ` Christian König
0 siblings, 0 replies; 7+ messages in thread
From: Christian König @ 2020-11-03 13:26 UTC (permalink / raw)
To: Felix Kuehling, Alex Deucher; +Cc: amd-gfx list
Am 02.11.20 um 20:58 schrieb Christian König:
> Am 02.11.20 um 19:59 schrieb Felix Kuehling:
>> Am 2020-11-02 um 1:53 p.m. schrieb Alex Deucher:
>>> On Mon, Nov 2, 2020 at 6:34 AM Christian König
>>> <ckoenig.leichtzumerken@gmail.com> wrote:
>>>> Seems like we won't get the hardware IH1/2 rings on Vega20 working.
>>>>
>>>> Signed-off-by: Christian König <christian.koenig@amd.com>
>>>> ---
>>>> drivers/gpu/drm/amd/amdgpu/vega10_ih.c | 7 +++++++
>>>> 1 file changed, 7 insertions(+)
>>>>
>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/vega10_ih.c
>>>> b/drivers/gpu/drm/amd/amdgpu/vega10_ih.c
>>>> index 407c6093c2ec..cef61dd46a37 100644
>>>> --- a/drivers/gpu/drm/amd/amdgpu/vega10_ih.c
>>>> +++ b/drivers/gpu/drm/amd/amdgpu/vega10_ih.c
>>>> @@ -91,6 +91,9 @@ static void vega10_ih_enable_interrupts(struct
>>>> amdgpu_device *adev)
>>>> }
>>>> adev->irq.ih2.enabled = true;
>>>> }
>>>> +
>>>> + if (adev->irq.ih_soft.ring_size)
>>>> + adev->irq.ih_soft.enabled = true;
>>>> }
>>>>
>>>> /**
>>>> @@ -606,6 +609,10 @@ static int vega10_ih_sw_init(void *handle)
>>>> adev->irq.ih2.use_doorbell = true;
>>>> adev->irq.ih2.doorbell_index = (adev->doorbell_index.ih +
>>>> 2) << 1;
>>>>
>>>> + r = amdgpu_ih_ring_init(adev, &adev->irq.ih_soft,
>>>> PAGE_SIZE, true);
>>>> + if (r)
>>>> + return r;
>>>> +
>>> Should we only enable this on vega20?
>> It affects other GPUs as well. Including probably some Navi GPUs. We'll
>> probably need a similar change in navi10_ih.c.
And gmc_v10.c doesn't even have the recoverable page fault handling yet.
Going to add that as well.
Christian.
>> Is there a way to reliably detect whether IH redirection works. Or do we
>> need to allocate the soft IH ring unconditionally?
>
> We can allocate it unconditionally on Vega and Navi, it's just a
> single page ring buffer which is only used when needed.
>
> What worries me more is that testing shows that I can't even enable IV
> tracing or risk that a single CPU becomes so busy with processing IVs
> that I get "stuck for 23 seconds" warnings.
>
> We *really* need the hardware to work correctly either by using the
> CAM for filtering page faults or by redirecting them to the different
> IH ring.
>
> Regards,
> Christian.
>
>>
>> Regards,
>> Felix
>>
>>
>>> Alex
>>>
>>>
>>>> r = amdgpu_irq_init(adev);
>>>>
>>>> return r;
>>>> --
>>>> 2.25.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
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2020-11-03 13:26 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-11-02 11:33 [PATCH 1/3] drm/amdgpu: add infrastructure for soft IH ring Christian König
2020-11-02 11:33 ` [PATCH 2/3] drm/amdgpu: enabled software IH ring for Vega Christian König
2020-11-02 18:53 ` Alex Deucher
2020-11-02 18:59 ` Felix Kuehling
2020-11-02 19:58 ` Christian König
2020-11-03 13:26 ` Christian König
2020-11-02 11:33 ` [PATCH 3/3] drm/amdgpu: make sure retry faults are handled in a work item on Vega Christian König
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).