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

Re: [PATCH] iommu/vtd: fix address translation for superpages


  • To: Jan Beulich <jbeulich@xxxxxxxx>
  • From: Roger Pau Monné <roger.pau@xxxxxxxxxx>
  • Date: Wed, 10 May 2023 12:22:02 +0200
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.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:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=TkrqdmGVo5BkSV+xnHK6dPnnodz32UyrgXpBHX3ali0=; b=f4qenfT3LKI0haWzad2VFNqnGaMGrGDdOxj+LsQSPadsDDARLmTDp1sDDe49tK5qTNgJBDfTs4je1ZoOkk5DAPm0OssUsE8fn+cDxtl1I+cN0/ZiX9HAdxOU7Kh2usOa8oO7xr1p/kVbROxSMPuD3um8Y4dZxzp1q3cIruRH6k7H3g1LyHCFnLXnZrul4T4bGLgwZeUr/lbWTg+1aDTnSZDLYduRYT35kzkXSfQL8BX91n200UAMOb96M9iBb0QTjA5Alr6vGp5FkjL/1hQmgSF+6MW2iagzwJ2E89yxx53sq0a1Aw8tGsnWZU61K4WLOHcBU17meDq5D+d5fBbwNQ==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GzEBEi+Bev68dXdXS3AWdaz80g218r5IYakOqRo4m/m7bCRoZgUTC9tZnJ6z/nHj7NK8SKHWeDL5hJ4mS2rjG8Yr1owBZ/COMo2lyjTW6VN39iJU2Gsed4a33gzER6/ifYkgzuGxi7wiejg3Vc54vj//fcOWQQ1ho9T0aKdJLVFpx5smbAC+ThelBpn/88pDyZ8yUcOH6ipoKtw2YWyox8CYF/+w4Zs0SChu/J5vnQ6v+g9SJT2T8V4CABwrrllbeJTMn47l7+PICZeVUaM02FYmcVx6b1qCmLK7JRgq/NtU3R0WQswvWjSic8/dv42i9d4AjcZpr0LwkPBCncNf3Q==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com;
  • Cc: Kevin Tian <kevin.tian@xxxxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxxx
  • Delivery-date: Wed, 10 May 2023 10:22:56 +0000
  • Ironport-data: A9a23:fmb6CaKvd9pZi82jFE+R+ZQlxSXFcZb7ZxGr2PjKsXjdYENS1TQCn 2AZD2mAOP6PZmPyKYtwaoXi90kH6pPTmII2HQVlqX01Q3x08seUXt7xwmUcnc+xBpaaEB84t ZV2hv3odp1coqr0/0/1WlTZhSAgk/rOHvykU7Ss1hlZHWdMUD0mhQ9oh9k3i4tphcnRKw6Ws Jb5rta31GWNglaYCUpJrfPSwP9TlK6q4mhA4wVmPakjUGL2zBH5MrpOfcldEFOgKmVkNrbSb /rOyri/4lTY838FYj9yuu+mGqGiaue60Tmm0hK6aYD76vRxjnVaPpIAHOgdcS9qZwChxLid/ jnvWauYEm/FNoWU8AgUvoIx/ytWZcWq85efSZSzXFD6I+QrvBIAzt03ZHzaM7H09c4rMUJR9 8IzBwofMBuont2665C7aMpj05FLwMnDZOvzu1lG5BSAVLMMZ8CGRK/Ho9hFwD03m8ZCW+7EY NYUYiZuaxKGZABTPlAQC9Q1m+LAanvXKmUE7g7K4/dnpTGNnWSd05C0WDbRUsaNSshP2F6Ru 0rN/njjAwFcP9uaodaA2iv02bWRw3uiBOr+EpWq7OwtkgSdzVYIARI0W0KrmP+Z1GyXDoc3x 0s8v3BGQbIJ3E6hQ8T5Xha4iGWZpRNaUN1Ve8U55R+MzOzI4g+fLmkCUjNFLtchsaceVTEsk 1OEgd7tLThuq6GOD2KQ8K+OqjG/MjRTKnUNDRLoViMA6tjn5Ys13hTGS486FLbv14OkXzbt3 zqNsS4ywa0JitIG3Lm6+laBhC+wop/OTUg+4QC/sn+Z0z6VrbWNP+SAgWU3J94bRGpFZjFtZ EQ5pvU=
  • Ironport-hdrordr: A9a23:FsKRIqmessepF/3RfJ1a2wdhw5bpDfNLiWdD5ihNYBxZY6Wkfp +V8cjzhCWftN9OYhodcLC7V5Voj0mskKKdxbNhRYtKOzOWw1dATbsSlLcKpgeNJ8SQzI5gPM tbAstD4ZjLfCJHZKXBkXaF+rQbsb66GcmT7I+xrkuFDzsaDZ2Ihz0JdjpzeXcGIDWua6BJdq Z1saF81kedkDksH42G7j5vZZmxm/T70LbdJTIWDR8u7weDyRuu9b7BChCdmjsOTj9Vxr8m0G 7d1yj0/L+qvf2XwgLVkza71eUapPLRjv94QOCcgMkcLTvhzi6ueYRaQrWH+Bwlve21714usd /U5zMtJd565X/9dny85THtxw7j+jAz7GKK8y7TvVLT5ejCAB4qActIgoxUNjPf9kobpdl5lI ZGxXiQuZZ7BQ7J2H2V3amCazha0m6P5VYym+8aiHJSFaMYdb9qtIQauGdYCo0JEi7W4J0uVM NuEMbfzvBLdk7yVQGQgkBfhPiXGlgjFBaPRUYP/uSTzjhthXh8i3AVwcQO901wgK4Vet1h3a DpI65onLZBQos9dqRmHtoMRsOxFyjkXQ/MGHj6GyWnKIg3f1b277Ln6rQ84++nPLYSyoEppZ jHWFRE8UYvZkPVD9GU1pEjyGGCfIyEZ0Wv9ihi3ek6hlWlL4CbdBFrCWpe3PdIms9vQvEyAJ 2ISdZr6/yKFxqaJW8G5Xy4Z3BoEwhvbCQkgKdEZ7uwmLO7FmTLjJ2tTB+BHsuaLR8UHkXCP1 AkYB/fYO1902HDYA6LvPGWYQKgRnDC
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On Wed, May 10, 2023 at 12:00:51PM +0200, Jan Beulich wrote:
> On 10.05.2023 10:27, Roger Pau Monné wrote:
> > On Tue, May 09, 2023 at 06:06:45PM +0200, Jan Beulich wrote:
> >> On 09.05.2023 12:41, Roger Pau Monne wrote:
> >>> When translating an address that falls inside of a superpage in the
> >>> IOMMU page tables the fetching of the PTE physical address field
> >>> wasn't using dma_pte_addr(), which caused the returned data to be
> >>> corrupt as it would contain bits not related to the address field.
> >>
> >> I'm afraid I don't understand:
> >>
> >>> --- a/xen/drivers/passthrough/vtd/iommu.c
> >>> +++ b/xen/drivers/passthrough/vtd/iommu.c
> >>> @@ -359,16 +359,18 @@ static uint64_t addr_to_dma_page_maddr(struct 
> >>> domain *domain, daddr_t addr,
> >>>  
> >>>              if ( !alloc )
> >>>              {
> >>> -                pte_maddr = 0;
> >>>                  if ( !dma_pte_present(*pte) )
> >>> +                {
> >>> +                    pte_maddr = 0;
> >>>                      break;
> >>> +                }
> >>>  
> >>>                  /*
> >>>                   * When the leaf entry was requested, pass back the full 
> >>> PTE,
> >>>                   * with the address adjusted to account for the residual 
> >>> of
> >>>                   * the walk.
> >>>                   */
> >>> -                pte_maddr = pte->val +
> >>> +                pte_maddr +=
> >>>                      (addr & ((1UL << level_to_offset_bits(level)) - 1) &
> >>>                       PAGE_MASK);
> >>
> >> With this change you're now violating what the comment says (plus what
> >> the comment ahead of the function says). And it says what it says for
> >> a reason - see intel_iommu_lookup_page(), which I think your change is
> >> breaking.
> > 
> > Hm, but the code in intel_iommu_lookup_page() is now wrong as it takes
> > the bits in DMA_PTE_CONTIG_MASK as part of the physical address when
> > doing the conversion to mfn?  maddr_to_mfn() doesn't perform a any
> > masking to remove the bits above PADDR_BITS.
> 
> Oh, right. But that's a missing dma_pte_addr() in intel_iommu_lookup_page()
> then. (It would likely be better anyway to switch "uint64_t val" to
> "struct dma_pte pte" there, to make more visible that it's a PTE we're
> dealing with.) I indeed overlooked this aspect when doing the earlier
> change.

I guess I'm still confused, as the other return value for target == 0
(when the address is not part of a superpage) does return
dma_pte_addr(pte).  I think that needs further fixing then.

Thanks, Roger.



 


Rackspace

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