Skip to content
  • Alex Williamson's avatar
    iommu/vt-d: Make use of IOMMU sysfs support · a5459cfe
    Alex Williamson authored
    
    
    Register our DRHD IOMMUs, cross link devices, and provide a base set
    of attributes for the IOMMU.  Note that IRQ remapping support parses
    the DMAR table very early in boot, well before the iommu_class can
    reasonably be setup, so our registration is split between
    intel_iommu_init(), which occurs later, and alloc_iommu(), which
    typically occurs much earlier, but may happen at any time later
    with IOMMU hot-add support.
    
    On a typical desktop system, this provides the following (pruned):
    
    $ find /sys | grep dmar
    /sys/devices/virtual/iommu/dmar0
    /sys/devices/virtual/iommu/dmar0/devices
    /sys/devices/virtual/iommu/dmar0/devices/0000:00:02.0
    /sys/devices/virtual/iommu/dmar0/intel-iommu
    /sys/devices/virtual/iommu/dmar0/intel-iommu/cap
    /sys/devices/virtual/iommu/dmar0/intel-iommu/ecap
    /sys/devices/virtual/iommu/dmar0/intel-iommu/address
    /sys/devices/virtual/iommu/dmar0/intel-iommu/version
    /sys/devices/virtual/iommu/dmar1
    /sys/devices/virtual/iommu/dmar1/devices
    /sys/devices/virtual/iommu/dmar1/devices/0000:00:00.0
    /sys/devices/virtual/iommu/dmar1/devices/0000:00:01.0
    /sys/devices/virtual/iommu/dmar1/devices/0000:00:16.0
    /sys/devices/virtual/iommu/dmar1/devices/0000:00:1a.0
    /sys/devices/virtual/iommu/dmar1/devices/0000:00:1b.0
    /sys/devices/virtual/iommu/dmar1/devices/0000:00:1c.0
    ...
    /sys/devices/virtual/iommu/dmar1/intel-iommu
    /sys/devices/virtual/iommu/dmar1/intel-iommu/cap
    /sys/devices/virtual/iommu/dmar1/intel-iommu/ecap
    /sys/devices/virtual/iommu/dmar1/intel-iommu/address
    /sys/devices/virtual/iommu/dmar1/intel-iommu/version
    /sys/class/iommu/dmar0
    /sys/class/iommu/dmar1
    
    (devices also link back to the dmar units)
    
    This makes address, version, capabilities, and extended capabilities
    available, just like printed on boot.  I've tried not to duplicate
    data that can be found in the DMAR table, with the exception of the
    address, which provides an easy way to associate the sysfs device with
    a DRHD entry in the DMAR.  It's tempting to add scopes and RMRR data
    here, but the full DMAR table is already exposed under /sys/firmware/
    and therefore already provides a way for userspace to learn such
    details.
    
    Signed-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
    Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
    a5459cfe