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

RE: [PATCH 1/4] VT-d: defer "no DRHD" check when (un)mapping devices


  • To: Jan Beulich <jbeulich@xxxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: "Tian, Kevin" <kevin.tian@xxxxxxxxx>
  • Date: Thu, 16 Sep 2021 08:05:41 +0000
  • Accept-language: en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=O8LK+FM6yRRrBERZwJtz3BrL+nVaynG4glbh+0FvoHo=; b=cN11K+v+y6UPUEIHYWOExRRfQIAUj+zRWLVWupCZMHe0WIkm6o750ufgoNsTLAz8MK7lmSYJc4aZ69bWJe/sbzeYmCPX4NEXt+xYYvj4AvO4ttl+yVApWaZ8EjJ2BCUACLGSYkN0hkDSx1xE0ZCq6VZYdhpNE2+sZk+t49qAo1ytVjuwqYf8TYRy85TrtnWhiQaRMaooIh0XSV0/+taQ45bgTaee8k0Fyfc/044pea2dc6nON9Mfaj0aoHLHkXq0xFQ2vjxebKK+hBb2fqNHUsuay2Wq1z51tkuYxf+87Fb399FyrVKzMvO/bCvBE/OzGxR9Ns3DS49jGFxMwtm+Og==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VYtOjjMTiuIp2Ro3qb/DxjmRrSArFGVKbpnH5ARkYucLwGkGSz0usf7AoyFmIGvjtWYVFRraEi3KKRfr/QhfWZGCYtiXzzVnXcIkvihpcMDuP2UDIckToZgzh65DdehLflw6UBfOYki4TET9Dla5MDshLfROkkE2iC+xEXgScjYCS7SYxIR9E/80bLv61UBT/wDsPImDJjDLNzHhT7X/glHC3+Oj+WLouuQnv+NvAAm12McRj/BvjxiG+uobLrPtjiWsV1kZ94aH41qWi+b0mZT9UiPwqFbEK8w4QHnGBzydcFsL/zFHIGFy8/VYsaSOeAfGespQ+jOzf4yHEDQTyA==
  • Authentication-results: suse.com; dkim=none (message not signed) header.d=none;suse.com; dmarc=none action=none header.from=intel.com;
  • Cc: Paul Durrant <paul@xxxxxxx>
  • Delivery-date: Thu, 16 Sep 2021 08:06:00 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Thread-index: AQHXqhHWObtnwR6OkEiPWNnUbTtn96umTpdw
  • Thread-topic: [PATCH 1/4] VT-d: defer "no DRHD" check when (un)mapping devices

> From: Jan Beulich <jbeulich@xxxxxxxx>
> Sent: Wednesday, September 15, 2021 5:12 PM
> 
> If devices are to be skipped anyway (which is the case in particular for
> host bridges), there's no point complaining about a missing DRHD (and
> hence a missing association with an IOMMU).
> 
> While there convert assignments to initializers and constify "drhd"
> local variables.
> 
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>

Reviewed-by: Kevin Tian <kevin.tian@xxxxxxxxx>

> 
> --- a/xen/drivers/passthrough/vtd/iommu.c
> +++ b/xen/drivers/passthrough/vtd/iommu.c
> @@ -1460,14 +1460,10 @@ static int domain_context_unmap(struct d
>  static int domain_context_mapping(struct domain *domain, u8 devfn,
>                                    struct pci_dev *pdev)
>  {
> -    struct acpi_drhd_unit *drhd;
> +    const struct acpi_drhd_unit *drhd = acpi_find_matched_drhd_unit(pdev);
>      int ret = 0;
>      u8 seg = pdev->seg, bus = pdev->bus, secbus;
> 
> -    drhd = acpi_find_matched_drhd_unit(pdev);
> -    if ( !drhd )
> -        return -ENODEV;
> -
>      /*
>       * Generally we assume only devices from one node to get assigned to a
>       * given guest.  But even if not, by replacing the prior value here we
> @@ -1476,7 +1472,7 @@ static int domain_context_mapping(struct
>       * this or other devices may be penalized then, but some would also be
>       * if we left other than NUMA_NO_NODE untouched here.
>       */
> -    if ( drhd->iommu->node != NUMA_NO_NODE )
> +    if ( drhd && drhd->iommu->node != NUMA_NO_NODE )
>          dom_iommu(domain)->node = drhd->iommu->node;
> 
>      ASSERT(pcidevs_locked());
> @@ -1497,6 +1493,9 @@ static int domain_context_mapping(struct
>          break;
> 
>      case DEV_TYPE_PCIe_ENDPOINT:
> +        if ( !drhd )
> +            return -ENODEV;
> +
>          if ( iommu_debug )
>              printk(VTDPREFIX "%pd:PCIe: map %pp\n",
>                     domain, &PCI_SBDF3(seg, bus, devfn));
> @@ -1508,6 +1507,9 @@ static int domain_context_mapping(struct
>          break;
> 
>      case DEV_TYPE_PCI:
> +        if ( !drhd )
> +            return -ENODEV;
> +
>          if ( iommu_debug )
>              printk(VTDPREFIX "%pd:PCI: map %pp\n",
>                     domain, &PCI_SBDF3(seg, bus, devfn));
> @@ -1651,17 +1653,12 @@ int domain_context_unmap_one(
>  static int domain_context_unmap(struct domain *domain, u8 devfn,
>                                  struct pci_dev *pdev)
>  {
> -    struct acpi_drhd_unit *drhd;
> -    struct vtd_iommu *iommu;
> +    const struct acpi_drhd_unit *drhd = acpi_find_matched_drhd_unit(pdev);
> +    struct vtd_iommu *iommu = drhd ? drhd->iommu : NULL;
>      int ret;
>      u8 seg = pdev->seg, bus = pdev->bus, tmp_bus, tmp_devfn, secbus;
>      int found = 0;
> 
> -    drhd = acpi_find_matched_drhd_unit(pdev);
> -    if ( !drhd )
> -        return -ENODEV;
> -    iommu = drhd->iommu;
> -
>      switch ( pdev->type )
>      {
>      case DEV_TYPE_PCI_HOST_BRIDGE:
> @@ -1676,6 +1673,9 @@ static int domain_context_unmap(struct d
>          return 0;
> 
>      case DEV_TYPE_PCIe_ENDPOINT:
> +        if ( !iommu )
> +            return -ENODEV;
> +
>          if ( iommu_debug )
>              printk(VTDPREFIX "%pd:PCIe: unmap %pp\n",
>                     domain, &PCI_SBDF3(seg, bus, devfn));
> @@ -1686,6 +1686,9 @@ static int domain_context_unmap(struct d
>          break;
> 
>      case DEV_TYPE_PCI:
> +        if ( !iommu )
> +            return -ENODEV;
> +
>          if ( iommu_debug )
>              printk(VTDPREFIX "%pd:PCI: unmap %pp\n",
>                     domain, &PCI_SBDF3(seg, bus, devfn));


 


Rackspace

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