From: Auger Eric <eric.auger@redhat.com>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: Eric Auger <eric.auger.pro@gmail.com>,
qemu-arm <qemu-arm@nongnu.org>,
QEMU Developers <qemu-devel@nongnu.org>,
Prem Mallappa <prem.mallappa@gmail.com>,
Alex Williamson <alex.williamson@redhat.com>,
Tomasz Nowicki <tn@semihalf.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
Christoffer Dall <christoffer.dall@linaro.org>,
Bharat Bhushan <bharat.bhushan@nxp.com>,
Jean-Philippe Brucker <jean-philippe.brucker@arm.com>,
"Edgar E. Iglesias" <edgar.iglesias@gmail.com>,
linuc.decode@gmail.com, Peter Xu <peterx@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v9 11/14] target/arm/kvm: Translate the MSI doorbell in kvm_arch_fixup_msi_route
Date: Mon, 12 Mar 2018 16:16:25 +0100 [thread overview]
Message-ID: <cc6029a1-c177-ee8c-d09b-0ed2af81c897@redhat.com> (raw)
In-Reply-To: <CAFEAcA_9cmK9gebqE9997fzhTzKT6Ky9q4jn=fxwziopDyK9Ew@mail.gmail.com>
Hi Peter,
On 12/03/18 12:59, Peter Maydell wrote:
> On 17 February 2018 at 18:46, Eric Auger <eric.auger@redhat.com> wrote:
>> In case the MSI is translated by an IOMMU we need to fixup the
>> MSI route with the translated address.
>>
>> Signed-off-by: Eric Auger <eric.auger@redhat.com>
>>
>> ---
>>
>> v5 -> v6:
>> - use IOMMUMemoryRegionClass API
>>
>> It is still unclear to me if we need to register an IOMMUNotifier
>> to handle any change in the MSI doorbell which would occur behind
>> the scene and would not lead to any call to kvm_arch_fixup_msi_route().
>
> Paolo, do you know the answer to this question ?
>
>> ---
>> target/arm/kvm.c | 27 +++++++++++++++++++++++++++
>> target/arm/trace-events | 3 +++
>> 2 files changed, 30 insertions(+)
>>
>> diff --git a/target/arm/kvm.c b/target/arm/kvm.c
>> index 1219d00..9f5976a 100644
>> --- a/target/arm/kvm.c
>> +++ b/target/arm/kvm.c
>> @@ -20,8 +20,13 @@
>> #include "sysemu/kvm.h"
>> #include "kvm_arm.h"
>> #include "cpu.h"
>> +#include "trace.h"
>> #include "internals.h"
>> #include "hw/arm/arm.h"
>> +#include "hw/pci/pci.h"
>> +#include "hw/pci/msi.h"
>> +#include "hw/arm/smmu-common.h"
>> +#include "hw/arm/smmuv3.h"
>> #include "exec/memattrs.h"
>> #include "exec/address-spaces.h"
>> #include "hw/boards.h"
>> @@ -666,6 +671,28 @@ int kvm_arm_vgic_probe(void)
>> int kvm_arch_fixup_msi_route(struct kvm_irq_routing_entry *route,
>> uint64_t address, uint32_t data, PCIDevice *dev)
>> {
>> + AddressSpace *as = pci_device_iommu_address_space(dev);
>> + IOMMUMemoryRegionClass *imrc;
>> + IOMMUTLBEntry entry;
>> + SMMUDevice *sdev;
>> +
>> + if (as == &address_space_memory) {
>> + return 0;
>> + }
>> +
>> + /* MSI doorbell address is translated by an IOMMU */
>> + sdev = container_of(as, SMMUDevice, as);
>> + imrc = IOMMU_MEMORY_REGION_GET_CLASS(&sdev->iommu);
>> +
>> + entry = imrc->translate(&sdev->iommu, address, IOMMU_WO);
>> +
>> + route->u.msi.address_lo = entry.translated_addr;
>> + route->u.msi.address_hi = entry.translated_addr >> 32;
>> +
>> + trace_kvm_arm_fixup_msi_route(address, sdev->devfn,
>> + sdev->iommu.parent_obj.name,
>> + entry.translated_addr);
>> +
>> return 0;
>> }
>
> It seems a bit odd that:
> * the code for arm for "PCI devices behind IOMMU need to have
> the MSI doorbell writes go through the IOMMU" looks rather
> different from the code for x86 for the same thing
ARM SMMU translates MSIs whereas Intel/AMD IOMMU do not translate them.
Hence this implementation
> * the code here needs to know specifically that this is an SMMU
> and not some other kind of IOMMU
Yes when introducing virtio-iommu we will need to get this fixed. We
need a way to retrieve the iommu mr from the as. I will work on this
concurrently.
>
> I would have expected this to be more generic-to-all-IOMMU
> APIs and maybe even implemented in the generic KVM support code...
>
> The x86 code seems to be similarly x86-specific though, so
> this is more of a "perhaps there is a cleanup opportunity here"
> observation I guess.
OK
Thanks
Eric
>
> thanks
> -- PMM
>
next prev parent reply other threads:[~2018-03-12 15:16 UTC|newest]
Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-17 18:46 [Qemu-devel] [PATCH v9 00/14] ARM SMMUv3 Emulation Support Eric Auger
2018-02-17 18:46 ` [Qemu-devel] [PATCH v9 01/14] hw/arm/smmu-common: smmu base device and datatypes Eric Auger
2018-03-06 12:09 ` Peter Maydell
2018-03-06 15:01 ` Auger Eric
2018-02-17 18:46 ` [Qemu-devel] [PATCH v9 02/14] hw/arm/smmu-common: IOMMU memory region and address space setup Eric Auger
2018-03-06 14:08 ` Peter Maydell
2018-03-06 14:47 ` Auger Eric
2018-03-06 14:49 ` Peter Maydell
2018-02-17 18:46 ` [Qemu-devel] [PATCH v9 03/14] hw/arm/smmu-common: VMSAv8-64 page table walk Eric Auger
2018-03-06 19:43 ` Peter Maydell
2018-03-07 16:23 ` Auger Eric
2018-03-07 16:35 ` Peter Maydell
2018-03-08 18:56 ` Auger Eric
2018-03-08 19:01 ` Peter Maydell
2018-02-17 18:46 ` [Qemu-devel] [PATCH v9 04/14] hw/arm/smmuv3: Skeleton Eric Auger
2018-03-08 14:27 ` Peter Maydell
2018-03-09 13:19 ` Auger Eric
2018-03-09 13:37 ` Peter Maydell
2018-03-09 13:49 ` Auger Eric
2018-02-17 18:46 ` [Qemu-devel] [PATCH v9 05/14] hw/arm/smmuv3: Wired IRQ and GERROR helpers Eric Auger
2018-03-08 17:49 ` Peter Maydell
2018-03-09 14:03 ` Auger Eric
2018-03-09 14:18 ` Peter Maydell
2018-03-09 14:50 ` Auger Eric
2018-02-17 18:46 ` [Qemu-devel] [PATCH v9 06/14] hw/arm/smmuv3: Queue helpers Eric Auger
2018-03-08 18:28 ` Peter Maydell
2018-03-09 16:43 ` Auger Eric
2018-02-17 18:46 ` [Qemu-devel] [PATCH v9 07/14] hw/arm/smmuv3: Implement MMIO write operations Eric Auger
2018-03-08 18:37 ` Peter Maydell
2018-03-09 16:42 ` Auger Eric
2018-02-17 18:46 ` [Qemu-devel] [PATCH v9 08/14] hw/arm/smmuv3: Event queue recording helper Eric Auger
2018-03-08 18:39 ` Peter Maydell
2018-03-09 17:16 ` Auger Eric
2018-02-17 18:46 ` [Qemu-devel] [PATCH v9 09/14] hw/arm/smmuv3: Implement translate callback Eric Auger
2018-03-09 18:46 ` Peter Maydell
2018-03-12 10:38 ` Eric Auger
2018-02-17 18:46 ` [Qemu-devel] [PATCH v9 10/14] hw/arm/smmuv3: Abort on vfio or vhost case Eric Auger
2018-03-08 19:06 ` Peter Maydell
2018-03-09 17:53 ` Auger Eric
2018-03-09 17:59 ` Peter Maydell
2018-03-12 10:53 ` Eric Auger
2018-03-12 11:10 ` Peter Maydell
2018-03-12 15:01 ` Auger Eric
2018-02-17 18:46 ` [Qemu-devel] [PATCH v9 11/14] target/arm/kvm: Translate the MSI doorbell in kvm_arch_fixup_msi_route Eric Auger
2018-03-12 11:59 ` Peter Maydell
2018-03-12 15:16 ` Auger Eric [this message]
2018-03-13 13:37 ` Paolo Bonzini
2018-03-15 9:45 ` Auger Eric
2018-02-17 18:46 ` [Qemu-devel] [PATCH v9 12/14] hw/arm/virt: Add SMMUv3 to the virt board Eric Auger
2018-03-12 12:46 ` Peter Maydell
2018-03-12 15:01 ` Auger Eric
2018-03-12 15:05 ` Peter Maydell
2018-02-17 18:46 ` [Qemu-devel] [PATCH v9 13/14] hw/arm/virt-acpi-build: Add smmuv3 node in IORT table Eric Auger
2018-03-12 12:48 ` Peter Maydell
2018-03-19 14:32 ` Shannon Zhao
2018-03-19 20:50 ` Auger Eric
2018-02-17 18:46 ` [Qemu-devel] [PATCH v9 14/14] hw/arm/virt: Handle iommu in 2.12 machine type Eric Auger
2018-03-12 12:56 ` Peter Maydell
2018-03-12 15:01 ` Auger Eric
2018-02-27 19:02 ` [Qemu-devel] [PATCH v9 00/14] ARM SMMUv3 Emulation Support Peter Maydell
2018-02-28 8:44 ` Auger Eric
2018-03-12 12:58 ` Peter Maydell
2018-03-12 15:22 ` Auger Eric
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=cc6029a1-c177-ee8c-d09b-0ed2af81c897@redhat.com \
--to=eric.auger@redhat.com \
--cc=alex.williamson@redhat.com \
--cc=bharat.bhushan@nxp.com \
--cc=christoffer.dall@linaro.org \
--cc=edgar.iglesias@gmail.com \
--cc=eric.auger.pro@gmail.com \
--cc=jean-philippe.brucker@arm.com \
--cc=linuc.decode@gmail.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=peterx@redhat.com \
--cc=prem.mallappa@gmail.com \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=tn@semihalf.com \
/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;
as well as URLs for NNTP newsgroup(s).