Message ID | 1517438756.3715.108.camel@gmail.com |
---|---|
State | Superseded, archived |
Delegated to: | David Miller |
Headers | show |
Series | iommu/vt-d: add NUMA awareness to intel_alloc_coherent() | expand |
On Wed, 2018-01-31 at 14:45 -0800, Eric Dumazet wrote: > From: Eric Dumazet <edumazet@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 <edumazet@google.com> > Cc: Benjamin Serebrin <serebrin@google.com> > Cc: David Woodhouse <dwmw2@infradead.org> > Cc: Joerg Roedel <joro@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);
I've got patches pending to replace all that code with dma_direct_alloc, which will do the right thing. They were submitted for 4.16, and I will resend them after -rc1.
On Fri, Feb 2, 2018 at 10:53 AM, Christoph Hellwig <hch@infradead.org> wrote: > I've got patches pending to replace all that code with > dma_direct_alloc, which will do the right thing. They were > submitted for 4.16, and I will resend them after -rc1. I see, thanks Christoph !
On 2/2/18 10:59 AM, Eric Dumazet wrote: > On Fri, Feb 2, 2018 at 10:53 AM, Christoph Hellwig <hch@infradead.org> wrote: >> I've got patches pending to replace all that code with >> dma_direct_alloc, which will do the right thing. They were >> submitted for 4.16, and I will resend them after -rc1. > > I see, thanks Christoph ! > Hi Christoph It seems 4.16 has shipped ( :) ) , and intel_alloc_coherent() still has no NUMA awareness. Should I respin https://lore.kernel.org/patchwork/patch/884326/ Thanks !
On Wed, Apr 01, 2020 at 03:53:38PM -0700, Eric Dumazet wrote: > > > On 2/2/18 10:59 AM, Eric Dumazet wrote: > > On Fri, Feb 2, 2018 at 10:53 AM, Christoph Hellwig <hch@infradead.org> wrote: > >> I've got patches pending to replace all that code with > >> dma_direct_alloc, which will do the right thing. They were > >> submitted for 4.16, and I will resend them after -rc1. > > > > I see, thanks Christoph ! > > > > Hi Christoph > > It seems 4.16 has shipped ( :) ) , and intel_alloc_coherent() still has no NUMA awareness. Actually, that code went in and then got reverted again.. > Should I respin https://lore.kernel.org/patchwork/patch/884326/ Maybe. We are still hoping to convert intel-iommu to the dma-iommu framework, but I'm not sure how long that is going to take, so maybe just respin it for now.
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); + } if (!page) return NULL; memset(page_address(page), 0, size);