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

Re: [XEN RFC PATCH v5 3/5] xen/public: Introduce PV-IOMMU hypercall interface



On Tue, 4 Feb 2025, Julien Grall wrote:
> On Tue, 4 Feb 2025 at 11:46, Teddy Astie <teddy.astie@xxxxxxxxxx> wrote:
>       If the hardware supports it, there is a alternative (still being
>       drafted) interface to allow the guest to directly provide native 
> pagetables.
> 
>       This is exposed through the "_nested" subcommands, there is no
>       implementation of this feature in this patch series yet.
> 
> 
> Out of interest, if the HW support two stage translations, then why do we 
> need a PV interface? Wouldn’t it be better to exposed an emulated
> iommu? This would reduce the amount of enlightenment required in the guest 
> OS. In the long run, this would provide some better performance
>  because some IOMMU HW can now accelerate TLB flush commands (among other 
> things). For instance, see the NVIDIA vIOMMU.

Hi Julien, I am not Teddy, but I have been considering the same
question, and here are the conclusions I reached.  

A virtual IOMMU of the same type as the underlying IOMMU provides better
operating system compatibility, particularly for running non-Linux OSes
such as Windows.  

On the other hand, a PV IOMMU should be faster to develop because there
is no need to emulate a hardware interface. Additionally, a single PV
IOMMU implementation could support multiple underlying hardware IOMMUs.
Specifically, it could be used for both Intel and AMD platforms.



> 
>       /**
>         * IOMMU_alloc_nested
>         * Create a nested IOMMU context (needs IOMMUCAP_nested).
>         *
>         * This context uses a platform-specific page table from domain address
>       space
>         * specified in pgtable_gfn and use it for nested translations.
>         *
>         * Explicit flushes needs to be submited with IOMMU_flush_nested on
>         * modification of the nested pagetable to ensure coherency between
>       IOTLB and
>         * nested page table.
>         *
>         * This context can be destroyed using IOMMU_free_context.
>         * This context cannot be modified using map_pages, unmap_pages.
>         */
>       struct pv_iommu_alloc_nested {
>            /* OUT: allocated IOMMU context number */
>            uint16_t ctx_no;
> 
>            /* IN: guest frame number of the nested page table */
>            uint64_aligned_t pgtable_gfn;
> 
>            /* IN: nested mode flags */
>            uint64_aligned_t nested_flags;
>       };
>       typedef struct pv_iommu_alloc_nested pv_iommu_alloc_nested_t;
>       DEFINE_XEN_GUEST_HANDLE(pv_iommu_alloc_nested_t);
> 
>       /**
>         * IOMMU_flush_nested (needs IOMMUCAP_nested)
>         * Flush the IOTLB for nested translation.
>         */
>       struct pv_iommu_flush_nested {
>            /* TODO */
>       };
>       typedef struct pv_iommu_flush_nested pv_iommu_flush_nested_t;
>       DEFINE_XEN_GUEST_HANDLE(pv_iommu_flush_nested_t);
> 
> 
>       >
>       >
>       >
>       >> [1] Originally
>       >> https://lists.xen.org/archives/html/xen-devel/2024-06/msg01145.html 
> but
>       >> this patch got quite old and probably doesn't work anymore with this 
> new
>       >> Xen patch series.
>       >> I have a updated patch in my xen-pviommu branch
>       >> 
> https://gitlab.com/xen-project/people/tsnake41/linux/-/commit/125d67a09fa9f66a32f9175641cfccca22dbbdb6
>       >>
>       >> [2] You also need to set 
> "vfio_iommu_type1.allow_unsafe_interrupts=1" to
>       >> make VFIO work for now.
> 
>       Thanks
>       Teddy
> 
> 
> 
>       Teddy Astie | Vates XCP-ng Developer
> 
>       XCP-ng & Xen Orchestra - Vates solutions
> 
>       web: https://vates.tech
> 
> 
> 

 


Rackspace

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