Skip to content
  • Peter Xu's avatar
    memory: add section range info for IOMMU notifier · 698feb5e
    Peter Xu authored
    
    
    In this patch, IOMMUNotifier.{start|end} are introduced to store section
    information for a specific notifier. When notification occurs, we not
    only check the notification type (MAP|UNMAP), but also check whether the
    notified iova range overlaps with the range of specific IOMMU notifier,
    and skip those notifiers if not in the listened range.
    
    When removing an region, we need to make sure we removed the correct
    VFIOGuestIOMMU by checking the IOMMUNotifier.start address as well.
    
    This patch is solving the problem that vfio-pci devices receive
    duplicated UNMAP notification on x86 platform when vIOMMU is there. The
    issue is that x86 IOMMU has a (0, 2^64-1) IOMMU region, which is
    splitted by the (0xfee00000, 0xfeefffff) IRQ region. AFAIK
    this (splitted IOMMU region) is only happening on x86.
    
    This patch also helps vhost to leverage the new interface as well, so
    that vhost won't get duplicated cache flushes. In that sense, it's an
    slight performance improvement.
    
    Suggested-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
    Reviewed-by: default avatarEric Auger <eric.auger@redhat.com>
    Reviewed-by: default avatarMichael S. Tsirkin <mst@redhat.com>
    Acked-by: default avatarAlex Williamson <alex.williamson@redhat.com>
    Signed-off-by: default avatarPeter Xu <peterx@redhat.com>
    Message-Id: <1491562755-23867-2-git-send-email-peterx@redhat.com>
    [ehabkost: included extra vhost_iommu_region_del() change from Peter Xu]
    Signed-off-by: default avatarEduardo Habkost <ehabkost@redhat.com>
    698feb5e