All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hyeonggon Yoo <42.hyeyoo@gmail.com>
To: Christoph Hellwig <hch@lst.de>
Cc: Vlastimil Babka <vbabka@suse.cz>, Baoquan He <bhe@redhat.com>,
	linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	akpm@linux-foundation.org, cl@linux.com,
	John.p.donnelly@oracle.com, kexec@lists.infradead.org,
	stable@vger.kernel.org, Pekka Enberg <penberg@kernel.org>,
	David Rientjes <rientjes@google.com>,
	Joonsoo Kim <iamjoonsoo.kim@lge.com>
Subject: Re: [PATCH v3 5/5] mm/slub: do not create dma-kmalloc if no managed pages in DMA zone
Date: Fri, 7 Jan 2022 11:56:38 +0000	[thread overview]
Message-ID: <20220107115638.GB2769814@odroid> (raw)
In-Reply-To: <20211215072710.GA3010@lst.de>

On Wed, Dec 15, 2021 at 08:27:10AM +0100, Christoph Hellwig wrote:
> On Wed, Dec 15, 2021 at 07:03:35AM +0000, Hyeonggon Yoo wrote:
> > I'm not sure that allocating from ZONE_DMA32 instead of ZONE_DMA
> > for kdump kernel is nice way to solve this problem.
> 
> What is the problem with zones in kdump kernels?
> 
> > Devices that requires ZONE_DMA memory is rare but we still support them.
> 
> Indeed.
> 
> > >     1) Do not call warn_alloc in page allocator if will always fail
> > >     to allocate ZONE_DMA pages.
> > > 
> > > 
> > >     2) let's check all callers of kmalloc with GFP_DMA
> > >     if they really need GFP_DMA flag and replace those by DMA API or
> > >     just remove GFP_DMA from kmalloc()
> > > 
> > >     3) Drop support for allocating DMA memory from slab allocator
> > >     (as Christoph Hellwig said) and convert them to use DMA32
> > 
> > 	(as Christoph Hellwig said) and convert them to use *DMA API*
> > 
> > >     and see what happens
> 
> This is the right thing to do, but it will take a while.  In fact
> I dont think we really need the warning in step 1, a simple grep
> already allows to go over them.  I just looked at the uses of GFP_DMA
> in drivers/scsi for example, and all but one look bogus.
> 
> > > > > Yeah, I have the same guess too for get_capabilities(), not sure about other
> > > > > callers. Or, as ChristophL and ChristophH said(Sorry, not sure if this is
> > > > > the right way to call people when the first name is the same. Correct me if
> > > > > it's wrong), any buffer requested from kmalloc can be used by device driver.
> > > > > Means device enforces getting memory inside addressing limit for those
> > > > > DMA transferring buffer which is usually large, Megabytes level with
> > > > > vmalloc() or alloc_pages(), but doesn't care about this kind of small
> > > > > piece buffer memory allocated with kmalloc()? Just a guess, please tell
> > > > > a counter example if anyone happens to know, it could be easy.
> 
> The way this works is that the dma_map* calls will bounce buffer memory
> that does to fall into the addressing limitations.  This is a performance
> overhead, but allows drivers to address all memory in a system.  If the
> driver controls memory allocation it should use one of the dma_alloc_*
> APIs that allocate addressable memory from the start.  The allocator
> will dip into ZONE_DMA and ZONE_DMA32 when needed.

Hello Christoph, Baoquan and I started this cleanup.
But we're a bit confused. I want to ask you something.

-   Did you mean dma_map_* can handle arbitrary buffer, (and dma_map_* will
    bounce buffer when necessary) Can we assume it on every architectures
    and buses?

    Reading at the DMA API documentation and code (dma_map_page_attrs(),
    dma_direct_map_page()), I'm not sure about that.

    In the documentation: (dma_map_single)
    	Further, the DMA address of the memory must be within the
	dma_mask of the device (the dma_mask is a bit mask of the
	addressable region for the device, i.e., if the DMA address of
	the memory ANDed with the dma_mask is still equal to the DMA
	address, then the device can perform DMA to the memory).  To
	ensure that the memory allocated by kmalloc is within the dma_mask,
	the driver may specify various platform-dependent flags to restrict
	the DMA address range of the allocation (e.g., on x86, GFP_DMA
	guarantees to be within the first 16MB of available DMA addresses,
	as required by ISA devices).

-   In what function does the DMA API do bounce buffering?

Thanks a lot,
Hyeonggon

WARNING: multiple messages have this Message-ID (diff)
From: Hyeonggon Yoo <42.hyeyoo@gmail.com>
To: kexec@lists.infradead.org
Subject: [PATCH v3 5/5] mm/slub: do not create dma-kmalloc if no managed pages in DMA zone
Date: Fri, 7 Jan 2022 11:56:38 +0000	[thread overview]
Message-ID: <20220107115638.GB2769814@odroid> (raw)
In-Reply-To: <20211215072710.GA3010@lst.de>

On Wed, Dec 15, 2021 at 08:27:10AM +0100, Christoph Hellwig wrote:
> On Wed, Dec 15, 2021 at 07:03:35AM +0000, Hyeonggon Yoo wrote:
> > I'm not sure that allocating from ZONE_DMA32 instead of ZONE_DMA
> > for kdump kernel is nice way to solve this problem.
> 
> What is the problem with zones in kdump kernels?
> 
> > Devices that requires ZONE_DMA memory is rare but we still support them.
> 
> Indeed.
> 
> > >     1) Do not call warn_alloc in page allocator if will always fail
> > >     to allocate ZONE_DMA pages.
> > > 
> > > 
> > >     2) let's check all callers of kmalloc with GFP_DMA
> > >     if they really need GFP_DMA flag and replace those by DMA API or
> > >     just remove GFP_DMA from kmalloc()
> > > 
> > >     3) Drop support for allocating DMA memory from slab allocator
> > >     (as Christoph Hellwig said) and convert them to use DMA32
> > 
> > 	(as Christoph Hellwig said) and convert them to use *DMA API*
> > 
> > >     and see what happens
> 
> This is the right thing to do, but it will take a while.  In fact
> I dont think we really need the warning in step 1, a simple grep
> already allows to go over them.  I just looked at the uses of GFP_DMA
> in drivers/scsi for example, and all but one look bogus.
> 
> > > > > Yeah, I have the same guess too for get_capabilities(), not sure about other
> > > > > callers. Or, as ChristophL and ChristophH said(Sorry, not sure if this is
> > > > > the right way to call people when the first name is the same. Correct me if
> > > > > it's wrong), any buffer requested from kmalloc can be used by device driver.
> > > > > Means device enforces getting memory inside addressing limit for those
> > > > > DMA transferring buffer which is usually large, Megabytes level with
> > > > > vmalloc() or alloc_pages(), but doesn't care about this kind of small
> > > > > piece buffer memory allocated with kmalloc()? Just a guess, please tell
> > > > > a counter example if anyone happens to know, it could be easy.
> 
> The way this works is that the dma_map* calls will bounce buffer memory
> that does to fall into the addressing limitations.  This is a performance
> overhead, but allows drivers to address all memory in a system.  If the
> driver controls memory allocation it should use one of the dma_alloc_*
> APIs that allocate addressable memory from the start.  The allocator
> will dip into ZONE_DMA and ZONE_DMA32 when needed.

Hello Christoph, Baoquan and I started this cleanup.
But we're a bit confused. I want to ask you something.

-   Did you mean dma_map_* can handle arbitrary buffer, (and dma_map_* will
    bounce buffer when necessary) Can we assume it on every architectures
    and buses?

    Reading at the DMA API documentation and code (dma_map_page_attrs(),
    dma_direct_map_page()), I'm not sure about that.

    In the documentation: (dma_map_single)
    	Further, the DMA address of the memory must be within the
	dma_mask of the device (the dma_mask is a bit mask of the
	addressable region for the device, i.e., if the DMA address of
	the memory ANDed with the dma_mask is still equal to the DMA
	address, then the device can perform DMA to the memory).  To
	ensure that the memory allocated by kmalloc is within the dma_mask,
	the driver may specify various platform-dependent flags to restrict
	the DMA address range of the allocation (e.g., on x86, GFP_DMA
	guarantees to be within the first 16MB of available DMA addresses,
	as required by ISA devices).

-   In what function does the DMA API do bounce buffering?

Thanks a lot,
Hyeonggon


  parent reply	other threads:[~2022-01-07 11:57 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-13 12:27 [PATCH v3 0/5] Avoid requesting page from DMA zone when no managed pages Baoquan He
2021-12-13 12:27 ` Baoquan He
2021-12-13 12:27 ` [PATCH v3 1/5] docs: kernel-parameters: Update to reflect the current default size of atomic pool Baoquan He
2021-12-13 12:27   ` Baoquan He
2021-12-13 14:20   ` john.p.donnelly
2021-12-13 14:20     ` john.p.donnelly
2021-12-13 12:27 ` [PATCH v3 2/5] dma-pool: allow user to disable " Baoquan He
2021-12-13 12:27   ` Baoquan He
2021-12-13 14:21   ` john.p.donnelly
2021-12-13 14:21     ` john.p.donnelly
2021-12-13 12:27 ` [PATCH v3 3/5] mm_zone: add function to check if managed dma zone exists Baoquan He
2021-12-13 12:27   ` Baoquan He
2021-12-13 14:22   ` john.p.donnelly
2021-12-13 14:22     ` john.p.donnelly
2021-12-16 10:52   ` David Hildenbrand
2021-12-16 10:52     ` David Hildenbrand
2021-12-13 12:27 ` [PATCH v3 4/5] dma/pool: create dma atomic pool only if dma zone has managed pages Baoquan He
2021-12-13 12:27   ` Baoquan He
2021-12-13 12:27   ` Baoquan He
2021-12-13 14:23   ` john.p.donnelly
2021-12-13 14:23     ` john.p.donnelly
2021-12-13 14:23     ` john.p.donnelly
2021-12-13 12:27 ` [PATCH v3 5/5] mm/slub: do not create dma-kmalloc if no managed pages in DMA zone Baoquan He
2021-12-13 12:27   ` Baoquan He
2021-12-13 13:43   ` Hyeonggon Yoo
2021-12-13 13:43     ` Hyeonggon Yoo
2021-12-14  5:32     ` Baoquan He
2021-12-14  5:32       ` Baoquan He
2021-12-14 10:09       ` Vlastimil Babka
2021-12-14 10:09         ` Vlastimil Babka
2021-12-14 10:28         ` Christoph Lameter
2021-12-14 10:28           ` Christoph Lameter
2021-12-15  4:48         ` Hyeonggon Yoo
2021-12-15  4:48           ` Hyeonggon Yoo
2021-12-15  7:03           ` Hyeonggon Yoo
2021-12-15  7:03             ` Hyeonggon Yoo
2021-12-15  7:27             ` Christoph Hellwig
2021-12-15  7:27               ` Christoph Hellwig
2021-12-15 10:34               ` Vlastimil Babka
2021-12-15 10:34                 ` Vlastimil Babka
2021-12-15 11:51                 ` David Laight
2021-12-15 11:51                   ` David Laight
2021-12-15 13:41                 ` Baoquan He
2021-12-15 13:41                   ` Baoquan He
2021-12-17 11:38               ` Hyeonggon Yoo
2021-12-17 11:38                 ` Hyeonggon Yoo
2021-12-20  7:32                 ` Baoquan He
2021-12-20  7:32                   ` Baoquan He
2022-01-07 11:56               ` Hyeonggon Yoo [this message]
2022-01-07 11:56                 ` Hyeonggon Yoo
2021-12-15 14:42             ` Baoquan He
2021-12-15 14:42               ` Baoquan He
2021-12-15 10:08         ` Baoquan He
2021-12-15 10:08           ` Baoquan He
2021-12-17 11:38       ` Hyeonggon Yoo
2021-12-17 11:38         ` Hyeonggon Yoo
2021-12-21  8:56         ` Christoph Hellwig
2021-12-21  8:56           ` Christoph Hellwig
2021-12-22 12:37           ` Hyeonggon Yoo
2021-12-22 12:37             ` Hyeonggon Yoo
2021-12-23  8:52             ` Christoph Hellwig
2021-12-23  8:52               ` Christoph Hellwig
2021-12-13 14:24   ` john.p.donnelly
2021-12-13 14:24     ` john.p.donnelly
2021-12-14 16:31   ` Christoph Hellwig
2021-12-14 16:31     ` Christoph Hellwig
2021-12-14 17:07     ` john.p.donnelly
2021-12-14 17:07       ` john.p.donnelly
2021-12-15  7:27       ` Christoph Hellwig
2021-12-15  7:27         ` Christoph Hellwig
2021-12-13 21:05 ` [PATCH v3 0/5] Avoid requesting page from DMA zone when no managed pages Andrew Morton
2021-12-13 21:05   ` Andrew Morton
2021-12-14  0:35   ` Baoquan He
2021-12-14  0:35     ` Baoquan He

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220107115638.GB2769814@odroid \
    --to=42.hyeyoo@gmail.com \
    --cc=John.p.donnelly@oracle.com \
    --cc=akpm@linux-foundation.org \
    --cc=bhe@redhat.com \
    --cc=cl@linux.com \
    --cc=hch@lst.de \
    --cc=iamjoonsoo.kim@lge.com \
    --cc=kexec@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=penberg@kernel.org \
    --cc=rientjes@google.com \
    --cc=stable@vger.kernel.org \
    --cc=vbabka@suse.cz \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.