Re: [PATCH v3] m68k: Fix memblock-related crashes

2018-12-19 Thread Geert Uytterhoeven
Hi Andreas,

On Mon, Dec 17, 2018 at 8:34 PM Andreas Schwab  wrote:
> On Dez 17 2018, Andreas Schwab  wrote:
> > On Dez 13 2018, Andreas Schwab  wrote:
> >> I'm now getting this Oops:
> >>
> >> [   65.39] Unable to handle kernel NULL pointer dereference at virtual 
> >> address (ptrval)
> >> [   65.39] Oops: 
> >> [   65.39] Modules linked in: nls_iso8859_1 nls_cp437 vfat fat 
> >> virtio_rng virtio_blk virtio_ring virtio xfs btrfs xor zlib_deflate 
> >> raid6_pq libcrc32c reiserfs squashfs fuse dm_snapshot dm_bufio dm_mod 
> >> binfmt_misc loop sg
> >> [   65.39] PC: [<00211544>] blk_throtl_bio+0x10e/0x592
> >
> > And the crash does not occur when I revert commit 1008a11590.
>
> That is not true, so this is an unrelated bug.

Thank you.

So I'll queue my patch as a late fix for v4.20.
Sun-3 can be fixed when someone can test Mike's suggestion.

Gr{oetje,eeting}s,

Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- ge...@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds


Re: [PATCH v3] m68k: Fix memblock-related crashes

2018-12-17 Thread Andreas Schwab
On Dez 17 2018, Andreas Schwab  wrote:

> On Dez 13 2018, Andreas Schwab  wrote:
>
>> I'm now getting this Oops:
>>
>> [   65.39] Unable to handle kernel NULL pointer dereference at virtual 
>> address (ptrval)
>> [   65.39] Oops: 
>> [   65.39] Modules linked in: nls_iso8859_1 nls_cp437 vfat fat 
>> virtio_rng virtio_blk virtio_ring virtio xfs btrfs xor zlib_deflate raid6_pq 
>> libcrc32c reiserfs squashfs fuse dm_snapshot dm_bufio dm_mod binfmt_misc 
>> loop sg
>> [   65.39] PC: [<00211544>] blk_throtl_bio+0x10e/0x592
>
> And the crash does not occur when I revert commit 1008a11590.

That is not true, so this is an unrelated bug.

Andreas.

-- 
Andreas Schwab, sch...@linux-m68k.org
GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510  2552 DF73 E780 A9DA AEC1
"And now for something completely different."


Re: [PATCH v3] m68k: Fix memblock-related crashes

2018-12-17 Thread Andreas Schwab
On Dez 13 2018, Andreas Schwab  wrote:

> I'm now getting this Oops:
>
> [   65.39] Unable to handle kernel NULL pointer dereference at virtual 
> address (ptrval)
> [   65.39] Oops: 
> [   65.39] Modules linked in: nls_iso8859_1 nls_cp437 vfat fat virtio_rng 
> virtio_blk virtio_ring virtio xfs btrfs xor zlib_deflate raid6_pq libcrc32c 
> reiserfs squashfs fuse dm_snapshot dm_bufio dm_mod binfmt_misc loop sg
> [   65.39] PC: [<00211544>] blk_throtl_bio+0x10e/0x592

And the crash does not occur when I revert commit 1008a11590.

Andreas.

-- 
Andreas Schwab, sch...@linux-m68k.org
GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510  2552 DF73 E780 A9DA AEC1
"And now for something completely different."


Re: [PATCH v3] m68k: Fix memblock-related crashes

2018-12-13 Thread Andreas Schwab
I'm now getting this Oops:

[   65.39] Unable to handle kernel NULL pointer dereference at virtual 
address (ptrval)
[   65.39] Oops: 
[   65.39] Modules linked in: nls_iso8859_1 nls_cp437 vfat fat virtio_rng 
virtio_blk virtio_ring virtio xfs btrfs xor zlib_deflate raid6_pq libcrc32c 
reiserfs squashfs fuse dm_snapshot dm_bufio dm_mod binfmt_misc loop sg
[   65.39] PC: [<00211544>] blk_throtl_bio+0x10e/0x592
[   65.39] SR: 2700  SP: (ptrval)  a2: bf506dc0
[   65.39] d0: 0001d1: 03ce63fbd2: d3: 0016
[   65.39] d4: a45bd5: a0: a1: 
[   65.39] Process mkswap (pid: 289, task=(ptrval))
[   65.39] Frame format=7 eff addr=0060 ssw=0505 faddr=0060
[   65.39] wb 1 stat/addr/data:   
[   65.39] wb 2 stat/addr/data:   
[   65.39] wb 3 stat/addr/data:  0060 0001dba1
[   65.39] push data:    
[   65.39] Stack from bd1b7bdc:
[   65.39] 0008 0008  0002  0006 
bd6e0b40 bf596c18
[   65.39] 00682988 bd1b7c78 006000c0 0003  0080 
0005 001f28e4
[   65.39] bf596c18 bf4f1800 bd6e0b40 0008 0008  
1000 000a1848
[   65.39] 0001 bd6e0b40 bf596c18 bd1b7e24 0008 0008 
bf4f1800 bf596c18
[   65.39] bd1b7e24 bd1b7cec 0001 bd1b7d3a 00095c52 0010ce96 
000a1848 bd1b7cec
[   65.39] 001f3ea8 bd6e0b40 0008 0008  bd6e0b40 
027616cc bd1b7e24
[   65.39] Call Trace: [<0008>] check_ids+0x8/0x64
[   65.39]  [<001f28e4>] generic_make_request_checks+0x3ca/0x4ee
[   65.39]  [<0008>] check_ids+0x8/0x64
[   65.39]  [<1000>] kernel_pg_dir+0x0/0x1000
[   65.39]  [<000a1848>] __put_page+0x0/0x32
[   65.39]  [<0008>] check_ids+0x8/0x64
[   65.39]  [<00095c52>] add_to_page_cache_lru+0x0/0xc4
[   65.39]  [<0010ce96>] do_mpage_readpage+0x0/0x5cc
[   65.39]  [<000a1848>] __put_page+0x0/0x32
[   65.39]  [<001f3ea8>] generic_make_request+0x32/0x23c
[   65.39]  [<0008>] check_ids+0x8/0x64
[   65.39]  [<001f417c>] submit_bio+0xca/0xfc
[   65.39]  [<00095c52>] add_to_page_cache_lru+0x0/0xc4
[   65.39]  [<0010ce96>] do_mpage_readpage+0x0/0x5cc
[   65.39]  [<00095c52>] add_to_page_cache_lru+0x0/0xc4
[   65.39]  [<0010ce96>] do_mpage_readpage+0x0/0x5cc
[   65.39]  [<000a1848>] __put_page+0x0/0x32
[   65.39]  [<0010ce8a>] mpage_bio_submit+0x2e/0x3a
[   65.39]  [<0010d55a>] mpage_readpages+0xf8/0x108
[   65.39]  [<0008>] check_ids+0x8/0x64
[   65.39]  [<00433256>] radix_tree_lookup+0x0/0x1a
[   65.39]  [] rtc_ioctl+0x10c/0x2ae
[   65.39]  [<00010100>] sixty_four+0x2/0x10
[   65.39]  [<1000>] kernel_pg_dir+0x0/0x1000
[   65.39]  [<00107370>] blkdev_get_block+0x0/0x30
[   65.39]  [<000a0eb4>] read_pages+0x3c/0xe6
[   65.39]  [<00107370>] blkdev_get_block+0x0/0x30
[   65.39]  [<0003>] _sched_setscheduler+0x47/0x7e
[   65.39]  [<00433256>] radix_tree_lookup+0x0/0x1a
[   65.39]  [<0009cd42>] __alloc_pages_nodemask+0x0/0x86a
[   65.39]  [<000a1188>] __do_page_cache_readahead+0x92/0x13e
[   65.39]  [<000a10f6>] __do_page_cache_readahead+0x0/0x13e
[   65.39]  [<000a1558>] force_page_cache_readahead+0x94/0xa2
[   65.39]  [<000a1848>] __put_page+0x0/0x32
[   65.39]  [<00096316>] unlock_page+0x0/0x2a
[   65.39]  [<000970f4>] generic_file_buffered_read+0x11e/0x64a
[   65.39]  [<000986f4>] generic_file_read_iter+0x100/0x132
[   65.39]  [<000e0246>] __vfs_read+0x116/0x150
[   65.39]  [<0002>] _FP_CALL_TOP+0x9a46/0xd512
[   65.39]  [<000e02dc>] vfs_read+0x5c/0xe4
[   65.39]  [<000e0766>] ksys_read+0x42/0x8a
[   65.39]  [<000e07c0>] sys_read+0x12/0x18
[   65.39]  [<2934>] syscall+0x8/0xc
[   65.39]  [] bvme6000_gettimeoffset+0xaa/0xe2
[   65.39] Code: 2d20 012a 2839 005f 5124 226b 0014 7001  0060 6600 
0210 4a29 0064 6700 0208 4a8b 6700 0294 2053 2068 0014 2028 002c

Andreas.

-- 
Andreas Schwab, sch...@linux-m68k.org
GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510  2552 DF73 E780 A9DA AEC1
"And now for something completely different."


Re: [PATCH v3] m68k: Fix memblock-related crashes

2018-12-12 Thread Geert Uytterhoeven
Hi Andreas,

On Fri, Dec 7, 2018 at 5:50 PM Geert Uytterhoeven  wrote:
> When running the kernel in Fast RAM on Atari:
>
> Ignoring memory chunk at 0x0:0xe0 before the first chunk
> ...
> Unable to handle kernel NULL pointer dereference at virtual address 
> (ptrval)
> Oops: 
> Modules linked in:
> PC: [<0069dbac>] free_all_bootmem+0x12c/0x186
> SR: 2714  SP: (ptrval)  a2: 005e3314
> d0: d1: 000ad2: 0e00d3: 
> d4: 005e1fc0d5: 001aa0: 0100a1: 
> Process swapper (pid: 0, task=(ptrval))
> Frame format=7 eff addr=0736 ssw=0505 faddr=0736
> wb 1 stat/addr/data:   
> wb 2 stat/addr/data:   
> wb 3 stat/addr/data:  0736 
> push data:    
> Stack from 005e1f84:
>  000a 027d3260 006b5006    
> 
> 0004f062 0003a220 0069e272 005e1ff8 054c  00e0 
> 
> 0001 00693cd8 027d3260 0004f062 0003a220 00691be6  
> 
>     006b5006  00690872
> Call Trace: [<0004f062>] printk+0x0/0x18
>  [<0003a220>] parse_args+0x0/0x2d4
>  [<0069e272>] memblock_virt_alloc_try_nid+0x0/0xa4
>  [<00693cd8>] mem_init+0xa/0x5c
>  [<0004f062>] printk+0x0/0x18
>  [<0003a220>] parse_args+0x0/0x2d4
>  [<00691be6>] start_kernel+0x1ca/0x462
>  [<00690872>] _sinittext+0x872/0x11f8
> Code: 7a1a eaae 2270 6db0 0061 ef14 2f01 2f03 <96a9> 0736 2203 e589 d681 
> e78b d6a9 0732 2f03 2f40 0034 4eb9 0069 b8d0 260e 4fef
> Disabling lock debugging due to kernel taint
> Kernel panic - not syncing: Attempted to kill the idle task!
>
> As the kernel must run in the memory chunk with the lowest address,
> ST-RAM is ignored, and removed from the m68k_memory[] array.
> However, it is not removed from memblock, causing a crash later.
>
> More investigation shows that there are 3 places where memory chunks are
> ignored, all after the calls to memblock_add() in m68k_parse_bootinfo(),
> and thus causing crashes:
>   1. On classic m68k CPUs with a MMU, paging_init() ignores all memory
>  chunks below the first chunk, cfr. above,
>   2. On Amigas equipped with a Zorro III bus, config_amiga() ignores all
>  Zorro II memory,
>   3. If CONFIG_SINGLE_MEMORY_CHUNK=y, m68k_parse_bootinfo() ignores all
>  but the first memory chunk.
>
> Fix this by moving the calls to memblock_add() from
> m68k_parse_bootinfo() to paging_init(), after all ignored memory chunks
> have been removed from m68k_memory[].
>
> Reported-by: Andreas Schwab 
> Fixes: 1008a11590b966b4 ("m68k: switch to MEMBLOCK + NO_BOOTMEM")
> Signed-off-by: Geert Uytterhoeven 

Does this patch fix your crash?

Thanks!

Gr{oetje,eeting}s,

Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- ge...@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds


Re: [PATCH v3] m68k: Fix memblock-related crashes

2018-12-08 Thread Mike Rapoport
On Sat, Dec 08, 2018 at 11:51:38AM +0100, Geert Uytterhoeven wrote:
> Hi Mike,
> 
> On Fri, Dec 7, 2018 at 10:02 PM Mike Rapoport  wrote:
> > On Fri, Dec 07, 2018 at 05:50:11PM +0100, Geert Uytterhoeven wrote:
> > > Sun-3 must be broken before this fix, as it fills in m68k_memory[0] in
> > > config_sun3(), i.e. after m68k_parse_bootinfo().
> > > Sun-3 is not fixed by this fix, as it uses its own paging_init(), not
> > > the one in motorola.c.
> > > Fixing Sun-3 requires adding memblock_add()/memblock_reserve() calls to
> > > the Sun-3 memory management code.
> >
> > I think that adding memblock_add() to config_sun3 would be sufficient,
> > something like the diff below. This will make memblock aware of the
> > available physical memory and it seems there no allocations in sun3 before
> > paging_init().
> >
> > diff --git a/arch/m68k/sun3/config.c b/arch/m68k/sun3/config.c
> > index 542c440..9a5b9dd 100644
> > --- a/arch/m68k/sun3/config.c
> > +++ b/arch/m68k/sun3/config.c
> > @@ -150,6 +150,7 @@ void __init config_sun3(void)
> >
> > m68k_num_memory=1;
> >  m68k_memory[0].size=*(romvec->pv_sun3mem);
> > +   memblock_add(memory_start, memory_end - memory_start);
> >
> > sun3_bootmem_alloc(memory_start, memory_end);
> >  }
> 
> Thanks!
> 
> It doesn't need a memblock_reserve() for the kernel, as memory_start is
> already adjusted for that, right?

Yes, unless I've missed something.
 
> Anyone who can test this is on Sun-3? Thanks!
> 
> Gr{oetje,eeting}s,
> 
> Geert
> 
> -- 
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- 
> ge...@linux-m68k.org
> 
> In personal conversations with technical people, I call myself a hacker. But
> when I'm talking to journalists I just say "programmer" or something like 
> that.
> -- Linus Torvalds
> 

-- 
Sincerely yours,
Mike.



Re: [PATCH v3] m68k: Fix memblock-related crashes

2018-12-08 Thread John Paul Adrian Glaubitz
Hi Geert!

On 12/8/18 11:51 AM, Geert Uytterhoeven wrote:
> Anyone who can test this is on Sun-3? Thanks!

Theoretically, I can. I have three Sun-3 boxes but I haven't set them
up for booting a kernel yet. If I manage to find a quick guide for
getting started, I might be able to fire up a test machine.

Could maybe someone build me a test kernel so I can just focus on setting
up the machine and its bootserver?

Adrian

-- 
 .''`.  John Paul Adrian Glaubitz
: :' :  Debian Developer - glaub...@debian.org
`. `'   Freie Universitaet Berlin - glaub...@physik.fu-berlin.de
  `-GPG: 62FF 8A75 84E0 2956 9546  0006 7426 3B37 F5B5 F913


Re: [PATCH v3] m68k: Fix memblock-related crashes

2018-12-08 Thread Geert Uytterhoeven
Hi Mike,

On Fri, Dec 7, 2018 at 10:02 PM Mike Rapoport  wrote:
> On Fri, Dec 07, 2018 at 05:50:11PM +0100, Geert Uytterhoeven wrote:
> > Sun-3 must be broken before this fix, as it fills in m68k_memory[0] in
> > config_sun3(), i.e. after m68k_parse_bootinfo().
> > Sun-3 is not fixed by this fix, as it uses its own paging_init(), not
> > the one in motorola.c.
> > Fixing Sun-3 requires adding memblock_add()/memblock_reserve() calls to
> > the Sun-3 memory management code.
>
> I think that adding memblock_add() to config_sun3 would be sufficient,
> something like the diff below. This will make memblock aware of the
> available physical memory and it seems there no allocations in sun3 before
> paging_init().
>
> diff --git a/arch/m68k/sun3/config.c b/arch/m68k/sun3/config.c
> index 542c440..9a5b9dd 100644
> --- a/arch/m68k/sun3/config.c
> +++ b/arch/m68k/sun3/config.c
> @@ -150,6 +150,7 @@ void __init config_sun3(void)
>
> m68k_num_memory=1;
>  m68k_memory[0].size=*(romvec->pv_sun3mem);
> +   memblock_add(memory_start, memory_end - memory_start);
>
> sun3_bootmem_alloc(memory_start, memory_end);
>  }

Thanks!

It doesn't need a memblock_reserve() for the kernel, as memory_start is
already adjusted for that, right?

Anyone who can test this is on Sun-3? Thanks!

Gr{oetje,eeting}s,

Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- ge...@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds


Re: [PATCH v3] m68k: Fix memblock-related crashes

2018-12-07 Thread Mike Rapoport
On Fri, Dec 07, 2018 at 05:50:11PM +0100, Geert Uytterhoeven wrote:
> When running the kernel in Fast RAM on Atari:
> 
> Ignoring memory chunk at 0x0:0xe0 before the first chunk
> ...
> Unable to handle kernel NULL pointer dereference at virtual address 
> (ptrval)
> Oops: 
> Modules linked in:
> PC: [<0069dbac>] free_all_bootmem+0x12c/0x186
> SR: 2714  SP: (ptrval)  a2: 005e3314
> d0: d1: 000ad2: 0e00d3: 
> d4: 005e1fc0d5: 001aa0: 0100a1: 
> Process swapper (pid: 0, task=(ptrval))
> Frame format=7 eff addr=0736 ssw=0505 faddr=0736
> wb 1 stat/addr/data:   
> wb 2 stat/addr/data:   
> wb 3 stat/addr/data:  0736 
> push data:    
> Stack from 005e1f84:
>  000a 027d3260 006b5006    
> 
> 0004f062 0003a220 0069e272 005e1ff8 054c  00e0 
> 
> 0001 00693cd8 027d3260 0004f062 0003a220 00691be6  
> 
>     006b5006  00690872
> Call Trace: [<0004f062>] printk+0x0/0x18
>  [<0003a220>] parse_args+0x0/0x2d4
>  [<0069e272>] memblock_virt_alloc_try_nid+0x0/0xa4
>  [<00693cd8>] mem_init+0xa/0x5c
>  [<0004f062>] printk+0x0/0x18
>  [<0003a220>] parse_args+0x0/0x2d4
>  [<00691be6>] start_kernel+0x1ca/0x462
>  [<00690872>] _sinittext+0x872/0x11f8
> Code: 7a1a eaae 2270 6db0 0061 ef14 2f01 2f03 <96a9> 0736 2203 e589 d681 
> e78b d6a9 0732 2f03 2f40 0034 4eb9 0069 b8d0 260e 4fef
> Disabling lock debugging due to kernel taint
> Kernel panic - not syncing: Attempted to kill the idle task!
> 
> As the kernel must run in the memory chunk with the lowest address,
> ST-RAM is ignored, and removed from the m68k_memory[] array.
> However, it is not removed from memblock, causing a crash later.
> 
> More investigation shows that there are 3 places where memory chunks are
> ignored, all after the calls to memblock_add() in m68k_parse_bootinfo(),
> and thus causing crashes:
>   1. On classic m68k CPUs with a MMU, paging_init() ignores all memory
>  chunks below the first chunk, cfr. above,
>   2. On Amigas equipped with a Zorro III bus, config_amiga() ignores all
>  Zorro II memory,
>   3. If CONFIG_SINGLE_MEMORY_CHUNK=y, m68k_parse_bootinfo() ignores all
>  but the first memory chunk.
> 
> Fix this by moving the calls to memblock_add() from
> m68k_parse_bootinfo() to paging_init(), after all ignored memory chunks
> have been removed from m68k_memory[].
> 
> Reported-by: Andreas Schwab 
> Fixes: 1008a11590b966b4 ("m68k: switch to MEMBLOCK + NO_BOOTMEM")
> Signed-off-by: Geert Uytterhoeven 
> ---
> As all 3 cases involve ignoring memory chunks, thus not requiring real
> memory present in the ignored chunks, I managed to test all 3 cases on
> my Amiga 4000 by using a memfile describing nonexistent memory in the
> Zorro II or 32-bit address space, below system RAM.
> 
> Sun-3 must be broken before this fix, as it fills in m68k_memory[0] in
> config_sun3(), i.e. after m68k_parse_bootinfo().
> Sun-3 is not fixed by this fix, as it uses its own paging_init(), not
> the one in motorola.c.
> Fixing Sun-3 requires adding memblock_add()/memblock_reserve() calls to
> the Sun-3 memory management code.

I think that adding memblock_add() to config_sun3 would be sufficient,
something like the diff below. This will make memblock aware of the
available physical memory and it seems there no allocations in sun3 before
paging_init().

diff --git a/arch/m68k/sun3/config.c b/arch/m68k/sun3/config.c
index 542c440..9a5b9dd 100644
--- a/arch/m68k/sun3/config.c
+++ b/arch/m68k/sun3/config.c
@@ -150,6 +150,7 @@ void __init config_sun3(void)
 
m68k_num_memory=1;
 m68k_memory[0].size=*(romvec->pv_sun3mem);
+   memblock_add(memory_start, memory_end - memory_start);
 
sun3_bootmem_alloc(memory_start, memory_end);
 }
 
> v3:
>   - Move memblock_add() after memory block removal instead of sprinkling
> memblock_remove() all over the place,
>   - Remove Suggested-by, Tested-by.
> 
> v2:
>   - Add missing #include .
> ---
>  arch/m68k/kernel/setup_mm.c | 2 --
>  arch/m68k/mm/motorola.c | 2 ++
>  2 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/m68k/kernel/setup_mm.c b/arch/m68k/kernel/setup_mm.c
> index a1a3eaeaf58c960d..ad0195cbe04255ea 100644
> --- a/arch/m68k/kernel/setup_mm.c
> +++ b/arch/m68k/kernel/setup_mm.c
> @@ -164,8 +164,6 @@ static void __init m68k_parse_bootinfo(const struct 
> bi_record *record)
>   be32_to_cpu(m->addr);
>   m68k_memory[m68k_num_memory].size =
>   be32_to_cpu(m->size);
> - 

[PATCH v3] m68k: Fix memblock-related crashes

2018-12-07 Thread Geert Uytterhoeven
When running the kernel in Fast RAM on Atari:

Ignoring memory chunk at 0x0:0xe0 before the first chunk
...
Unable to handle kernel NULL pointer dereference at virtual address (ptrval)
Oops: 
Modules linked in:
PC: [<0069dbac>] free_all_bootmem+0x12c/0x186
SR: 2714  SP: (ptrval)  a2: 005e3314
d0: d1: 000ad2: 0e00d3: 
d4: 005e1fc0d5: 001aa0: 0100a1: 
Process swapper (pid: 0, task=(ptrval))
Frame format=7 eff addr=0736 ssw=0505 faddr=0736
wb 1 stat/addr/data:   
wb 2 stat/addr/data:   
wb 3 stat/addr/data:  0736 
push data:    
Stack from 005e1f84:
 000a 027d3260 006b5006    

0004f062 0003a220 0069e272 005e1ff8 054c  00e0 

0001 00693cd8 027d3260 0004f062 0003a220 00691be6  

    006b5006  00690872
Call Trace: [<0004f062>] printk+0x0/0x18
 [<0003a220>] parse_args+0x0/0x2d4
 [<0069e272>] memblock_virt_alloc_try_nid+0x0/0xa4
 [<00693cd8>] mem_init+0xa/0x5c
 [<0004f062>] printk+0x0/0x18
 [<0003a220>] parse_args+0x0/0x2d4
 [<00691be6>] start_kernel+0x1ca/0x462
 [<00690872>] _sinittext+0x872/0x11f8
Code: 7a1a eaae 2270 6db0 0061 ef14 2f01 2f03 <96a9> 0736 2203 e589 d681 
e78b d6a9 0732 2f03 2f40 0034 4eb9 0069 b8d0 260e 4fef
Disabling lock debugging due to kernel taint
Kernel panic - not syncing: Attempted to kill the idle task!

As the kernel must run in the memory chunk with the lowest address,
ST-RAM is ignored, and removed from the m68k_memory[] array.
However, it is not removed from memblock, causing a crash later.

More investigation shows that there are 3 places where memory chunks are
ignored, all after the calls to memblock_add() in m68k_parse_bootinfo(),
and thus causing crashes:
  1. On classic m68k CPUs with a MMU, paging_init() ignores all memory
 chunks below the first chunk, cfr. above,
  2. On Amigas equipped with a Zorro III bus, config_amiga() ignores all
 Zorro II memory,
  3. If CONFIG_SINGLE_MEMORY_CHUNK=y, m68k_parse_bootinfo() ignores all
 but the first memory chunk.

Fix this by moving the calls to memblock_add() from
m68k_parse_bootinfo() to paging_init(), after all ignored memory chunks
have been removed from m68k_memory[].

Reported-by: Andreas Schwab 
Fixes: 1008a11590b966b4 ("m68k: switch to MEMBLOCK + NO_BOOTMEM")
Signed-off-by: Geert Uytterhoeven 
---
As all 3 cases involve ignoring memory chunks, thus not requiring real
memory present in the ignored chunks, I managed to test all 3 cases on
my Amiga 4000 by using a memfile describing nonexistent memory in the
Zorro II or 32-bit address space, below system RAM.

Sun-3 must be broken before this fix, as it fills in m68k_memory[0] in
config_sun3(), i.e. after m68k_parse_bootinfo().
Sun-3 is not fixed by this fix, as it uses its own paging_init(), not
the one in motorola.c.
Fixing Sun-3 requires adding memblock_add()/memblock_reserve() calls to
the Sun-3 memory management code.

v3:
  - Move memblock_add() after memory block removal instead of sprinkling
memblock_remove() all over the place,
  - Remove Suggested-by, Tested-by.

v2:
  - Add missing #include .
---
 arch/m68k/kernel/setup_mm.c | 2 --
 arch/m68k/mm/motorola.c | 2 ++
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/m68k/kernel/setup_mm.c b/arch/m68k/kernel/setup_mm.c
index a1a3eaeaf58c960d..ad0195cbe04255ea 100644
--- a/arch/m68k/kernel/setup_mm.c
+++ b/arch/m68k/kernel/setup_mm.c
@@ -164,8 +164,6 @@ static void __init m68k_parse_bootinfo(const struct 
bi_record *record)
be32_to_cpu(m->addr);
m68k_memory[m68k_num_memory].size =
be32_to_cpu(m->size);
-   memblock_add(m68k_memory[m68k_num_memory].addr,
-m68k_memory[m68k_num_memory].size);
m68k_num_memory++;
} else
pr_warn("%s: too many memory chunks\n",
diff --git a/arch/m68k/mm/motorola.c b/arch/m68k/mm/motorola.c
index 7497cf30bf1cd41b..3f3d0bf360910c0d 100644
--- a/arch/m68k/mm/motorola.c
+++ b/arch/m68k/mm/motorola.c
@@ -228,6 +228,7 @@ void __init paging_init(void)
 
min_addr = m68k_memory[0].addr;
max_addr = min_addr + m68k_memory[0].size;
+   memblock_add(m68k_memory[0].addr, m68k_memory[0].size);
for (i = 1; i < m68k_num_memory;) {
if (m68k_memory[i].addr < min_addr) {
printk("Ignoring memory chunk at 0x%lx:0x%lx before the 
first chunk\n",
@@ -238,6 +239,7 @@ void __init paging_init(void)