Messages in this thread | | | Date | Sun, 23 Nov 2008 01:40:39 +0900 | Subject | RE: [PATCH] IA64: fix VT-d dma_mapping_error | From | FUJITA Tomonori <> |
| |
On Sat, 22 Nov 2008 08:18:02 -0800 "Yu, Fenghua" <fenghua.yu@intel.com> wrote:
> > >+int intel_dma_mapping_error(struct device *hwdev, dma_addr_t dma_addr) > >+{ > >+ return !dma_addr; > >+} > > The implementation of inte_dma_mapping_error is incomplete. > > Dma_addr is valid only when it belongs to hwdev's domain. This is all about VT-d isolation fundamental. > > +int intel_dma_mapping_error(struct device *hwdev, dma_addr_t dma_addr) > +{ > + struct pci_dev *pdev = to_pci_dev(hwdev); > + struct dmar_domain *domain; > + struct iova *iova; > + > + domain = find_domain(pdev); > + > + iova = find_iova(&domain->iovad, IOVA_PFN(dma_addr)); > + if (!iova) > + return -EINVAL; > + return 0; > +}
Hmm, intel_dma_mapping_error is used to test only the value that intel_map_single() returns. If intel_map_single() returns a non-zero dma address, it belongs to hwdev's domain. So intel_dma_mapping_error can simply return 1 (failure) if the dma_addr is zero.
Do I misunderstand something?
| |