Re: pending 4.14-rc boot failures on arm64

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 22 December 2017 at 15:50, Naresh Kamboju <naresh.kamboju@xxxxxxxxxx> wrote:
> On 22 December 2017 at 14:36, Greg Kroah-Hartman
> <gregkh@xxxxxxxxxxxxxxxxxxx> wrote:
>> On Fri, Dec 22, 2017 at 02:29:55PM +0530, Naresh Kamboju wrote:
>>> On 22 December 2017 at 12:41, Greg Kroah-Hartman
>>> <gregkh@xxxxxxxxxxxxxxxxxxx> wrote:
>>> > On Thu, Dec 21, 2017 at 04:35:30PM -0600, Dan Rue wrote:
>>> >> Hi Greg,
>>> >>
>>> >> It looks like the pending v4.14.8-159-gc2a94d1a609 fails to boot on all
>>> >> arm64 boards. hikey and juno are failing for us, and I see similar arm64
>>> >> boot failures reported by kernelci.
>>> >>
>>> >> Still investigating root cause.
>>> >
>>> > Any help in bisecting to find the problem here would be great...
>>>
>>> Booting now on arm64 Hikey board. After reverting 83e3c48729d.
>>>
>>> git revert 83e3c48729d9ebb7af5a31a504f3fd6aff0348c4

Reverting above commit 83e3c48 (mm/sparsemem: Allocate mem_section at)
might not be the right way to fix this problem.
Instead cherry pick this commit 629a359bd to fix ARM64 boot crash problem.
(mm/sparsemem: Fix ARM64 boot crash when CONFIG_SPARSEMEM_EXTREME=y)

tree: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
branch: linux-4.14.y

git cherry-pick  629a359bdb0e0652a8227b4ff3125431995fec6e

$ git log --oneline -2
599755e mm/sparsemem: Fix ARM64 boot crash when CONFIG_SPARSEMEM_EXTREME=y
b483e86 Linux 4.14.9-rc1

Kernel version after the successful boot on Hikey.
Linux version 4.14.9-rc1-00161-g599755e (naresh@linaro) (gcc version
6.2.1 20161016 (Linaro GCC 6.2-2016.11-rc2)) #2 SMP PREEMPT Fri Dec 22
17:48:59 IST 2017

More information,
Found this commit from linux tree
----

>From 629a359bdb0e0652a8227b4ff3125431995fec6e Mon Sep 17 00:00:00 2001
From: "Kirill A. Shutemov" <kirill.shutemov@xxxxxxxxxxxxxxx>
Date: Tue, 7 Nov 2017 11:33:37 +0300
Subject: mm/sparsemem: Fix ARM64 boot crash when CONFIG_SPARSEMEM_EXTREME=y

Since commit:

  83e3c48729d9 ("mm/sparsemem: Allocate mem_section at runtime for
CONFIG_SPARSEMEM_EXTREME=y")

we allocate the mem_section array dynamically in
sparse_memory_present_with_active_regions(),
but some architectures, like arm64, don't call the routine to
initialize sparsemem.

Let's move the initialization into memory_present() it should cover all
architectures.

Reported-and-tested-by: Sudeep Holla <sudeep.holla@xxxxxxx>
Tested-by: Bjorn Andersson <bjorn.andersson@xxxxxxxxxx>
Signed-off-by: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx>
Acked-by: Will Deacon <will.deacon@xxxxxxx>
Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
Cc: linux-mm@xxxxxxxxx
Fixes: 83e3c48729d9 ("mm/sparsemem: Allocate mem_section at runtime
for CONFIG_SPARSEMEM_EXTREME=y")
Link: http://lkml.kernel.org/r/20171107083337.89952-1-kirill.shutemov@xxxxxxxxxxxxxxx
Signed-off-by: Ingo Molnar <mingo@xxxxxxxxxx>
---
 mm/page_alloc.c | 10 ----------
 mm/sparse.c     | 10 ++++++++++
 2 files changed, 10 insertions(+), 10 deletions(-)

(limited to 'mm')

diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 8dfd13f..77e4d3c 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -5646,16 +5646,6 @@ void __init
sparse_memory_present_with_active_regions(int nid)
  unsigned long start_pfn, end_pfn;
  int i, this_nid;

-#ifdef CONFIG_SPARSEMEM_EXTREME
- if (!mem_section) {
- unsigned long size, align;
-
- size = sizeof(struct mem_section) * NR_SECTION_ROOTS;
- align = 1 << (INTERNODE_CACHE_SHIFT);
- mem_section = memblock_virt_alloc(size, align);
- }
-#endif
-
  for_each_mem_pfn_range(i, nid, &start_pfn, &end_pfn, &this_nid)
  memory_present(this_nid, start_pfn, end_pfn);
 }
diff --git a/mm/sparse.c b/mm/sparse.c
index b00a973..d294148 100644
--- a/mm/sparse.c
+++ b/mm/sparse.c
@@ -206,6 +206,16 @@ void __init memory_present(int nid, unsigned long
start, unsigned long end)
 {
  unsigned long pfn;

+#ifdef CONFIG_SPARSEMEM_EXTREME
+ if (unlikely(!mem_section)) {
+ unsigned long size, align;
+
+ size = sizeof(struct mem_section) * NR_SECTION_ROOTS;
+ align = 1 << (INTERNODE_CACHE_SHIFT);
+ mem_section = memblock_virt_alloc(size, align);
+ }
+#endif
+
  start &= PAGE_SECTION_MASK;
  mminit_validate_memmodel_limits(&start, &end);
  for (pfn = start; pfn < end; pfn += PAGES_PER_SECTION) {
-- 
cgit v1.1

----
Reference link:

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/patch/mm?id=d04fdafc066fed10cc9610b2f36f1d0ff0327864

- Naresh

>>
>> Any hint as to what the name of that commit is?  The tree is rebased a
>> lot, that commit is long gone :(
>
> After reverting the below commit the boot successful.
>
> commit 83e3c48729d9ebb7af5a31a504f3fd6aff0348c4
> mm/sparsemem: Allocate mem_section at runtime for CONFIG_SPARSEMEM_EXTREME=y
>
> From the history of linux-next,
> I have reported linux-next 20171102 boot failure on arm64 on November 2nd
> Bug 3404 - linux-next-20171102 doesn't boot on HiKey
> https://bugs.linaro.org/show_bug.cgi?id=3404
>
> one of the comments from bug says
> "This bug is been fixed by applying this patch."
> [PATCH] mm, sparse: Fix boot on arm64
>
> [start quote]
> Since 83e3c48729d9 ("mm/sparsemem: Allocate mem_section at runtime for
> CONFIG_SPARSEMEM_EXTREME=y") we allocate mem_section dynamically in
> sparse_memory_present_with_active_regions(). But some architectures, like
> arm64, don't use the routine to initialize sparsemem.
>
> Let's move the initialization into memory_present() it should cover all
> architectures.
>
> Signed-off-by: Kirill A. Shutemov <kirill.shute...@xxxxxxxxxxxxxxx>
> Fixes: 83e3c48729d9 ("mm/sparsemem: Allocate mem_section at runtime for
> CONFIG_SPARSEMEM_EXTREME=y")
> ---
>  mm/page_alloc.c | 10 ----------
>  mm/sparse.c     | 10 ++++++++++
>  2 files changed, 10 insertions(+), 10 deletions(-)
>
> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> index 8dfd13f724d9..77e4d3c5c57b 100644
> --- a/mm/page_alloc.c
> +++ b/mm/page_alloc.c
> @@ -5646,16 +5646,6 @@ void __init
> sparse_memory_present_with_active_regions(int nid)
>         unsigned long start_pfn, end_pfn;
>         int i, this_nid;
>
> -#ifdef CONFIG_SPARSEMEM_EXTREME
> -       if (!mem_section) {
> -               unsigned long size, align;
> -
> -               size = sizeof(struct mem_section) * NR_SECTION_ROOTS;
> -               align = 1 << (INTERNODE_CACHE_SHIFT);
> -               mem_section = memblock_virt_alloc(size, align);
> -       }
> -#endif
> -
>         for_each_mem_pfn_range(i, nid, &start_pfn, &end_pfn, &this_nid)
>                 memory_present(this_nid, start_pfn, end_pfn);
>  }
> diff --git a/mm/sparse.c b/mm/sparse.c
> index b00a97398795..d294148ba395 100644
> --- a/mm/sparse.c
> +++ b/mm/sparse.c
> @@ -206,6 +206,16 @@ void __init memory_present(int nid, unsigned long start,
> unsigned long end)
>  {
>         unsigned long pfn;
>
> +#ifdef CONFIG_SPARSEMEM_EXTREME
> +       if (unlikely(!mem_section)) {
> +               unsigned long size, align;
> +
> +               size = sizeof(struct mem_section) * NR_SECTION_ROOTS;
> +               align = 1 << (INTERNODE_CACHE_SHIFT);
> +               mem_section = memblock_virt_alloc(size, align);
> +       }
> +#endif
> +
>         start &= PAGE_SECTION_MASK;
>         mminit_validate_memmodel_limits(&start, &end);
>         for (pfn = start; pfn < end; pfn += PAGES_PER_SECTION) {
>
> [end quote]
>
> Please refer this link for more information,
> Re: [tip:x86/mm] mm/sparsemem: Allocate mem_section at runtime for
> CONFIG_SPARSEMEM_EXTREME=y
> https://www.mail-archive.com/linux-kernel@xxxxxxxxxxxxxxx/msg1527427.html#nav
>
>>
>>> Linux version 4.14.9-rc1-00160-gb610c43 (naresh@linaro) (gcc version
>>> 4.9.2 20140904 (prerelease) (crosstool-NG linaro-1.13.1-4.9-2014.09 -
>>> Linaro GCC 4.9-
>>> 2014.09)) #1 SMP PREEMPT Fri Dec 22 14:21:46 IST 2017
>>>
>>> Ref:
> https://www.mail-archive.com/linux-kernel@xxxxxxxxxxxxxxx/msg1527427.html#nav
> https://bugs.linaro.org/show_bug.cgi?id=3404
>>
>> What does this mean?
> It was additional information.
> Reference thread and bug links about this commit and bug investigation.
>
>>
>> confused,
>>
>> greg k-h



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]