All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mike Rapoport <rppt@kernel.org>
To: Serge Semin <fancer.lancer@gmail.com>
Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	Andrew Morton <akpm@linux-foundation.org>,
	Matthew Wilcox <willy@infradead.org>,
	Alexey Malahov <Alexey.Malahov@baikalelectronics.ru>,
	Arnd Bergmann <arnd@arndb.de>,
	Aleksandar Rikalo <aleksandar.rikalo@syrmia.com>,
	Aleksandar Rikalo <arikalo@gmail.com>,
	Dragan Mladjenovic <dragan.mladjenovic@syrmia.com>,
	Chao-ying Fu <cfu@wavecomp.com>,
	Jiaxun Yang <jiaxun.yang@flygoat.com>,
	Yinglu Yang <yangyinglu@loongson.cn>,
	Tiezhu Yang <yangtiezhu@loongson.cn>,
	Marc Zyngier <maz@kernel.org>,
	linux-mips@vger.kernel.org, linux-mm@kvack.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 5/7] mm/mm_init.c: Extend init unavailable range doc info
Date: Fri, 24 Nov 2023 10:19:00 +0200	[thread overview]
Message-ID: <20231124081900.GG636165@kernel.org> (raw)
In-Reply-To: <ehlzzv37o4exdn4smmu653wzjdotzdv3dhr3bduvemxssp37ro@sgegnyprquk4>

On Thu, Nov 23, 2023 at 01:42:39PM +0300, Serge Semin wrote:
> On Thu, Nov 23, 2023 at 12:18:54PM +0200, Mike Rapoport wrote:
> > On Wed, Nov 22, 2023 at 09:24:03PM +0300, Serge Semin wrote:
> > > Besides of the already described reasons the pages backended memory holes
> > > might be persistent due to having memory mapped IO spaces behind those
> > > ranges in the framework of flatmem kernel config. Add such note to the
> > > init_unavailable_range() method kdoc in order to point out to one more
> > > reason of having the function executed for such regions.
> > > 
> > > Signed-off-by: Serge Semin <fancer.lancer@gmail.com>
> > > 
> > > ---
> > > 
> > > Please let me know if the IO-space pages must be initialized somehow
> > > differently rather relying on free_area_init() executing the
> > > init_unavailable_range() method.
> > 
> 
> > Maybe I'm missing something, but why do you need struct pages in the
> > IO space?
> 
> In my case at the very least that's due to having a SRAM device
> available in the middle of the MMIO-space. The region is getting
> mapped using the ioremap_wc() method (Uncached Write-Combine CA),
> which eventually is converted to calling get_vm_area() and
> ioremap_page_range() (see ioremap_prot() function on MIPS), which in
> its turn use the page structs for mapping. Another similar case is
> using ioremap_wc() in the PCIe outbound ATU space mapping of
> the graphic/video cards framebuffers.

ioremap_page_range() does not need struct pages, but rather physical
addresses.
 
> In general having the pages array defined for the IO-memory is
> required for mapping the IO-space other than just uncached (my sram
> case for example) or, for instance, with special access attribute for
> the user-space (if I am not missing something in a way VM works in
> that case).

No, struct pages are not required to map IO space. If you need to map MMIO
to userspace there's remap_pfn_range() for that.

My guess is that your system has a hole in the physical memory mappings and
with FLATMEM that hole will have essentially unused struct pages, which are
initialized by init_unavailable_range().  But from mm perspective this is
still a hole even though there's some MMIO ranges in that hole.

Now, if that hole is large you are wasting memory for unused memory map and
it maybe worth considering using SPARSEMEM.
 
> -Serge(y)
> 
> > 
> > > ---
> > >  mm/mm_init.c | 1 +
> > >  1 file changed, 1 insertion(+)
> > > 
> > > diff --git a/mm/mm_init.c b/mm/mm_init.c
> > > index 077bfe393b5e..3fa33e2d32ba 100644
> > > --- a/mm/mm_init.c
> > > +++ b/mm/mm_init.c
> > > @@ -796,6 +796,7 @@ overlap_memmap_init(unsigned long zone, unsigned long *pfn)
> > >   * - physical memory bank size is not necessarily the exact multiple of the
> > >   *   arbitrary section size
> > >   * - early reserved memory may not be listed in memblock.memory
> > > + * - memory mapped IO space
> > >   * - memory layouts defined with memmap= kernel parameter may not align
> > >   *   nicely with memmap sections
> > >   *
> > > -- 
> > > 2.42.1
> > > 
> > 
> > -- 
> > Sincerely yours,
> > Mike.
> > 

-- 
Sincerely yours,
Mike.

  reply	other threads:[~2023-11-24  8:19 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-22 18:23 [PATCH 0/7] MIPS: mm: Fix some memory-related issues Serge Semin
2023-11-22 18:23 ` [PATCH 1/7] mips: dmi: Fix early remap on MIPS32 Serge Semin
2023-11-22 19:35   ` Arnd Bergmann
2023-11-23  9:32     ` Serge Semin
2023-11-23 12:13       ` Jiaxun Yang
2023-11-23 12:29         ` Thomas Bogendoerfer
2023-11-23 15:07           ` Jiaxun Yang
2023-11-23 16:07             ` Thomas Bogendoerfer
2023-11-23 17:33               ` Jiaxun Yang
2023-11-24 18:52                 ` Serge Semin
2023-11-24 22:03                   ` Jiaxun Yang
2023-11-27 16:23                     ` Serge Semin
2023-11-27 21:08                       ` Jiaxun Yang
2023-11-28 11:34                         ` Serge Semin
2023-11-28 15:46                           ` Jiaxun Yang
2023-11-30 19:16                             ` Serge Semin
2023-12-01  0:13                               ` Jiaxun Yang
2023-12-01 14:54                                 ` Serge Semin
2023-12-01 15:10                                   ` Jiaxun Yang
2023-12-01 18:26                                     ` Serge Semin
2023-11-28 12:41                       ` Arnd Bergmann
2023-11-28 13:52                         ` Serge Semin
2023-11-28 21:59                           ` Arnd Bergmann
2023-11-30 19:26                             ` Serge Semin
2023-11-24 22:34                   ` Jiaxun Yang
2023-11-22 18:24 ` [PATCH 2/7] mips: Fix incorrect max_low_pfn adjustment Serge Semin
2023-11-22 18:24 ` [PATCH 3/7] mips: Fix max_mapnr being uninitialized on early stages Serge Semin
2023-11-22 18:24 ` [PATCH 4/7] mips: Optimize max_mapnr init procedure Serge Semin
2023-11-22 18:24 ` [PATCH 5/7] mm/mm_init.c: Extend init unavailable range doc info Serge Semin
2023-11-23 10:18   ` Mike Rapoport
2023-11-23 10:42     ` Serge Semin
2023-11-24  8:19       ` Mike Rapoport [this message]
2023-11-24 11:18         ` Serge Semin
2023-11-28  7:13           ` Mike Rapoport
2023-11-28 10:51             ` Serge Semin
2023-11-29  6:14               ` Mike Rapoport
2023-11-30 13:30                 ` Serge Semin
2023-11-22 18:24 ` [PATCH 6/7] mm/mm_init.c: Append '\n' to the unavailable ranges log-message Serge Semin
2023-11-23 10:06   ` Mike Rapoport
2023-11-22 18:24 ` [PATCH 7/7] mips: Set dump-stack arch description Serge Semin
2023-11-22 18:29 ` [PATCH 0/7] MIPS: mm: Fix some memory-related issues Andrew Morton
2023-11-23 10:12   ` Serge Semin

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=20231124081900.GG636165@kernel.org \
    --to=rppt@kernel.org \
    --cc=Alexey.Malahov@baikalelectronics.ru \
    --cc=akpm@linux-foundation.org \
    --cc=aleksandar.rikalo@syrmia.com \
    --cc=arikalo@gmail.com \
    --cc=arnd@arndb.de \
    --cc=cfu@wavecomp.com \
    --cc=dragan.mladjenovic@syrmia.com \
    --cc=fancer.lancer@gmail.com \
    --cc=jiaxun.yang@flygoat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=maz@kernel.org \
    --cc=tsbogend@alpha.franken.de \
    --cc=willy@infradead.org \
    --cc=yangtiezhu@loongson.cn \
    --cc=yangyinglu@loongson.cn \
    /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.