qemu-arm
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [RFC PATCH 5/5] hw/arm/virt-acpi-build: Add IORT RMR regions to hand


From: Jason Gunthorpe
Subject: Re: [RFC PATCH 5/5] hw/arm/virt-acpi-build: Add IORT RMR regions to handle MSI nested binding
Date: Wed, 11 Dec 2024 14:01:09 -0400

On Wed, Dec 11, 2024 at 09:20:20AM -0800, Nicolin Chen wrote:
> On Wed, Dec 11, 2024 at 09:11:12AM -0400, Jason Gunthorpe wrote:
> > On Tue, Dec 10, 2024 at 05:28:17PM -0800, Nicolin Chen wrote:
> > > > I would ideally turn it around and provide that range information to
> > > > the kernel and totally ignore the SW_MSI reserved region once
> > > > userspace provides it.
> > > 
> > > Hmm.. that sounds like a uAPI for vITS range..but yes..
> > 
> > It controls the window that the kernel uses to dynamically map the ITS
> > pages.
> 
> Can we use SET_OPTION for vITS mapping (non-RMR solution) too? 

There are two parts to the vITS flow:

 1) mapping the phsical ITS page - I expect this to go through
    IOMMUFD_CMD_IOAS_MAP_FILE
 2) Conveying the MSI addr per-irq - this doesn't feel like set_option
    is quite the right fit since it is an array of msis

> 
> > > So, VMM can GET_OPTION(SW_MSI) for msi_base to extract the
> > > info from kernel. Likely need a second call for its length?
> > > Since IOMMU_OPTION only supports one val64 input or output.
> > 
> > No, just forget about the kernel's SW_MSI region. The VMM uses this
> > API and overrides it and iommufd completely ignores SW_MSI.
> > 
> > There is nothing special about the range hard coded into the smmu
> > driver.
> 
> OK. We will have SET_OPTION(IOMMU_OPTION_SW_MSI_START) and
> SET_OPTION(IOMMU_OPTION_SW_MSI_LAST).

Maybe length, but yes

> I think we will need some validation to the range too, although
> iommufd doesn't have the information about the underlying ITS
> driver: what if user space sets range to a page size, while the
> ITS driver requires multiple pages?

Ideally the kernel would detect and fail IRQ setup in these cases.

I suggest enforcing a minimal range of something XXM big at least,
then it won't happen.

Jason



reply via email to

[Prev in Thread] Current Thread [Next in Thread]