All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mike Rapoport <rppt@kernel.org>
To: Dong Aisheng <dongas86@gmail.com>
Cc: Dong Aisheng <aisheng.dong@nxp.com>,
	linux-mm@kvack.org, open list <linux-kernel@vger.kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>
Subject: Re: [PATCH 2/5] mm/sparse: free section usage memory in case populate_section_memmap failed
Date: Tue, 18 May 2021 14:43:15 +0300	[thread overview]
Message-ID: <YKOoU7GjZ6cDogiH@kernel.org> (raw)
In-Reply-To: <CAA+hA=QcNWo3brs4HvdBb+QHHOiBHgF3hdbfJ1ivaGHiBXM4EQ@mail.gmail.com>

On Tue, May 18, 2021 at 06:25:28PM +0800, Dong Aisheng wrote:
> On Tue, May 18, 2021 at 6:09 PM Mike Rapoport <rppt@kernel.org> wrote:
> >
> > On Mon, May 17, 2021 at 07:20:41PM +0800, Dong Aisheng wrote:
> > > Free section usage memory in case populate_section_memmap failed.
> > > We use map_count to track the remain unused memory to be freed.
> > >
> > > Cc: Andrew Morton <akpm@linux-foundation.org>
> > > Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
> > > ---
> > >  mm/sparse.c | 2 ++
> > >  1 file changed, 2 insertions(+)
> > >
> > > diff --git a/mm/sparse.c b/mm/sparse.c
> > > index 7ac481353b6b..98bfacc763da 100644
> > > --- a/mm/sparse.c
> > > +++ b/mm/sparse.c
> > > @@ -549,12 +549,14 @@ static void __init sparse_init_nid(int nid, unsigned long pnum_begin,
> > >                              __func__, nid);
> > >                       pnum_begin = pnum;
> > >                       sparse_buffer_fini();
> > > +                     memblock_free_early(__pa(usage), map_count * mem_section_usage_size());
> >
> > I'd move both sparse_buffer_fini() and freeing of 'usage' memory after the
> > failed label.
> >
> 
> Doing that needs to introduce another 'failed' label.
> Do you think if it's necessary?

In general, it's preferred way of error handling:

https://www.kernel.org/doc/html/latest/process/coding-style.html#centralized-exiting-of-functions
 
> e.g.
> diff --git a/mm/sparse.c b/mm/sparse.c
> index 7ac481353b6b..408b737e168e 100644
> --- a/mm/sparse.c
> +++ b/mm/sparse.c
> @@ -533,7 +533,7 @@ static void __init sparse_init_nid(int nid,
> unsigned long pnum_begin,
>                         mem_section_usage_size() * map_count);
>         if (!usage) {
>                 pr_err("%s: node[%d] usemap allocation failed", __func__, nid);
> -               goto failed;
> +               goto failed1;
>         }
>         sparse_buffer_init(map_count * section_map_size(), nid);
>         for_each_present_section_nr(pnum_begin, pnum) {
> @@ -548,17 +548,20 @@ static void __init sparse_init_nid(int nid,
> unsigned long pnum_begin,
>                         pr_err("%s: node[%d] memory map backing
> failed. Some memory will not be available.",
>                                __func__, nid);
>                         pnum_begin = pnum;
> -                       sparse_buffer_fini();
> -                       goto failed;
> +                       goto failed2;
>                 }
>                 check_usemap_section_nr(nid, usage);
>                 sparse_init_one_section(__nr_to_section(pnum), pnum, map, usage,
>                                 SECTION_IS_EARLY);
>                 usage = (void *) usage + mem_section_usage_size();
> +               map_count--;
>         }
>         sparse_buffer_fini();
>         return;
> -failed:
> +failed2:
> +       sparse_buffer_fini();
> +       memblock_free_early(__pa(usage), map_count * mem_section_usage_size());
> +failed1:
>         /* We failed to allocate, mark all the following pnums as not present */
>         for_each_present_section_nr(pnum_begin, pnum) {
>                 struct mem_section *ms;
> 
> Regards
> Aisheng
> > >                       goto failed;
> > >               }
> > >               check_usemap_section_nr(nid, usage);
> > >               sparse_init_one_section(__nr_to_section(pnum), pnum, map, usage,
> > >                               SECTION_IS_EARLY);
> > >               usage = (void *) usage + mem_section_usage_size();
> > > +             map_count--;
> > >       }
> > >       sparse_buffer_fini();
> > >       return;
> > > --
> > > 2.25.1
> > >
> > >
> >
> > --
> > Sincerely yours,
> > Mike.

-- 
Sincerely yours,
Mike.

  reply	other threads:[~2021-05-18 11:43 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-17 11:20 [PATCH 0/5] mm/sparse: a few minor fixes and improvements Dong Aisheng
2021-05-17 11:20 ` [PATCH 1/5] mm: correct SECTION_SHIFT name in code comments Dong Aisheng
2021-05-17 17:17   ` Yu Zhao
2021-05-17 17:17     ` Yu Zhao
2021-05-18  2:48     ` Aisheng Dong
2021-05-17 11:20 ` [PATCH 2/5] mm/sparse: free section usage memory in case populate_section_memmap failed Dong Aisheng
2021-05-18 10:09   ` Mike Rapoport
2021-05-18 10:25     ` Dong Aisheng
2021-05-18 10:25       ` Dong Aisheng
2021-05-18 11:43       ` Mike Rapoport [this message]
2021-05-19  4:04         ` Dong Aisheng
2021-05-19  4:04           ` Dong Aisheng
2021-05-25  7:52   ` David Hildenbrand
2021-05-25  8:15     ` Dong Aisheng
2021-05-25  8:15       ` Dong Aisheng
2021-05-17 11:20 ` [PATCH 3/5] mm/sparse: move mem_sections allocation out of memory_present() Dong Aisheng
2021-05-18 10:12   ` Mike Rapoport
2021-05-18 10:45     ` Dong Aisheng
2021-05-18 10:45       ` Dong Aisheng
2021-05-17 11:20 ` [PATCH 4/5] mm: rename the global section array to mem_sections Dong Aisheng
2021-05-17 11:20   ` Dong Aisheng
2021-05-25  7:55   ` David Hildenbrand
2021-05-25  7:55     ` David Hildenbrand
2021-05-25  8:32     ` Dong Aisheng
2021-05-25  8:32       ` Dong Aisheng
2021-05-25  8:32       ` Dong Aisheng
2021-05-17 11:20 ` [PATCH 5/5] mm/page_alloc: improve memmap_pages and dma_reserve dbg msg Dong Aisheng
2021-05-25  8:01   ` David Hildenbrand
2021-05-25  8:39     ` Dong Aisheng
2021-05-25  8:39       ` Dong Aisheng

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=YKOoU7GjZ6cDogiH@kernel.org \
    --to=rppt@kernel.org \
    --cc=aisheng.dong@nxp.com \
    --cc=akpm@linux-foundation.org \
    --cc=dongas86@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    /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.