Linux-RISC-V Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Jason Gunthorpe <jgg@nvidia.com>
To: Andrew Jones <andrew.jones@oss.qualcomm.com>
Cc: linux-riscv@lists.infradead.org, iommu@lists.linux.dev,
	linux-kernel@vger.kernel.org, tomasz.jeznach@linux.dev,
	tjeznach@rivosinc.com, joro@8bytes.org, will@kernel.org,
	robin.murphy@arm.com, pjw@kernel.org, palmer@dabbelt.com,
	anup@brainfault.org, tglx@kernel.org, kevin.tian@intel.com,
	fangyu.yu@linux.alibaba.com
Subject: Re: [PATCH v4 02/21] iommufd: Add iommufd_sw_map_msi()
Date: Sat, 22 Aug 2026 11:06:25 -0300	[thread overview]
Message-ID: <20260822140625.GM244917@nvidia.com> (raw)
In-Reply-To: <t2l77h22pz2jg5vsgoth6324u36szra3orgr2g2xo7olyuhzlb@53wnsyhz7aqr>

On Sat, Aug 22, 2026 at 03:50:05PM +0200, Andrew Jones wrote:

> > The viommu can set the msi_addr_pattern
> 
> msi_addr_pattern should be under the control of the hypervisor since
> it, and its companion msi_addr_mask, represent a block of GPAs. It
> will necessarily have to match the vIMSIC topology described by the
> VMM to work anyway.

I mean the iommufd viommu, in the hypervisor.

> > It is unfortunate you can't learn the vCPU the MSI is targetting from
> > the MSI descriptor, in terms of linux that's a pretty difficult choice
> > to implement.
> 
> With the RISC-V IOMMU MSI table and irqbypass support in KVM, we can
> write the guest's MSI messages directly to the device without
> interpreting the IOVAs. 

Every architecture can work this way. Nobody has impleented Linux
support for it, and if we do, it must be arch generic.

Not being able to discover the vCPU from the MSI descriptor means you
can't use any of the existing less-optimal Linux flows and are forced
to implement this hard thing..

> Guest changes to S1 or IRQ affinity therefore do not require MSI table
> updates. And, when a vCPU moves to another pCPU, or switches between a
> VS-file and an MRIF, the hypervisor only updates the MSI table entry for
> that vIMSIC GPA. The device message and S1 mapping are unaffected.

I'm not sure how you will end up controlling the msi table..

> As I understand it, Nicolin's series addresses the ARM split between
> SMMU translation and ITS interrupt remapping. 

ARM is basically the same, the ITS page goes through the S1 and S2, so
the goal is to get a valid ITS page into the S2, tell the guest to use
it and create a S1 pointing at it then feed the MSI descriptor from
the guest unmodified to the HW.

Exactly the same as what you want.

> The guest-selected IOVA must be preserved for S1 while ITS routing
> is managed separately.  RISC-V performs MSI remapping in the IOMMU
> after S1, so guest MSI target changes do not require corresponding
> per-vector coordination with a separate interrupt controller.

In ARM you'd manage vCPU mapping in the GIC since it is already doing
translation lookups, this happens without involving the iommu. It
doesn't need to change the descriptor to do this.

But conceptually it is the same thing, there is a part along the MSI
chain that maps from vCPU to pCPU. Either in the GIC HW tables or in
the IOMMU MSI tables, doesn't matter much, IMHO.

I think the two x86's also have a very similar thing where the iommu
interrupt remapping tables can do the vCPU to pCPU translation.

Again nobody has built this and if we do it must somehow be able to
work generically for all arches, so it will take a while to get it
sorted out I think. Since riscv's HW design boxed themselves into
doing all this work I guess you have no choice.

I strongly recommend you keep it seperate from this initial series
(And remove the irq domains from this series) and come with a proposal
that everyone can understand how an arch could hook into all of this
machinery.

Jason

_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

  reply	other threads:[~2026-08-22 14:06 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-20 21:41 [PATCH v4 00/21] iommu/riscv: Enable MSI remapping, IOMMU_DMA and VFIO Andrew Jones
2026-08-20 21:41 ` [PATCH v4 01/21] iommufd: Convert struct iommufd_sw_msi_maps to a growable bitmap Andrew Jones
2026-08-20 21:41 ` [PATCH v4 02/21] iommufd: Add iommufd_sw_map_msi() Andrew Jones
2026-08-20 22:09   ` Jason Gunthorpe
2026-08-21 11:07     ` Andrew Jones
2026-08-21 12:02       ` Jason Gunthorpe
2026-08-21 13:47         ` Andrew Jones
2026-08-21 14:00           ` Jason Gunthorpe
2026-08-21 14:23             ` Andrew Jones
2026-08-21 14:31               ` Jason Gunthorpe
2026-08-21 15:18                 ` Andrew Jones
2026-08-21 16:12                   ` Jason Gunthorpe
2026-08-21 17:12                     ` Andrew Jones
2026-08-21 17:20                       ` Jason Gunthorpe
2026-08-22 13:50                         ` Andrew Jones
2026-08-22 14:06                           ` Jason Gunthorpe [this message]
2026-08-20 21:41 ` [PATCH v4 03/21] iommu/dma: Add iommu_dma_sw_map_msi() Andrew Jones
2026-08-20 21:41 ` [PATCH v4 04/21] iommu/dma: Add iommu_dma_map_msi() Andrew Jones
2026-08-20 21:41 ` [PATCH v4 05/21] iommu: Document MSI mapping during domain replacement Andrew Jones
2026-08-20 21:41 ` [PATCH v4 06/21] genirq/msi: Provide DOMAIN_BUS_MSI_REMAP Andrew Jones
2026-08-20 21:41 ` [PATCH v4 07/21] irqchip/riscv-imsic: Compose MSI updates through the hierarchy Andrew Jones
2026-08-20 21:41 ` [PATCH v4 08/21] iommu/riscv: Add IRQ domain for interrupt remapping Andrew Jones
2026-08-20 21:41 ` [PATCH v4 09/21] iommu/riscv: Refresh platform MSI domain before IR setup Andrew Jones
2026-08-20 21:41 ` [PATCH v4 10/21] iommu/riscv: Prepare info->domain for concurrent RCU read access Andrew Jones
2026-08-20 21:41 ` [PATCH v4 11/21] iommu/riscv: Reserve an MSI IOVA window for iommufd Andrew Jones
2026-08-20 21:41 ` [PATCH v4 12/21] iommu/riscv: Pre-map IMSIC MSI targets Andrew Jones
2026-08-20 21:41 ` [PATCH v4 13/21] iommu/riscv: Preserve MSI IOVA state across domain replacement Andrew Jones
2026-08-20 21:52   ` Jason Gunthorpe
2026-08-21 11:14     ` Andrew Jones
2026-08-21 13:22       ` Jason Gunthorpe
2026-08-21 13:56         ` Andrew Jones
2026-08-20 21:41 ` [PATCH v4 14/21] iommu/riscv: Gate direct identity boundary switches with live MSIs Andrew Jones
2026-08-20 21:41 ` [PATCH v4 15/21] iommu/riscv: Remap IMSIC targets during MSI composition Andrew Jones
2026-08-20 21:41 ` [PATCH v4 16/21] iommu/dma: Enable IOMMU_DMA for 64-bit RISC-V Andrew Jones
2026-08-20 21:41 ` [PATCH v4 17/21] iommu/riscv: Report cache coherency capability Andrew Jones
2026-08-20 21:47   ` Jason Gunthorpe
2026-08-21 11:15     ` Andrew Jones
2026-08-20 21:41 ` [PATCH v4 18/21] vfio: enable IOMMU_TYPE1 for RISC-V Andrew Jones
2026-08-20 21:41 ` [PATCH v4 19/21] RISC-V: KVM: Enable KVM_VFIO interfaces on RISC-V arch Andrew Jones
2026-08-20 21:41 ` [PATCH v4 20/21] riscv: defconfig: Enable IOMMUFD and VFIO Andrew Jones
2026-08-20 21:41 ` [PATCH v4 21/21] selftests/vfio: Allow building on RISC-V Andrew Jones

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=20260822140625.GM244917@nvidia.com \
    --to=jgg@nvidia.com \
    --cc=andrew.jones@oss.qualcomm.com \
    --cc=anup@brainfault.org \
    --cc=fangyu.yu@linux.alibaba.com \
    --cc=iommu@lists.linux.dev \
    --cc=joro@8bytes.org \
    --cc=kevin.tian@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-riscv@lists.infradead.org \
    --cc=palmer@dabbelt.com \
    --cc=pjw@kernel.org \
    --cc=robin.murphy@arm.com \
    --cc=tglx@kernel.org \
    --cc=tjeznach@rivosinc.com \
    --cc=tomasz.jeznach@linux.dev \
    --cc=will@kernel.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