lkml.org 
[lkml]   [2023]   [May]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 04/17] iommufd/device: Setup MSI on kernel-managed domains
    Date
    The IOMMU_RESV_SW_MSI is a kernel-managed domain thing. So, it should be
    only setup on a kernel-managed domain only. If the attaching domain is a
    user-managed domain, redirect the hwpt to hwpt->parent to do it correctly.

    Signed-off-by: Nicolin Chen <nicolinc@nvidia.com>
    ---
    drivers/iommu/iommufd/device.c | 5 ++++-
    1 file changed, 4 insertions(+), 1 deletion(-)

    diff --git a/drivers/iommu/iommufd/device.c b/drivers/iommu/iommufd/device.c
    index e40f576fdf0e..e403cf6c336d 100644
    --- a/drivers/iommu/iommufd/device.c
    +++ b/drivers/iommu/iommufd/device.c
    @@ -351,7 +351,8 @@ static int iommufd_group_setup_msi(struct iommufd_group *igroup,
    * call iommu_get_msi_cookie() on its behalf. This is necessary to setup
    * the MSI window so iommu_dma_prepare_msi() can install pages into our
    * domain after request_irq(). If it is not done interrupts will not
    - * work on this domain.
    + * work on this domain. The msi_cookie should be always set into the
    + * kernel-managed (parent) domain.
    *
    * FIXME: This is conceptually broken for iommufd since we want to allow
    * userspace to change the domains, eg switch from an identity IOAS to a
    @@ -359,6 +360,8 @@ static int iommufd_group_setup_msi(struct iommufd_group *igroup,
    * matches what the IRQ layer actually expects in a newly created
    * domain.
    */
    + if (hwpt->parent)
    + hwpt = hwpt->parent;
    if (sw_msi_start != PHYS_ADDR_MAX && !hwpt->msi_cookie) {
    rc = iommu_get_msi_cookie(hwpt->domain, sw_msi_start);
    if (rc)
    --
    2.40.1
    \
     
     \ /
      Last update: 2023-05-10 05:35    [W:4.822 / U:0.192 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site