Alexey Kardashevskiy <aik@xxxxxxxxx> writes: > diff --git a/arch/powerpc/kernel/iommu.c b/arch/powerpc/kernel/iommu.c > index f0dc680..cbcc615 100644 > --- a/arch/powerpc/kernel/iommu.c > +++ b/arch/powerpc/kernel/iommu.c > @@ -993,15 +994,19 @@ int iommu_tce_check_gpa(unsigned long page_shift, unsigned long gpa) > } > EXPORT_SYMBOL_GPL(iommu_tce_check_gpa); > > -long iommu_tce_xchg(struct iommu_table *tbl, unsigned long entry, > - unsigned long *hpa, enum dma_data_direction *direction) > +long iommu_tce_xchg(struct mm_struct *mm, struct iommu_table *tbl, > + unsigned long entry, unsigned long *hpa, > + enum dma_data_direction *direction) > { > long ret; > + unsigned long size = 0; > > ret = tbl->it_ops->exchange(tbl, entry, hpa, direction); > > if (!ret && ((*direction == DMA_FROM_DEVICE) || > - (*direction == DMA_BIDIRECTIONAL))) > + (*direction == DMA_BIDIRECTIONAL)) && > + !mm_iommu_is_devmem(mm, *hpa, tbl->it_page_shift, > + &size)) This is breaking a bunch of configs with: arch/powerpc/kernel/iommu.c:1008:5: error: implicit declaration of function 'mm_iommu_is_devmem'; did you mean 'iommu_del_device'? [-Werror=implicit-function-declaration] eg: http://kisskb.ellerman.id.au/kisskb/buildresult/13623063/ > diff --git a/arch/powerpc/mm/mmu_context_iommu.c b/arch/powerpc/mm/mmu_context_iommu.c > index 25a4b7f7..06fdbd3 100644 > --- a/arch/powerpc/mm/mmu_context_iommu.c > +++ b/arch/powerpc/mm/mmu_context_iommu.c > @@ -384,6 +432,33 @@ extern void mm_iommu_ua_mark_dirty_rm(struct mm_struct *mm, unsigned long ua) > *pa |= MM_IOMMU_TABLE_GROUP_PAGE_DIRTY; > } > > +extern bool mm_iommu_is_devmem(struct mm_struct *mm, unsigned long hpa, > + unsigned int pageshift, unsigned long *size) > +{ You shouldn't need extern in a C file. cheers