On Wed, 2018-01-31 at 14:45 -0800, Eric Dumazet wrote: > From: Eric Dumazet <eduma...@google.com> > > Some devices (like mlx4) try hard to allocate memory on selected > NUMA node, but it turns out intel_alloc_coherent() is not NUMA > aware yet. > > Note that dma_generic_alloc_coherent() in arch/x86/kernel/pci-dma.c > gets this right. > > Signed-off-by: Eric Dumazet <eduma...@google.com> > Cc: Benjamin Serebrin <sereb...@google.com> > Cc: David Woodhouse <dw...@infradead.org> > Cc: Joerg Roedel <j...@8bytes.org> > --- > drivers/iommu/intel-iommu.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c > index > a1373cf343269455808f66ad18dc0a2fb7aa73f2..0efef077abc099eb29ebc5cefdd1b996f025dffd > 100644 > --- a/drivers/iommu/intel-iommu.c > +++ b/drivers/iommu/intel-iommu.c > @@ -3734,8 +3734,11 @@ static void *intel_alloc_coherent(struct device *dev, > size_t size, > } > } > > - if (!page) > - page = alloc_pages(flags, order); > + if (!page) { > + page = alloc_pages_node(dev_to_node(dev), flags, order); > + if (!page) > + page = alloc_pages(flags, order);
I'll send a V2 without the fallback to alloc_pages() This seems not necessary at all. > + } > if (!page) > return NULL; > memset(page_address(page), 0, size);