2020-04-07 09:59:54

by Xu, Yanfei

[permalink] [raw]
Subject: BUG: mips: errors when compiling kernel with a large initramfs

Hi,


It fails to compile mips kernel with large initramfs (at link time).

kernel version: 5.6.0


Steps to reproduce:

1. git clone mainline kernel

2. set ARCH=mips and CROSS_COMPILE=mips-linux-gnu-

3. make defconfig

4.enable initramfs support and set the path about initramfs source file

5.make -j24

[KEY] when your initramfs files is too large, and cause
usr/initramfs_data.cpio.gz

compiled is larger than 225M, you will get the following error. BTW, x86
doesn't

have this issue that I have tested.

------------------------------error
messages-----------------------------------------

  CHK     include/generated/compile.h
  LD      vmlinux.o
  MODPOST vmlinux.o
  MODINFO modules.builtin.modinfo
  GEN     modules.builtin
  LD      .tmp_vmlinux.kallsyms1
kernel/configs.o: In function `ikconfig_cleanup':
/home/wrsadmin/work/linux/kernel/linux-master/kernel/configs.c:72:(.exit.text+0x8):
relocation truncated to fit: R_MIPS_26 against `remove_proc_entry'
fs/binfmt_script.o: In function `exit_script_binfmt':
/home/wrsadmin/work/linux/kernel/linux-master/fs/binfmt_script.c:165:(.exit.text+0x4):
relocation truncated to fit: R_MIPS_26 against `unregister_binfmt'
fs/binfmt_elf.o: In function `exit_elf_binfmt':
/home/wrsadmin/work/linux/kernel/linux-master/fs/binfmt_elf.c:2393:(.exit.text+0x4):
relocation truncated to fit: R_MIPS_26 against `unregister_binfmt'
fs/mbcache.o: In function `mbcache_exit':
/home/wrsadmin/work/linux/kernel/linux-master/fs/mbcache.c:429:(.exit.text+0x4):
relocation truncated to fit: R_MIPS_26 against `kmem_cache_destroy'
fs/nfs_common/grace.o: In function `exit_grace':
/home/wrsadmin/work/linux/kernel/linux-master/fs/nfs_common/grace.c:133:(.exit.text+0x4):
relocation truncated to fit: R_MIPS_26 against `unregister_pernet_subsys'
fs/ext4/super.o: In function `ext4_destroy_lazyinit_thread':
/home/wrsadmin/work/linux/kernel/linux-master/fs/ext4/super.c:3456:(.exit.text+0x24):
relocation truncated to fit: R_MIPS_26 against `kthread_stop'
fs/ext4/super.o: In function `unregister_as_ext2':
/home/wrsadmin/work/linux/kernel/linux-master/fs/ext4/super.c:6126:(.exit.text+0x30):
relocation truncated to fit: R_MIPS_26 against `unregister_filesystem'
fs/ext4/super.o: In function `unregister_as_ext3':
/home/wrsadmin/work/linux/kernel/linux-master/fs/ext4/super.c:6155:(.exit.text+0x3c):
relocation truncated to fit: R_MIPS_26 against `unregister_filesystem'
fs/ext4/super.o: In function `ext4_exit_fs':
/home/wrsadmin/work/linux/kernel/linux-master/fs/ext4/super.c:6261:(.exit.text+0x48):
relocation truncated to fit: R_MIPS_26 against `unregister_filesystem'
fs/ext4/super.o: In function `destroy_inodecache':
/home/wrsadmin/work/linux/kernel/linux-master/fs/ext4/super.c:1218:(.exit.text+0x50):
relocation truncated to fit: R_MIPS_26 against `rcu_barrier'
/home/wrsadmin/work/linux/kernel/linux-master/fs/ext4/super.c:1219:(.exit.text+0x5c):
additional relocation overflows omitted from the output
Makefile:1086: recipe for target 'vmlinux' failed
make[1]: *** [vmlinux] Error 1
Makefile:1058: recipe for target 'autoksyms_recursive' failed
make: *** [autoksyms_recursive] Error 2


Any comment will be appreciated.

Thanks,

Yanfei


2020-04-07 10:22:49

by YunQiang Su

[permalink] [raw]
Subject: Re: BUG: mips: errors when compiling kernel with a large initramfs

Xu, Yanfei <[email protected]> 于2020年4月7日周二 下午5:58写道:
>
> Hi,
>
>
> It fails to compile mips kernel with large initramfs (at link time).
>
> kernel version: 5.6.0
>
>
> Steps to reproduce:
>
> 1. git clone mainline kernel
>
> 2. set ARCH=mips and CROSS_COMPILE=mips-linux-gnu-
>
> 3. make defconfig
>
> 4.enable initramfs support and set the path about initramfs source file
>
> 5.make -j24
>
> [KEY] when your initramfs files is too large, and cause
> usr/initramfs_data.cpio.gz
>
> compiled is larger than 225M, you will get the following error. BTW, x86
> doesn't

It is due to the JAL insn can only support <256MiB jump

>
> have this issue that I have tested.
>
> ------------------------------error
> messages-----------------------------------------
>
> CHK include/generated/compile.h
> LD vmlinux.o
> MODPOST vmlinux.o
> MODINFO modules.builtin.modinfo
> GEN modules.builtin
> LD .tmp_vmlinux.kallsyms1
> kernel/configs.o: In function `ikconfig_cleanup':
> /home/wrsadmin/work/linux/kernel/linux-master/kernel/configs.c:72:(.exit.text+0x8):
> relocation truncated to fit: R_MIPS_26 against `remove_proc_entry'
> fs/binfmt_script.o: In function `exit_script_binfmt':
> /home/wrsadmin/work/linux/kernel/linux-master/fs/binfmt_script.c:165:(.exit.text+0x4):
> relocation truncated to fit: R_MIPS_26 against `unregister_binfmt'
> fs/binfmt_elf.o: In function `exit_elf_binfmt':
> /home/wrsadmin/work/linux/kernel/linux-master/fs/binfmt_elf.c:2393:(.exit.text+0x4):
> relocation truncated to fit: R_MIPS_26 against `unregister_binfmt'
> fs/mbcache.o: In function `mbcache_exit':
> /home/wrsadmin/work/linux/kernel/linux-master/fs/mbcache.c:429:(.exit.text+0x4):
> relocation truncated to fit: R_MIPS_26 against `kmem_cache_destroy'
> fs/nfs_common/grace.o: In function `exit_grace':
> /home/wrsadmin/work/linux/kernel/linux-master/fs/nfs_common/grace.c:133:(.exit.text+0x4):
> relocation truncated to fit: R_MIPS_26 against `unregister_pernet_subsys'
> fs/ext4/super.o: In function `ext4_destroy_lazyinit_thread':
> /home/wrsadmin/work/linux/kernel/linux-master/fs/ext4/super.c:3456:(.exit.text+0x24):
> relocation truncated to fit: R_MIPS_26 against `kthread_stop'
> fs/ext4/super.o: In function `unregister_as_ext2':
> /home/wrsadmin/work/linux/kernel/linux-master/fs/ext4/super.c:6126:(.exit.text+0x30):
> relocation truncated to fit: R_MIPS_26 against `unregister_filesystem'
> fs/ext4/super.o: In function `unregister_as_ext3':
> /home/wrsadmin/work/linux/kernel/linux-master/fs/ext4/super.c:6155:(.exit.text+0x3c):
> relocation truncated to fit: R_MIPS_26 against `unregister_filesystem'
> fs/ext4/super.o: In function `ext4_exit_fs':
> /home/wrsadmin/work/linux/kernel/linux-master/fs/ext4/super.c:6261:(.exit.text+0x48):
> relocation truncated to fit: R_MIPS_26 against `unregister_filesystem'
> fs/ext4/super.o: In function `destroy_inodecache':
> /home/wrsadmin/work/linux/kernel/linux-master/fs/ext4/super.c:1218:(.exit.text+0x50):
> relocation truncated to fit: R_MIPS_26 against `rcu_barrier'
> /home/wrsadmin/work/linux/kernel/linux-master/fs/ext4/super.c:1219:(.exit.text+0x5c):
> additional relocation overflows omitted from the output
> Makefile:1086: recipe for target 'vmlinux' failed
> make[1]: *** [vmlinux] Error 1
> Makefile:1058: recipe for target 'autoksyms_recursive' failed
> make: *** [autoksyms_recursive] Error 2
>
>
> Any comment will be appreciated.

Maybe, you can have a try add `-mlong-calls' to your CFLAGS.
I am not sure that it can work.
https://gcc.gnu.org/onlinedocs/gcc/MIPS-Options.html

>
> Thanks,
>
> Yanfei
>


--
YunQiang Su

2020-04-07 12:26:32

by Jiaxun Yang

[permalink] [raw]
Subject: Re: BUG: mips: errors when compiling kernel with a large initramfs

On Tue, 7 Apr 2020 17:58:23 +0800
"Xu, Yanfei" <[email protected]> wrote:

> Hi,
>
>
> It fails to compile mips kernel with large initramfs (at link time).
>
> kernel version: 5.6.0
>
>
> Steps to reproduce:
>
> 1. git clone mainline kernel
>
> 2. set ARCH=mips and CROSS_COMPILE=mips-linux-gnu-
>
> 3. make defconfig
>
> 4.enable initramfs support and set the path about initramfs source
> file
>
> 5.make -j24
>
> [KEY] when your initramfs files is too large, and cause
> usr/initramfs_data.cpio.gz
>
> compiled is larger than 225M, you will get the following error. BTW,
> x86 doesn't
>
> have this issue that I have tested.
>
> ------------------------------error
> messages-----------------------------------------
>
>   CHK     include/generated/compile.h
>   LD      vmlinux.o
>   MODPOST vmlinux.o
>   MODINFO modules.builtin.modinfo
>   GEN     modules.builtin
>   LD      .tmp_vmlinux.kallsyms1
> kernel/configs.o: In function `ikconfig_cleanup':
> /home/wrsadmin/work/linux/kernel/linux-master/kernel/configs.c:72:(.exit.text+0x8):
> relocation truncated to fit: R_MIPS_26 against `remove_proc_entry'
> fs/binfmt_script.o: In function `exit_script_binfmt':
> /home/wrsadmin/work/linux/kernel/linux-master/fs/binfmt_script.c:165:(.exit.text+0x4):
> relocation truncated to fit: R_MIPS_26 against `unregister_binfmt'
> fs/binfmt_elf.o: In function `exit_elf_binfmt':
> /home/wrsadmin/work/linux/kernel/linux-master/fs/binfmt_elf.c:2393:(.exit.text+0x4):
> relocation truncated to fit: R_MIPS_26 against `unregister_binfmt'
> fs/mbcache.o: In function `mbcache_exit':
> /home/wrsadmin/work/linux/kernel/linux-master/fs/mbcache.c:429:(.exit.text+0x4):
> relocation truncated to fit: R_MIPS_26 against `kmem_cache_destroy'
> fs/nfs_common/grace.o: In function `exit_grace':
> /home/wrsadmin/work/linux/kernel/linux-master/fs/nfs_common/grace.c:133:(.exit.text+0x4):
> relocation truncated to fit: R_MIPS_26 against
> `unregister_pernet_subsys' fs/ext4/super.o: In function
> `ext4_destroy_lazyinit_thread':
> /home/wrsadmin/work/linux/kernel/linux-master/fs/ext4/super.c:3456:(.exit.text+0x24):
> relocation truncated to fit: R_MIPS_26 against `kthread_stop'
> fs/ext4/super.o: In function `unregister_as_ext2':
> /home/wrsadmin/work/linux/kernel/linux-master/fs/ext4/super.c:6126:(.exit.text+0x30):
> relocation truncated to fit: R_MIPS_26 against
> `unregister_filesystem' fs/ext4/super.o: In function
> `unregister_as_ext3':
> /home/wrsadmin/work/linux/kernel/linux-master/fs/ext4/super.c:6155:(.exit.text+0x3c):
> relocation truncated to fit: R_MIPS_26 against
> `unregister_filesystem' fs/ext4/super.o: In function `ext4_exit_fs':
> /home/wrsadmin/work/linux/kernel/linux-master/fs/ext4/super.c:6261:(.exit.text+0x48):
> relocation truncated to fit: R_MIPS_26 against
> `unregister_filesystem' fs/ext4/super.o: In function
> `destroy_inodecache':
> /home/wrsadmin/work/linux/kernel/linux-master/fs/ext4/super.c:1218:(.exit.text+0x50):
> relocation truncated to fit: R_MIPS_26 against `rcu_barrier'
> /home/wrsadmin/work/linux/kernel/linux-master/fs/ext4/super.c:1219:(.exit.text+0x5c):
> additional relocation overflows omitted from the output
> Makefile:1086: recipe for target 'vmlinux' failed make[1]: ***
> [vmlinux] Error 1 Makefile:1058: recipe for target
> 'autoksyms_recursive' failed make: *** [autoksyms_recursive] Error 2
>
>
> Any comment will be appreciated.

Actually I think that won't work even if you managed to workaround
reloc issue.

MIPS have limited LOW MEM range accessible via KSEG0 (512M, but can be
less if your system place some MMIO register in that range). Kernel
image will be placed here together with built-in initramfs, and a
lot of memory like Page Table can only be allocated from here.

Such a huge initrd will occupy the whole LOW MEM range leaving no space
for others.

It seems like your system is 32bit, we have no solution for that
hardware limitaion. For 64bit system you may try to move your kernel
into XKPHYS instead of KSEG0.

Thanks

--
Jiaxun Yang

>
> Thanks,
>
> Yanfei
>

2020-04-07 12:55:17

by Xu, Yanfei

[permalink] [raw]
Subject: Re: BUG: mips: errors when compiling kernel with a large initramfs


On 4/7/20 6:21 PM, YunQiang Su wrote:
> Xu, Yanfei <[email protected]> 于2020年4月7日周二 下午5:58写道:
>> Hi,
>>
>>
>> It fails to compile mips kernel with large initramfs (at link time).
>>
>> kernel version: 5.6.0
>>
>>
>> Steps to reproduce:
>>
>> 1. git clone mainline kernel
>>
>> 2. set ARCH=mips and CROSS_COMPILE=mips-linux-gnu-
>>
>> 3. make defconfig
>>
>> 4.enable initramfs support and set the path about initramfs source file
>>
>> 5.make -j24
>>
>> [KEY] when your initramfs files is too large, and cause
>> usr/initramfs_data.cpio.gz
>>
>> compiled is larger than 225M, you will get the following error. BTW, x86
>> doesn't
> It is due to the JAL insn can only support <256MiB jump
>
>> have this issue that I have tested.
>>
>> ------------------------------error
>> messages-----------------------------------------
>>
>> CHK include/generated/compile.h
>> LD vmlinux.o
>> MODPOST vmlinux.o
>> MODINFO modules.builtin.modinfo
>> GEN modules.builtin
>> LD .tmp_vmlinux.kallsyms1
>> kernel/configs.o: In function `ikconfig_cleanup':
>> /home/wrsadmin/work/linux/kernel/linux-master/kernel/configs.c:72:(.exit.text+0x8):
>> relocation truncated to fit: R_MIPS_26 against `remove_proc_entry'
>> fs/binfmt_script.o: In function `exit_script_binfmt':
>> /home/wrsadmin/work/linux/kernel/linux-master/fs/binfmt_script.c:165:(.exit.text+0x4):
>> relocation truncated to fit: R_MIPS_26 against `unregister_binfmt'
>> fs/binfmt_elf.o: In function `exit_elf_binfmt':
>> /home/wrsadmin/work/linux/kernel/linux-master/fs/binfmt_elf.c:2393:(.exit.text+0x4):
>> relocation truncated to fit: R_MIPS_26 against `unregister_binfmt'
>> fs/mbcache.o: In function `mbcache_exit':
>> /home/wrsadmin/work/linux/kernel/linux-master/fs/mbcache.c:429:(.exit.text+0x4):
>> relocation truncated to fit: R_MIPS_26 against `kmem_cache_destroy'
>> fs/nfs_common/grace.o: In function `exit_grace':
>> /home/wrsadmin/work/linux/kernel/linux-master/fs/nfs_common/grace.c:133:(.exit.text+0x4):
>> relocation truncated to fit: R_MIPS_26 against `unregister_pernet_subsys'
>> fs/ext4/super.o: In function `ext4_destroy_lazyinit_thread':
>> /home/wrsadmin/work/linux/kernel/linux-master/fs/ext4/super.c:3456:(.exit.text+0x24):
>> relocation truncated to fit: R_MIPS_26 against `kthread_stop'
>> fs/ext4/super.o: In function `unregister_as_ext2':
>> /home/wrsadmin/work/linux/kernel/linux-master/fs/ext4/super.c:6126:(.exit.text+0x30):
>> relocation truncated to fit: R_MIPS_26 against `unregister_filesystem'
>> fs/ext4/super.o: In function `unregister_as_ext3':
>> /home/wrsadmin/work/linux/kernel/linux-master/fs/ext4/super.c:6155:(.exit.text+0x3c):
>> relocation truncated to fit: R_MIPS_26 against `unregister_filesystem'
>> fs/ext4/super.o: In function `ext4_exit_fs':
>> /home/wrsadmin/work/linux/kernel/linux-master/fs/ext4/super.c:6261:(.exit.text+0x48):
>> relocation truncated to fit: R_MIPS_26 against `unregister_filesystem'
>> fs/ext4/super.o: In function `destroy_inodecache':
>> /home/wrsadmin/work/linux/kernel/linux-master/fs/ext4/super.c:1218:(.exit.text+0x50):
>> relocation truncated to fit: R_MIPS_26 against `rcu_barrier'
>> /home/wrsadmin/work/linux/kernel/linux-master/fs/ext4/super.c:1219:(.exit.text+0x5c):
>> additional relocation overflows omitted from the output
>> Makefile:1086: recipe for target 'vmlinux' failed
>> make[1]: *** [vmlinux] Error 1
>> Makefile:1058: recipe for target 'autoksyms_recursive' failed
>> make: *** [autoksyms_recursive] Error 2
>>
>>
>> Any comment will be appreciated.
> Maybe, you can have a try add `-mlong-calls' to your CFLAGS.
> I am not sure that it can work.
> https://gcc.gnu.org/onlinedocs/gcc/MIPS-Options.html

Ha, It does work. Many thanks!

Yanfei

>> Thanks,
>>
>> Yanfei
>>
>

2020-04-07 13:26:26

by Xu, Yanfei

[permalink] [raw]
Subject: Re: BUG: mips: errors when compiling kernel with a large initramfs


On 4/7/20 8:25 PM, Jiaxun Yang wrote:
> On Tue, 7 Apr 2020 17:58:23 +0800
> "Xu, Yanfei" <[email protected]> wrote:
>
>> Hi,
>>
>>
>> It fails to compile mips kernel with large initramfs (at link time).
>>
>> kernel version: 5.6.0
>>
>>
>> Steps to reproduce:
>>
>> 1. git clone mainline kernel
>>
>> 2. set ARCH=mips and CROSS_COMPILE=mips-linux-gnu-
>>
>> 3. make defconfig
>>
>> 4.enable initramfs support and set the path about initramfs source
>> file
>>
>> 5.make -j24
>>
>> [KEY] when your initramfs files is too large, and cause
>> usr/initramfs_data.cpio.gz
>>
>> compiled is larger than 225M, you will get the following error. BTW,
>> x86 doesn't
>>
>> have this issue that I have tested.
>>
>> ------------------------------error
>> messages-----------------------------------------
>>
>>   CHK     include/generated/compile.h
>>   LD      vmlinux.o
>>   MODPOST vmlinux.o
>>   MODINFO modules.builtin.modinfo
>>   GEN     modules.builtin
>>   LD      .tmp_vmlinux.kallsyms1
>> kernel/configs.o: In function `ikconfig_cleanup':
>> /home/wrsadmin/work/linux/kernel/linux-master/kernel/configs.c:72:(.exit.text+0x8):
>> relocation truncated to fit: R_MIPS_26 against `remove_proc_entry'
>> fs/binfmt_script.o: In function `exit_script_binfmt':
>> /home/wrsadmin/work/linux/kernel/linux-master/fs/binfmt_script.c:165:(.exit.text+0x4):
>> relocation truncated to fit: R_MIPS_26 against `unregister_binfmt'
>> fs/binfmt_elf.o: In function `exit_elf_binfmt':
>> /home/wrsadmin/work/linux/kernel/linux-master/fs/binfmt_elf.c:2393:(.exit.text+0x4):
>> relocation truncated to fit: R_MIPS_26 against `unregister_binfmt'
>> fs/mbcache.o: In function `mbcache_exit':
>> /home/wrsadmin/work/linux/kernel/linux-master/fs/mbcache.c:429:(.exit.text+0x4):
>> relocation truncated to fit: R_MIPS_26 against `kmem_cache_destroy'
>> fs/nfs_common/grace.o: In function `exit_grace':
>> /home/wrsadmin/work/linux/kernel/linux-master/fs/nfs_common/grace.c:133:(.exit.text+0x4):
>> relocation truncated to fit: R_MIPS_26 against
>> `unregister_pernet_subsys' fs/ext4/super.o: In function
>> `ext4_destroy_lazyinit_thread':
>> /home/wrsadmin/work/linux/kernel/linux-master/fs/ext4/super.c:3456:(.exit.text+0x24):
>> relocation truncated to fit: R_MIPS_26 against `kthread_stop'
>> fs/ext4/super.o: In function `unregister_as_ext2':
>> /home/wrsadmin/work/linux/kernel/linux-master/fs/ext4/super.c:6126:(.exit.text+0x30):
>> relocation truncated to fit: R_MIPS_26 against
>> `unregister_filesystem' fs/ext4/super.o: In function
>> `unregister_as_ext3':
>> /home/wrsadmin/work/linux/kernel/linux-master/fs/ext4/super.c:6155:(.exit.text+0x3c):
>> relocation truncated to fit: R_MIPS_26 against
>> `unregister_filesystem' fs/ext4/super.o: In function `ext4_exit_fs':
>> /home/wrsadmin/work/linux/kernel/linux-master/fs/ext4/super.c:6261:(.exit.text+0x48):
>> relocation truncated to fit: R_MIPS_26 against
>> `unregister_filesystem' fs/ext4/super.o: In function
>> `destroy_inodecache':
>> /home/wrsadmin/work/linux/kernel/linux-master/fs/ext4/super.c:1218:(.exit.text+0x50):
>> relocation truncated to fit: R_MIPS_26 against `rcu_barrier'
>> /home/wrsadmin/work/linux/kernel/linux-master/fs/ext4/super.c:1219:(.exit.text+0x5c):
>> additional relocation overflows omitted from the output
>> Makefile:1086: recipe for target 'vmlinux' failed make[1]: ***
>> [vmlinux] Error 1 Makefile:1058: recipe for target
>> 'autoksyms_recursive' failed make: *** [autoksyms_recursive] Error 2
>>
>>
>> Any comment will be appreciated.
> Actually I think that won't work even if you managed to workaround
> reloc issue.
>
> MIPS have limited LOW MEM range accessible via KSEG0 (512M, but can be
> less if your system place some MMIO register in that range). Kernel
> image will be placed here together with built-in initramfs, and a
> lot of memory like Page Table can only be allocated from here.
>
> Such a huge initrd will occupy the whole LOW MEM range leaving no space
> for others.

As you said, it is really a problem about a huge initramfs. I'll pay
attention

about this point.

> It seems like your system is 32bit, we have no solution for that
> hardware limitaion. For 64bit system you may try to move your kernel
> into XKPHYS instead of KSEG0.

Yes, it is a 32bit system. And thanks for your workaround about 64bit.

: )

Thanks,

Yanfei

>
> Thanks
>
> --
> Jiaxun Yang
>
>> Thanks,
>>
>> Yanfei
>>
>