diff mbox series

[v5,11/13] hw/riscv/riscv-iommu: Add another irq for mrif notifications

Message ID 20240708173501.426225-12-dbarboza@ventanamicro.com (mailing list archive)
State New, archived
Headers show
Series riscv: QEMU RISC-V IOMMU Support | expand

Commit Message

Daniel Henrique Barboza July 8, 2024, 5:34 p.m. UTC
From: Andrew Jones <ajones@ventanamicro.com>

And add mrif notification trace.

Signed-off-by: Andrew Jones <ajones@ventanamicro.com>
Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
Reviewed-by: Frank Chang <frank.chang@sifive.com>
---
 hw/riscv/riscv-iommu-pci.c | 2 +-
 hw/riscv/riscv-iommu.c     | 1 +
 hw/riscv/trace-events      | 1 +
 3 files changed, 3 insertions(+), 1 deletion(-)

Comments

Jason Chien July 23, 2024, 3:25 p.m. UTC | #1
Hi Daniel,

On 2024/7/9 上午 01:34, Daniel Henrique Barboza wrote:
> From: Andrew Jones <ajones@ventanamicro.com>
>
> And add mrif notification trace.
>
> Signed-off-by: Andrew Jones <ajones@ventanamicro.com>
> Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
> Reviewed-by: Frank Chang <frank.chang@sifive.com>
> ---
>   hw/riscv/riscv-iommu-pci.c | 2 +-
>   hw/riscv/riscv-iommu.c     | 1 +
>   hw/riscv/trace-events      | 1 +
>   3 files changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/hw/riscv/riscv-iommu-pci.c b/hw/riscv/riscv-iommu-pci.c
> index 7b82ce0645..d7e5f20885 100644
> --- a/hw/riscv/riscv-iommu-pci.c
> +++ b/hw/riscv/riscv-iommu-pci.c
> @@ -81,7 +81,7 @@ static void riscv_iommu_pci_realize(PCIDevice *dev, Error **errp)
>       pci_register_bar(dev, 0, PCI_BASE_ADDRESS_SPACE_MEMORY |
>                        PCI_BASE_ADDRESS_MEM_TYPE_64, &s->bar0);
>   
> -    int ret = msix_init(dev, RISCV_IOMMU_INTR_COUNT,
> +    int ret = msix_init(dev, RISCV_IOMMU_INTR_COUNT + 1,
The new interrupt is not marked as used with msix_vector_use().
>                           &s->bar0, 0, RISCV_IOMMU_REG_MSI_CONFIG,
>                           &s->bar0, 0, RISCV_IOMMU_REG_MSI_CONFIG + 256, 0, &err);
>   
> diff --git a/hw/riscv/riscv-iommu.c b/hw/riscv/riscv-iommu.c
> index 2985a49e53..c9ac3d348b 100644
> --- a/hw/riscv/riscv-iommu.c
> +++ b/hw/riscv/riscv-iommu.c
> @@ -621,6 +621,7 @@ static MemTxResult riscv_iommu_msi_write(RISCVIOMMUState *s,
>           cause = RISCV_IOMMU_FQ_CAUSE_MSI_WR_FAULT;
>           goto err;
>       }
> +    trace_riscv_iommu_mrif_notification(s->parent_obj.id, n190, addr);
>   
>       return MEMTX_OK;
>   
> diff --git a/hw/riscv/trace-events b/hw/riscv/trace-events
> index 4b486b6420..d69719a27a 100644
> --- a/hw/riscv/trace-events
> +++ b/hw/riscv/trace-events
> @@ -6,6 +6,7 @@ riscv_iommu_flt(const char *id, unsigned b, unsigned d, unsigned f, uint64_t rea
>   riscv_iommu_pri(const char *id, unsigned b, unsigned d, unsigned f, uint64_t iova) "%s: page request %04x:%02x.%u iova: 0x%"PRIx64
>   riscv_iommu_dma(const char *id, unsigned b, unsigned d, unsigned f, unsigned pasid, const char *dir, uint64_t iova, uint64_t phys) "%s: translate %04x:%02x.%u #%u %s 0x%"PRIx64" -> 0x%"PRIx64
>   riscv_iommu_msi(const char *id, unsigned b, unsigned d, unsigned f, uint64_t iova, uint64_t phys) "%s: translate %04x:%02x.%u MSI 0x%"PRIx64" -> 0x%"PRIx64
> +riscv_iommu_mrif_notification(const char *id, uint32_t nid, uint64_t phys) "%s: sent MRIF notification 0x%x to 0x%"PRIx64
>   riscv_iommu_cmd(const char *id, uint64_t l, uint64_t u) "%s: command 0x%"PRIx64" 0x%"PRIx64
>   riscv_iommu_notifier_add(const char *id) "%s: dev-iotlb notifier added"
>   riscv_iommu_notifier_del(const char *id) "%s: dev-iotlb notifier removed"
Daniel Henrique Barboza July 31, 2024, 4:27 p.m. UTC | #2
Hi Jason,


On 7/23/24 12:25 PM, Jason Chien wrote:
> Hi Daniel,
> 
> On 2024/7/9 上午 01:34, Daniel Henrique Barboza wrote:
>> From: Andrew Jones <ajones@ventanamicro.com>
>>
>> And add mrif notification trace.
>>
>> Signed-off-by: Andrew Jones <ajones@ventanamicro.com>
>> Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
>> Reviewed-by: Frank Chang <frank.chang@sifive.com>
>> ---
>>   hw/riscv/riscv-iommu-pci.c | 2 +-
>>   hw/riscv/riscv-iommu.c     | 1 +
>>   hw/riscv/trace-events      | 1 +
>>   3 files changed, 3 insertions(+), 1 deletion(-)
>>
>> diff --git a/hw/riscv/riscv-iommu-pci.c b/hw/riscv/riscv-iommu-pci.c
>> index 7b82ce0645..d7e5f20885 100644
>> --- a/hw/riscv/riscv-iommu-pci.c
>> +++ b/hw/riscv/riscv-iommu-pci.c
>> @@ -81,7 +81,7 @@ static void riscv_iommu_pci_realize(PCIDevice *dev, Error **errp)
>>       pci_register_bar(dev, 0, PCI_BASE_ADDRESS_SPACE_MEMORY |
>>                        PCI_BASE_ADDRESS_MEM_TYPE_64, &s->bar0);
>> -    int ret = msix_init(dev, RISCV_IOMMU_INTR_COUNT,
>> +    int ret = msix_init(dev, RISCV_IOMMU_INTR_COUNT + 1,
> The new interrupt is not marked as used with msix_vector_use().

I took at look at what this patch is actually doing and, at least in the MRIF setup
I have, it's not doing much because we're not hitting the MRIF path inside the
emulation. So we're not hitting the trace and this extra MSI isn't being used.

Drew is taking a look into it in the kernel side. Until we get a better idea on what's
happening I'll remove this patch from the series. We can re-introduce it again later
in this series or in the follow-up.


Thanks,

Daniel

>>                           &s->bar0, 0, RISCV_IOMMU_REG_MSI_CONFIG,
>>                           &s->bar0, 0, RISCV_IOMMU_REG_MSI_CONFIG + 256, 0, &err);
>> diff --git a/hw/riscv/riscv-iommu.c b/hw/riscv/riscv-iommu.c
>> index 2985a49e53..c9ac3d348b 100644
>> --- a/hw/riscv/riscv-iommu.c
>> +++ b/hw/riscv/riscv-iommu.c
>> @@ -621,6 +621,7 @@ static MemTxResult riscv_iommu_msi_write(RISCVIOMMUState *s,
>>           cause = RISCV_IOMMU_FQ_CAUSE_MSI_WR_FAULT;
>>           goto err;
>>       }
>> +    trace_riscv_iommu_mrif_notification(s->parent_obj.id, n190, addr);
>>       return MEMTX_OK;
>> diff --git a/hw/riscv/trace-events b/hw/riscv/trace-events
>> index 4b486b6420..d69719a27a 100644
>> --- a/hw/riscv/trace-events
>> +++ b/hw/riscv/trace-events
>> @@ -6,6 +6,7 @@ riscv_iommu_flt(const char *id, unsigned b, unsigned d, unsigned f, uint64_t rea
>>   riscv_iommu_pri(const char *id, unsigned b, unsigned d, unsigned f, uint64_t iova) "%s: page request %04x:%02x.%u iova: 0x%"PRIx64
>>   riscv_iommu_dma(const char *id, unsigned b, unsigned d, unsigned f, unsigned pasid, const char *dir, uint64_t iova, uint64_t phys) "%s: translate %04x:%02x.%u #%u %s 0x%"PRIx64" -> 0x%"PRIx64
>>   riscv_iommu_msi(const char *id, unsigned b, unsigned d, unsigned f, uint64_t iova, uint64_t phys) "%s: translate %04x:%02x.%u MSI 0x%"PRIx64" -> 0x%"PRIx64
>> +riscv_iommu_mrif_notification(const char *id, uint32_t nid, uint64_t phys) "%s: sent MRIF notification 0x%x to 0x%"PRIx64
>>   riscv_iommu_cmd(const char *id, uint64_t l, uint64_t u) "%s: command 0x%"PRIx64" 0x%"PRIx64
>>   riscv_iommu_notifier_add(const char *id) "%s: dev-iotlb notifier added"
>>   riscv_iommu_notifier_del(const char *id) "%s: dev-iotlb notifier removed"
Andrew Jones July 31, 2024, 4:50 p.m. UTC | #3
On Wed, Jul 31, 2024 at 01:27:09PM GMT, Daniel Henrique Barboza wrote:
> Hi Jason,
> 
> 
> On 7/23/24 12:25 PM, Jason Chien wrote:
> > Hi Daniel,
> > 
> > On 2024/7/9 上午 01:34, Daniel Henrique Barboza wrote:
> > > From: Andrew Jones <ajones@ventanamicro.com>
> > > 
> > > And add mrif notification trace.
> > > 
> > > Signed-off-by: Andrew Jones <ajones@ventanamicro.com>
> > > Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
> > > Reviewed-by: Frank Chang <frank.chang@sifive.com>
> > > ---
> > >   hw/riscv/riscv-iommu-pci.c | 2 +-
> > >   hw/riscv/riscv-iommu.c     | 1 +
> > >   hw/riscv/trace-events      | 1 +
> > >   3 files changed, 3 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/hw/riscv/riscv-iommu-pci.c b/hw/riscv/riscv-iommu-pci.c
> > > index 7b82ce0645..d7e5f20885 100644
> > > --- a/hw/riscv/riscv-iommu-pci.c
> > > +++ b/hw/riscv/riscv-iommu-pci.c
> > > @@ -81,7 +81,7 @@ static void riscv_iommu_pci_realize(PCIDevice *dev, Error **errp)
> > >       pci_register_bar(dev, 0, PCI_BASE_ADDRESS_SPACE_MEMORY |
> > >                        PCI_BASE_ADDRESS_MEM_TYPE_64, &s->bar0);
> > > -    int ret = msix_init(dev, RISCV_IOMMU_INTR_COUNT,
> > > +    int ret = msix_init(dev, RISCV_IOMMU_INTR_COUNT + 1,
> > The new interrupt is not marked as used with msix_vector_use().
> 
> I took at look at what this patch is actually doing and, at least in the MRIF setup
> I have, it's not doing much because we're not hitting the MRIF path inside the
> emulation. So we're not hitting the trace and this extra MSI isn't being used.
> 
> Drew is taking a look into it in the kernel side. Until we get a better idea on what's
> happening I'll remove this patch from the series. We can re-introduce it again later
> in this series or in the follow-up.

I recommend adding the trace to whatever patch introduces the MRIF path in
this series since we'll want the trace for testing regardless. If we need
another fix to this series for MRIFs then I'll post that separately on
top.

Thanks,
drew
Daniel Henrique Barboza July 31, 2024, 5:21 p.m. UTC | #4
On 7/31/24 1:50 PM, Andrew Jones wrote:
> On Wed, Jul 31, 2024 at 01:27:09PM GMT, Daniel Henrique Barboza wrote:
>> Hi Jason,
>>
>>
>> On 7/23/24 12:25 PM, Jason Chien wrote:
>>> Hi Daniel,
>>>
>>> On 2024/7/9 上午 01:34, Daniel Henrique Barboza wrote:
>>>> From: Andrew Jones <ajones@ventanamicro.com>
>>>>
>>>> And add mrif notification trace.
>>>>
>>>> Signed-off-by: Andrew Jones <ajones@ventanamicro.com>
>>>> Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
>>>> Reviewed-by: Frank Chang <frank.chang@sifive.com>
>>>> ---
>>>>    hw/riscv/riscv-iommu-pci.c | 2 +-
>>>>    hw/riscv/riscv-iommu.c     | 1 +
>>>>    hw/riscv/trace-events      | 1 +
>>>>    3 files changed, 3 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/hw/riscv/riscv-iommu-pci.c b/hw/riscv/riscv-iommu-pci.c
>>>> index 7b82ce0645..d7e5f20885 100644
>>>> --- a/hw/riscv/riscv-iommu-pci.c
>>>> +++ b/hw/riscv/riscv-iommu-pci.c
>>>> @@ -81,7 +81,7 @@ static void riscv_iommu_pci_realize(PCIDevice *dev, Error **errp)
>>>>        pci_register_bar(dev, 0, PCI_BASE_ADDRESS_SPACE_MEMORY |
>>>>                         PCI_BASE_ADDRESS_MEM_TYPE_64, &s->bar0);
>>>> -    int ret = msix_init(dev, RISCV_IOMMU_INTR_COUNT,
>>>> +    int ret = msix_init(dev, RISCV_IOMMU_INTR_COUNT + 1,
>>> The new interrupt is not marked as used with msix_vector_use().
>>
>> I took at look at what this patch is actually doing and, at least in the MRIF setup
>> I have, it's not doing much because we're not hitting the MRIF path inside the
>> emulation. So we're not hitting the trace and this extra MSI isn't being used.
>>
>> Drew is taking a look into it in the kernel side. Until we get a better idea on what's
>> happening I'll remove this patch from the series. We can re-introduce it again later
>> in this series or in the follow-up.
> 
> I recommend adding the trace to whatever patch introduces the MRIF path in
> this series since we'll want the trace for testing regardless. If we need
> another fix to this series for MRIFs then I'll post that separately on
> top.

I'll add the trace in patch 3 (or 9).


Daniel


> 
> Thanks,
> drew
diff mbox series

Patch

diff --git a/hw/riscv/riscv-iommu-pci.c b/hw/riscv/riscv-iommu-pci.c
index 7b82ce0645..d7e5f20885 100644
--- a/hw/riscv/riscv-iommu-pci.c
+++ b/hw/riscv/riscv-iommu-pci.c
@@ -81,7 +81,7 @@  static void riscv_iommu_pci_realize(PCIDevice *dev, Error **errp)
     pci_register_bar(dev, 0, PCI_BASE_ADDRESS_SPACE_MEMORY |
                      PCI_BASE_ADDRESS_MEM_TYPE_64, &s->bar0);
 
-    int ret = msix_init(dev, RISCV_IOMMU_INTR_COUNT,
+    int ret = msix_init(dev, RISCV_IOMMU_INTR_COUNT + 1,
                         &s->bar0, 0, RISCV_IOMMU_REG_MSI_CONFIG,
                         &s->bar0, 0, RISCV_IOMMU_REG_MSI_CONFIG + 256, 0, &err);
 
diff --git a/hw/riscv/riscv-iommu.c b/hw/riscv/riscv-iommu.c
index 2985a49e53..c9ac3d348b 100644
--- a/hw/riscv/riscv-iommu.c
+++ b/hw/riscv/riscv-iommu.c
@@ -621,6 +621,7 @@  static MemTxResult riscv_iommu_msi_write(RISCVIOMMUState *s,
         cause = RISCV_IOMMU_FQ_CAUSE_MSI_WR_FAULT;
         goto err;
     }
+    trace_riscv_iommu_mrif_notification(s->parent_obj.id, n190, addr);
 
     return MEMTX_OK;
 
diff --git a/hw/riscv/trace-events b/hw/riscv/trace-events
index 4b486b6420..d69719a27a 100644
--- a/hw/riscv/trace-events
+++ b/hw/riscv/trace-events
@@ -6,6 +6,7 @@  riscv_iommu_flt(const char *id, unsigned b, unsigned d, unsigned f, uint64_t rea
 riscv_iommu_pri(const char *id, unsigned b, unsigned d, unsigned f, uint64_t iova) "%s: page request %04x:%02x.%u iova: 0x%"PRIx64
 riscv_iommu_dma(const char *id, unsigned b, unsigned d, unsigned f, unsigned pasid, const char *dir, uint64_t iova, uint64_t phys) "%s: translate %04x:%02x.%u #%u %s 0x%"PRIx64" -> 0x%"PRIx64
 riscv_iommu_msi(const char *id, unsigned b, unsigned d, unsigned f, uint64_t iova, uint64_t phys) "%s: translate %04x:%02x.%u MSI 0x%"PRIx64" -> 0x%"PRIx64
+riscv_iommu_mrif_notification(const char *id, uint32_t nid, uint64_t phys) "%s: sent MRIF notification 0x%x to 0x%"PRIx64
 riscv_iommu_cmd(const char *id, uint64_t l, uint64_t u) "%s: command 0x%"PRIx64" 0x%"PRIx64
 riscv_iommu_notifier_add(const char *id) "%s: dev-iotlb notifier added"
 riscv_iommu_notifier_del(const char *id) "%s: dev-iotlb notifier removed"