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

Re: [PATCH for-4.20?] x86/dom0: be less restrictive with the Interrupt Address Range



On Fri, Feb 14, 2025 at 02:01:09PM +0100, Jan Beulich wrote:
> On 12.02.2025 16:38, Roger Pau Monne wrote:
> > There's also the following restriction noted in Intel VT-d:
> > 
> >> Software must not program paging-structure entries to remap any address to
> >> the interrupt address range. Untranslated requests and translation requests
> >> that result in an address in the interrupt range will be blocked with
> >> condition code LGN.4 or SGN.8. Translated requests with an address in the
> >> interrupt address range are treated as Unsupported Request (UR).
> > 
> > However this restriction doesn't apply to the identity mappings possibly
> > created for dom0, since the interrupt address range is never subject to DMA
> > remapping.
> 
> Coming back to this also with your on-demand-p2m-populating patch in mind:
> I'm having some trouble following your comment on this quotation. The doc
> text is quite clear that page table entries must not point at the interrupt
> address range. They don't make an exception for identity mappings. And we
> don't know how the IOMMUs internally work, e.g. what sanity checks they do
> (and what failure thereof would result in).

My understanding is that address translation will never happen for the
interrupt address range, so whatever gets mapped on that range will
never be translated by the IOMMU.  Hence for the specific case here,
there will never be untranslated request that result in an address in
the interrupt address range, because translation is not done for input
addresses in the interrupt address range.

Sorry, hope the above makes sense, I'm having a hard time trying to
write down what I understand happens when the IOMMU handles accesses
to the interrupt address range.

Maybe a diagram would be easier.  This is my understanding of how
translation works in the IOMMU:

 input address -> translation -> output address

However input addresses that are in the interrupt address range are
not subject to translation, and hence there's no output address that
can be subject to the quoted VT-d paragraph.

> Instead I'm now wondering whether we don't need to
> - prevent ept_set_entry() from propagating to the IOMMU mappings targeting
>   the interrupt range,
> - demand non-shared page tables if any such mapping is to be established
>   in the CPU page tables.
> 
> Then again I won't assert that my interpretation of that quoted text makes
> sense at all.

See above, *I think* the quoted paragraph only applies to output
addresses, and in the case of mappings created on the interrupt
address range there's simply no output address.

Thanks, Roger.



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.