* [PATCH] MIPS: fix mapstart when using initrd
@ 2013-09-23 14:10 Ashok Kumar
2013-10-07 16:08 ` Ralf Baechle
2013-10-14 12:05 ` Jonas Gorski
0 siblings, 2 replies; 8+ messages in thread
From: Ashok Kumar @ 2013-09-23 14:10 UTC (permalink / raw
To: linux-mips, gerg; +Cc: ralf, Ashok Kumar
When initrd is present in the PFN right after the _end, bootmem
bitmap(mapstart) overwrites it. So check for initrd_end in
mapstart calculation.
Signed-off-by: Ashok Kumar <ashoks@broadcom.com>
---
This is seen after the commit
"mips: fix start of free memory when using initrd"
in git://git.linux-mips.org/pub/scm/ralf/upstream-sfr.git branch
Tested the image on MIPS platform creating the above
said scenario and initrd was corrupted.
arch/mips/kernel/setup.c | 5 +++++
1 files changed, 5 insertions(+), 0 deletions(-)
diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c
index 5342385..dfb8585 100644
--- a/arch/mips/kernel/setup.c
+++ b/arch/mips/kernel/setup.c
@@ -364,6 +364,11 @@ static void __init bootmem_init(void)
}
/*
+ * mapstart should be after initrd_end
+ */
+ mapstart = max(mapstart, (unsigned long)PFN_UP(__pa(initrd_end)));
+
+ /*
* Initialize the boot-time allocator with low memory only.
*/
bootmap_size = init_bootmem_node(NODE_DATA(0), mapstart,
--
1.7.6
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH] MIPS: fix mapstart when using initrd
2013-09-23 14:10 [PATCH] MIPS: fix mapstart when using initrd Ashok Kumar
@ 2013-10-07 16:08 ` Ralf Baechle
2013-10-07 16:10 ` Markos Chandras
2013-10-14 12:05 ` Jonas Gorski
1 sibling, 1 reply; 8+ messages in thread
From: Ralf Baechle @ 2013-10-07 16:08 UTC (permalink / raw
To: Ashok Kumar; +Cc: linux-mips, gerg
On Mon, Sep 23, 2013 at 07:40:26PM +0530, Ashok Kumar wrote:
> Date: Mon, 23 Sep 2013 19:40:26 +0530
> From: Ashok Kumar <ashoks@broadcom.com>
> To: linux-mips@linux-mips.org, gerg@uclinux.org
> cc: ralf@linux-mips.org, Ashok Kumar <ashoks@broadcom.com>
> Subject: [PATCH] MIPS: fix mapstart when using initrd
> Content-Type: text/plain
>
> When initrd is present in the PFN right after the _end, bootmem
> bitmap(mapstart) overwrites it. So check for initrd_end in
> mapstart calculation.
>
> Signed-off-by: Ashok Kumar <ashoks@broadcom.com>
> ---
> This is seen after the commit
> "mips: fix start of free memory when using initrd"
> in git://git.linux-mips.org/pub/scm/ralf/upstream-sfr.git branch
>
> Tested the image on MIPS platform creating the above
> said scenario and initrd was corrupted.
And it gloriously breaks the build if CONFIG_BLK_DEV_INITRD is disabled.
Now most configurations will fail with something like:
[...]
LD vmlinux
arch/mips/built-in.o: In function `setup_arch':
(.init.text+0xff8): undefined reference to `initrd_end'
arch/mips/built-in.o: In function `setup_arch':
(.init.text+0xffc): undefined reference to `initrd_end'
make[2]: *** [vmlinux] Error 1
make[1]: *** [sub-make] Error 2
make: *** [all] Error 2
make: Leaving directory `/home/ralf/src/linux/obj/lasat-build'
Ralf
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] MIPS: fix mapstart when using initrd
@ 2013-10-07 16:10 ` Markos Chandras
0 siblings, 0 replies; 8+ messages in thread
From: Markos Chandras @ 2013-10-07 16:10 UTC (permalink / raw
To: linux-mips
On 10/07/13 17:08, Ralf Baechle wrote:
> On Mon, Sep 23, 2013 at 07:40:26PM +0530, Ashok Kumar wrote:
>> Date: Mon, 23 Sep 2013 19:40:26 +0530
>> From: Ashok Kumar <ashoks@broadcom.com>
>> To: linux-mips@linux-mips.org, gerg@uclinux.org
>> cc: ralf@linux-mips.org, Ashok Kumar <ashoks@broadcom.com>
>> Subject: [PATCH] MIPS: fix mapstart when using initrd
>> Content-Type: text/plain
>>
>> When initrd is present in the PFN right after the _end, bootmem
>> bitmap(mapstart) overwrites it. So check for initrd_end in
>> mapstart calculation.
>>
>> Signed-off-by: Ashok Kumar <ashoks@broadcom.com>
>> ---
>> This is seen after the commit
>> "mips: fix start of free memory when using initrd"
>> in git://git.linux-mips.org/pub/scm/ralf/upstream-sfr.git branch
>>
>> Tested the image on MIPS platform creating the above
>> said scenario and initrd was corrupted.
>
> And it gloriously breaks the build if CONFIG_BLK_DEV_INITRD is disabled.
> Now most configurations will fail with something like:
>
> [...]
> LD vmlinux
> arch/mips/built-in.o: In function `setup_arch':
> (.init.text+0xff8): undefined reference to `initrd_end'
> arch/mips/built-in.o: In function `setup_arch':
> (.init.text+0xffc): undefined reference to `initrd_end'
> make[2]: *** [vmlinux] Error 1
> make[1]: *** [sub-make] Error 2
> make: *** [all] Error 2
> make: Leaving directory `/home/ralf/src/linux/obj/lasat-build'
>
> Ralf
>
Hi Ralf,
I just sent a patch for that
http://patchwork.linux-mips.org/patch/6028/
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] MIPS: fix mapstart when using initrd
@ 2013-10-07 16:10 ` Markos Chandras
0 siblings, 0 replies; 8+ messages in thread
From: Markos Chandras @ 2013-10-07 16:10 UTC (permalink / raw
To: linux-mips
On 10/07/13 17:08, Ralf Baechle wrote:
> On Mon, Sep 23, 2013 at 07:40:26PM +0530, Ashok Kumar wrote:
>> Date: Mon, 23 Sep 2013 19:40:26 +0530
>> From: Ashok Kumar <ashoks@broadcom.com>
>> To: linux-mips@linux-mips.org, gerg@uclinux.org
>> cc: ralf@linux-mips.org, Ashok Kumar <ashoks@broadcom.com>
>> Subject: [PATCH] MIPS: fix mapstart when using initrd
>> Content-Type: text/plain
>>
>> When initrd is present in the PFN right after the _end, bootmem
>> bitmap(mapstart) overwrites it. So check for initrd_end in
>> mapstart calculation.
>>
>> Signed-off-by: Ashok Kumar <ashoks@broadcom.com>
>> ---
>> This is seen after the commit
>> "mips: fix start of free memory when using initrd"
>> in git://git.linux-mips.org/pub/scm/ralf/upstream-sfr.git branch
>>
>> Tested the image on MIPS platform creating the above
>> said scenario and initrd was corrupted.
>
> And it gloriously breaks the build if CONFIG_BLK_DEV_INITRD is disabled.
> Now most configurations will fail with something like:
>
> [...]
> LD vmlinux
> arch/mips/built-in.o: In function `setup_arch':
> (.init.text+0xff8): undefined reference to `initrd_end'
> arch/mips/built-in.o: In function `setup_arch':
> (.init.text+0xffc): undefined reference to `initrd_end'
> make[2]: *** [vmlinux] Error 1
> make[1]: *** [sub-make] Error 2
> make: *** [all] Error 2
> make: Leaving directory `/home/ralf/src/linux/obj/lasat-build'
>
> Ralf
>
Hi Ralf,
I just sent a patch for that
http://patchwork.linux-mips.org/patch/6028/
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] MIPS: fix mapstart when using initrd
2013-10-07 16:10 ` Markos Chandras
(?)
@ 2013-10-07 16:29 ` Ralf Baechle
-1 siblings, 0 replies; 8+ messages in thread
From: Ralf Baechle @ 2013-10-07 16:29 UTC (permalink / raw
To: Markos Chandras; +Cc: linux-mips
On Mon, Oct 07, 2013 at 05:10:19PM +0100, Markos Chandras wrote:
> On 10/07/13 17:08, Ralf Baechle wrote:
> >On Mon, Sep 23, 2013 at 07:40:26PM +0530, Ashok Kumar wrote:
> >>Date: Mon, 23 Sep 2013 19:40:26 +0530
> >>From: Ashok Kumar <ashoks@broadcom.com>
> >>To: linux-mips@linux-mips.org, gerg@uclinux.org
> >>cc: ralf@linux-mips.org, Ashok Kumar <ashoks@broadcom.com>
> >>Subject: [PATCH] MIPS: fix mapstart when using initrd
> >>Content-Type: text/plain
> >>
> >>When initrd is present in the PFN right after the _end, bootmem
> >>bitmap(mapstart) overwrites it. So check for initrd_end in
> >>mapstart calculation.
> >>
> >>Signed-off-by: Ashok Kumar <ashoks@broadcom.com>
> >>---
> >>This is seen after the commit
> >>"mips: fix start of free memory when using initrd"
> >>in git://git.linux-mips.org/pub/scm/ralf/upstream-sfr.git branch
> >>
> >>Tested the image on MIPS platform creating the above
> >>said scenario and initrd was corrupted.
> >
> >And it gloriously breaks the build if CONFIG_BLK_DEV_INITRD is disabled.
> >Now most configurations will fail with something like:
> >
> >[...]
> > LD vmlinux
> >arch/mips/built-in.o: In function `setup_arch':
> >(.init.text+0xff8): undefined reference to `initrd_end'
> >arch/mips/built-in.o: In function `setup_arch':
> >(.init.text+0xffc): undefined reference to `initrd_end'
> >make[2]: *** [vmlinux] Error 1
> >make[1]: *** [sub-make] Error 2
> >make: *** [all] Error 2
> >make: Leaving directory `/home/ralf/src/linux/obj/lasat-build'
> >
> > Ralf
> >
> Hi Ralf,
>
> I just sent a patch for that
>
> http://patchwork.linux-mips.org/patch/6028/
Yes, I noticed that. I folded that into Greg's original patch as well.
And now back to the scheduled development program :)
Btw, brownie points for an #ifdef-less fix ...
Ralf
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] MIPS: fix mapstart when using initrd
2013-09-23 14:10 [PATCH] MIPS: fix mapstart when using initrd Ashok Kumar
2013-10-07 16:08 ` Ralf Baechle
@ 2013-10-14 12:05 ` Jonas Gorski
2013-10-15 10:19 ` Ashok Kumar
[not found] ` <525d1725.85680e0a.0dea.4371SMTPIN_ADDED_BROKEN@mx.google.com>
1 sibling, 2 replies; 8+ messages in thread
From: Jonas Gorski @ 2013-10-14 12:05 UTC (permalink / raw
To: Ashok Kumar; +Cc: MIPS Mailing List, gerg, Ralf Baechle
On Mon, Sep 23, 2013 at 4:10 PM, Ashok Kumar <ashoks@broadcom.com> wrote:
> When initrd is present in the PFN right after the _end, bootmem
> bitmap(mapstart) overwrites it. So check for initrd_end in
> mapstart calculation.
>
> Signed-off-by: Ashok Kumar <ashoks@broadcom.com>
> ---
> This is seen after the commit
> "mips: fix start of free memory when using initrd"
> in git://git.linux-mips.org/pub/scm/ralf/upstream-sfr.git branch
>
> Tested the image on MIPS platform creating the above
> said scenario and initrd was corrupted.
Unfortunately this commit breaks booting ramdisk images on bcm63xx, at
least git bisect claims it to be responsible for:
Closing DMA Channels.
Starting program at 0x80284b60
[ 0.000000] Linux version 3.12.0-rc4+ (jonas@ixxyvirt) (gcc version
4.8.) #254 SMP Mon Oct 14 13:12:35 CEST 2013
[ 0.000000] Detected Broadcom 0x6328 CPU revision b0
[ 0.000000] CPU frequency is 320 MHz
[ 0.000000] 128MB of RAM installed
[ 0.000000] registering 32 GPIOs
[ 0.000000] board_bcm963xx: CFE version: 1.0.37-106.17
[ 0.000000] bootconsole [early0] enabled
[ 0.000000] CPU revision is: 0002a075 (Broadcom BMIPS4350)
[ 0.000000] board_bcm963xx: board name: 96328avng
[ 0.000000] Determined physical RAM map:
[ 0.000000] memory: 08000000 @ 00000000 (usable)
**Exception 8: EPC=00000000, Cause=00000000 (Interrupt)
RA=00000000, VAddr=00000000
0 ($00) = 8016E5F4 AT ($01) = 00000000
v0 ($02) = 00000000 v1 ($03) = 0000000A
a0 ($04) = FFFFFFFF a1 ($05) = 0006FFFF
a2 ($06) = 00000000 a3 ($07) = 803D6730
t0 ($08) = 0000002A t1 ($09) = 00000000
t2 ($10) = 802D5203 t3 ($11) = 8029D2F8
t4 ($12) = 803D6737 t5 ($13) = 802D5203
t6 ($14) = 00000000 t7 ($15) = 8030BD68
s0 ($16) = 8016E5F4 s1 ($17) = 803D6737
s2 ($18) = 802D5203 s3 ($19) = 8029D2F8
s4 ($20) = 8030BD90 s5 ($21) = 8016E5F4
s6 ($22) = 00000001 s7 ($23) = 803D6730
t8 ($24) = 0000000A t9 ($25) = FFFFFFFF
k0 ($26) = 0006FFFF k1 ($27) = 8016EF08
gp ($28) = 803F0000 sp ($29) = 8001DAC0
fp ($30) = 0000001D ra ($31) = 00000000
Probably relevant config parts are:
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE="/home/jonas/openwrt/trunk/build_dir/target-mips_mips32_uClibc-0.9.33.2/root-brcm63xx
/home/jonas/openwrt/trunk/target/linux/generic/image/initramfs-base-files.txt"
CONFIG_INITRAMFS_ROOT_UID=1000
CONFIG_INITRAMFS_ROOT_GID=1000
# CONFIG_RD_GZIP is not set
# CONFIG_RD_BZIP2 is not set
# CONFIG_RD_LZMA is not set
CONFIG_RD_XZ=y
# CONFIG_RD_LZO is not set
# CONFIG_RD_LZ4 is not set
# CONFIG_INITRAMFS_COMPRESSION_NONE is not set
CONFIG_INITRAMFS_COMPRESSION_XZ=y
> arch/mips/kernel/setup.c | 5 +++++
> 1 files changed, 5 insertions(+), 0 deletions(-)
>
> diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c
> index 5342385..dfb8585 100644
> --- a/arch/mips/kernel/setup.c
> +++ b/arch/mips/kernel/setup.c
> @@ -364,6 +364,11 @@ static void __init bootmem_init(void)
> }
>
> /*
> + * mapstart should be after initrd_end
> + */
> + mapstart = max(mapstart, (unsigned long)PFN_UP(__pa(initrd_end)));
I wonder if this still holds if the initrd is compressed like in my
config, but that's just random guessing. I can't test it since I need
a compressed initrd, else the elf gets too big for CFE.
> +
> + /*
> * Initialize the boot-time allocator with low memory only.
> */
> bootmap_size = init_bootmem_node(NODE_DATA(0), mapstart,
Regards
Jonas
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] MIPS: fix mapstart when using initrd
2013-10-14 12:05 ` Jonas Gorski
@ 2013-10-15 10:19 ` Ashok Kumar
[not found] ` <525d1725.85680e0a.0dea.4371SMTPIN_ADDED_BROKEN@mx.google.com>
1 sibling, 0 replies; 8+ messages in thread
From: Ashok Kumar @ 2013-10-15 10:19 UTC (permalink / raw
To: Jonas Gorski; +Cc: MIPS Mailing List, gerg, Ralf Baechle
On Mon, Oct 14, 2013 at 02:05:44PM +0200, Jonas Gorski wrote:
> On Mon, Sep 23, 2013 at 4:10 PM, Ashok Kumar <ashoks@broadcom.com> wrote:
> > When initrd is present in the PFN right after the _end, bootmem
> > bitmap(mapstart) overwrites it. So check for initrd_end in
> > mapstart calculation.
> >
> > Signed-off-by: Ashok Kumar <ashoks@broadcom.com>
> > ---
> > This is seen after the commit
> > "mips: fix start of free memory when using initrd"
> > in git://git.linux-mips.org/pub/scm/ralf/upstream-sfr.git branch
> >
> > Tested the image on MIPS platform creating the above
> > said scenario and initrd was corrupted.
>
> Unfortunately this commit breaks booting ramdisk images on bcm63xx, at
> least git bisect claims it to be responsible for:
>
> Closing DMA Channels.
> Starting program at 0x80284b60
> [ 0.000000] Linux version 3.12.0-rc4+ (jonas@ixxyvirt) (gcc version
> 4.8.) #254 SMP Mon Oct 14 13:12:35 CEST 2013
> [ 0.000000] Detected Broadcom 0x6328 CPU revision b0
> [ 0.000000] CPU frequency is 320 MHz
> [ 0.000000] 128MB of RAM installed
> [ 0.000000] registering 32 GPIOs
> [ 0.000000] board_bcm963xx: CFE version: 1.0.37-106.17
> [ 0.000000] bootconsole [early0] enabled
> [ 0.000000] CPU revision is: 0002a075 (Broadcom BMIPS4350)
> [ 0.000000] board_bcm963xx: board name: 96328avng
> [ 0.000000] Determined physical RAM map:
> [ 0.000000] memory: 08000000 @ 00000000 (usable)
> **Exception 8: EPC=00000000, Cause=00000000 (Interrupt)
> RA=00000000, VAddr=00000000
>
> 0 ($00) = 8016E5F4 AT ($01) = 00000000
> v0 ($02) = 00000000 v1 ($03) = 0000000A
> a0 ($04) = FFFFFFFF a1 ($05) = 0006FFFF
> a2 ($06) = 00000000 a3 ($07) = 803D6730
> t0 ($08) = 0000002A t1 ($09) = 00000000
> t2 ($10) = 802D5203 t3 ($11) = 8029D2F8
> t4 ($12) = 803D6737 t5 ($13) = 802D5203
> t6 ($14) = 00000000 t7 ($15) = 8030BD68
> s0 ($16) = 8016E5F4 s1 ($17) = 803D6737
> s2 ($18) = 802D5203 s3 ($19) = 8029D2F8
> s4 ($20) = 8030BD90 s5 ($21) = 8016E5F4
> s6 ($22) = 00000001 s7 ($23) = 803D6730
> t8 ($24) = 0000000A t9 ($25) = FFFFFFFF
> k0 ($26) = 0006FFFF k1 ($27) = 8016EF08
> gp ($28) = 803F0000 sp ($29) = 8001DAC0
> fp ($30) = 0000001D ra ($31) = 00000000
>
>
> Probably relevant config parts are:
>
> CONFIG_BLK_DEV_INITRD=y
> CONFIG_INITRAMFS_SOURCE="/home/jonas/openwrt/trunk/build_dir/target-mips_mips32_uClibc-0.9.33.2/root-brcm63xx
> /home/jonas/openwrt/trunk/target/linux/generic/image/initramfs-base-files.txt"
> CONFIG_INITRAMFS_ROOT_UID=1000
> CONFIG_INITRAMFS_ROOT_GID=1000
> # CONFIG_RD_GZIP is not set
> # CONFIG_RD_BZIP2 is not set
> # CONFIG_RD_LZMA is not set
> CONFIG_RD_XZ=y
> # CONFIG_RD_LZO is not set
> # CONFIG_RD_LZ4 is not set
> # CONFIG_INITRAMFS_COMPRESSION_NONE is not set
> CONFIG_INITRAMFS_COMPRESSION_XZ=y
>
> > arch/mips/kernel/setup.c | 5 +++++
> > 1 files changed, 5 insertions(+), 0 deletions(-)
> >
> > diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c
> > index 5342385..dfb8585 100644
> > --- a/arch/mips/kernel/setup.c
> > +++ b/arch/mips/kernel/setup.c
> > @@ -364,6 +364,11 @@ static void __init bootmem_init(void)
> > }
> >
> > /*
> > + * mapstart should be after initrd_end
> > + */
> > + mapstart = max(mapstart, (unsigned long)PFN_UP(__pa(initrd_end)));
>
> I wonder if this still holds if the initrd is compressed like in my
> config, but that's just random guessing. I can't test it since I need
> a compressed initrd, else the elf gets too big for CFE.
when initramfs(compressed/uncompressed) is used and initrd is not used,
initrd_end should be zero. In 32-bit kernel __pa(0) becomes 0x80000000
and mapstart points to wrong address. Added check for non zero initrd_end
before finding max.
I have tested the below patch on XLP 32-bit BE/LE, 64-bit BE/LE and
it works fine. could you please test this on your bcm63xx board.
diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c
index 9d5d31d..a842154 100644
--- a/arch/mips/kernel/setup.c
+++ b/arch/mips/kernel/setup.c
@@ -367,7 +367,8 @@ static void __init bootmem_init(void)
/*
* mapstart should be after initrd_end
*/
- mapstart = max(mapstart, (unsigned long)PFN_UP(__pa(initrd_end)));
+ if (initrd_end)
+ mapstart = max(mapstart, (unsigned long)PFN_UP(__pa(initrd_end)));
#endif
- Ashok
>
> > +
> > + /*
> > * Initialize the boot-time allocator with low memory only.
> > */
> > bootmap_size = init_bootmem_node(NODE_DATA(0), mapstart,
>
>
> Regards
> Jonas
>
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH] MIPS: fix mapstart when using initrd
[not found] ` <525d1725.85680e0a.0dea.4371SMTPIN_ADDED_BROKEN@mx.google.com>
@ 2013-10-15 10:57 ` Jonas Gorski
0 siblings, 0 replies; 8+ messages in thread
From: Jonas Gorski @ 2013-10-15 10:57 UTC (permalink / raw
To: Ashok Kumar; +Cc: MIPS Mailing List, gerg, Ralf Baechle
On Tue, Oct 15, 2013 at 12:19 PM, Ashok Kumar <ashoks@broadcom.com> wrote:
> On Mon, Oct 14, 2013 at 02:05:44PM +0200, Jonas Gorski wrote:
>> On Mon, Sep 23, 2013 at 4:10 PM, Ashok Kumar <ashoks@broadcom.com> wrote:
>> > When initrd is present in the PFN right after the _end, bootmem
>> > bitmap(mapstart) overwrites it. So check for initrd_end in
>> > mapstart calculation.
>> >
>> > Signed-off-by: Ashok Kumar <ashoks@broadcom.com>
>> > ---
>> > This is seen after the commit
>> > "mips: fix start of free memory when using initrd"
>> > in git://git.linux-mips.org/pub/scm/ralf/upstream-sfr.git branch
>> >
>> > Tested the image on MIPS platform creating the above
>> > said scenario and initrd was corrupted.
>>
>> Unfortunately this commit breaks booting ramdisk images on bcm63xx, at
>> least git bisect claims it to be responsible for:
>>
>> Closing DMA Channels.
>> Starting program at 0x80284b60
>> [ 0.000000] Linux version 3.12.0-rc4+ (jonas@ixxyvirt) (gcc version
>> 4.8.) #254 SMP Mon Oct 14 13:12:35 CEST 2013
>> [ 0.000000] Detected Broadcom 0x6328 CPU revision b0
>> [ 0.000000] CPU frequency is 320 MHz
>> [ 0.000000] 128MB of RAM installed
>> [ 0.000000] registering 32 GPIOs
>> [ 0.000000] board_bcm963xx: CFE version: 1.0.37-106.17
>> [ 0.000000] bootconsole [early0] enabled
>> [ 0.000000] CPU revision is: 0002a075 (Broadcom BMIPS4350)
>> [ 0.000000] board_bcm963xx: board name: 96328avng
>> [ 0.000000] Determined physical RAM map:
>> [ 0.000000] memory: 08000000 @ 00000000 (usable)
>> **Exception 8: EPC=00000000, Cause=00000000 (Interrupt)
>> RA=00000000, VAddr=00000000
>>
>> 0 ($00) = 8016E5F4 AT ($01) = 00000000
>> v0 ($02) = 00000000 v1 ($03) = 0000000A
>> a0 ($04) = FFFFFFFF a1 ($05) = 0006FFFF
>> a2 ($06) = 00000000 a3 ($07) = 803D6730
>> t0 ($08) = 0000002A t1 ($09) = 00000000
>> t2 ($10) = 802D5203 t3 ($11) = 8029D2F8
>> t4 ($12) = 803D6737 t5 ($13) = 802D5203
>> t6 ($14) = 00000000 t7 ($15) = 8030BD68
>> s0 ($16) = 8016E5F4 s1 ($17) = 803D6737
>> s2 ($18) = 802D5203 s3 ($19) = 8029D2F8
>> s4 ($20) = 8030BD90 s5 ($21) = 8016E5F4
>> s6 ($22) = 00000001 s7 ($23) = 803D6730
>> t8 ($24) = 0000000A t9 ($25) = FFFFFFFF
>> k0 ($26) = 0006FFFF k1 ($27) = 8016EF08
>> gp ($28) = 803F0000 sp ($29) = 8001DAC0
>> fp ($30) = 0000001D ra ($31) = 00000000
>>
>>
>> Probably relevant config parts are:
>>
>> CONFIG_BLK_DEV_INITRD=y
>> CONFIG_INITRAMFS_SOURCE="/home/jonas/openwrt/trunk/build_dir/target-mips_mips32_uClibc-0.9.33.2/root-brcm63xx
>> /home/jonas/openwrt/trunk/target/linux/generic/image/initramfs-base-files.txt"
>> CONFIG_INITRAMFS_ROOT_UID=1000
>> CONFIG_INITRAMFS_ROOT_GID=1000
>> # CONFIG_RD_GZIP is not set
>> # CONFIG_RD_BZIP2 is not set
>> # CONFIG_RD_LZMA is not set
>> CONFIG_RD_XZ=y
>> # CONFIG_RD_LZO is not set
>> # CONFIG_RD_LZ4 is not set
>> # CONFIG_INITRAMFS_COMPRESSION_NONE is not set
>> CONFIG_INITRAMFS_COMPRESSION_XZ=y
>>
>> > arch/mips/kernel/setup.c | 5 +++++
>> > 1 files changed, 5 insertions(+), 0 deletions(-)
>> >
>> > diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c
>> > index 5342385..dfb8585 100644
>> > --- a/arch/mips/kernel/setup.c
>> > +++ b/arch/mips/kernel/setup.c
>> > @@ -364,6 +364,11 @@ static void __init bootmem_init(void)
>> > }
>> >
>> > /*
>> > + * mapstart should be after initrd_end
>> > + */
>> > + mapstart = max(mapstart, (unsigned long)PFN_UP(__pa(initrd_end)));
>>
>> I wonder if this still holds if the initrd is compressed like in my
>> config, but that's just random guessing. I can't test it since I need
>> a compressed initrd, else the elf gets too big for CFE.
>
> when initramfs(compressed/uncompressed) is used and initrd is not used,
> initrd_end should be zero. In 32-bit kernel __pa(0) becomes 0x80000000
> and mapstart points to wrong address. Added check for non zero initrd_end
> before finding max.
>
> I have tested the below patch on XLP 32-bit BE/LE, 64-bit BE/LE and
> it works fine. could you please test this on your bcm63xx board.
>
> diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c
> index 9d5d31d..a842154 100644
> --- a/arch/mips/kernel/setup.c
> +++ b/arch/mips/kernel/setup.c
> @@ -367,7 +367,8 @@ static void __init bootmem_init(void)
> /*
> * mapstart should be after initrd_end
> */
> - mapstart = max(mapstart, (unsigned long)PFN_UP(__pa(initrd_end)));
> + if (initrd_end)
> + mapstart = max(mapstart, (unsigned long)PFN_UP(__pa(initrd_end)));
> #endif
I came to the same conclusion/fix yesterday evening, so I can confirm
this fixes it. I was just a bit inebriated at that time, and I didn't
want to drink and submit ;). So
Tested-by: Jonas Gorski <jogo@openwrt.org>
Thanks,
Jonas
>
> - Ashok
>
>>
>> > +
>> > + /*
>> > * Initialize the boot-time allocator with low memory only.
>> > */
>> > bootmap_size = init_bootmem_node(NODE_DATA(0), mapstart,
>>
>>
>> Regards
>> Jonas
>>
>
>
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2013-10-15 10:57 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-09-23 14:10 [PATCH] MIPS: fix mapstart when using initrd Ashok Kumar
2013-10-07 16:08 ` Ralf Baechle
2013-10-07 16:10 ` Markos Chandras
2013-10-07 16:10 ` Markos Chandras
2013-10-07 16:29 ` Ralf Baechle
2013-10-14 12:05 ` Jonas Gorski
2013-10-15 10:19 ` Ashok Kumar
[not found] ` <525d1725.85680e0a.0dea.4371SMTPIN_ADDED_BROKEN@mx.google.com>
2013-10-15 10:57 ` Jonas Gorski
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.