* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-kernel Cc: Florian Fainelli, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, open list:ALPHA PORT, open list:SYNOPSYS ARC ARCHITECTURE, moderated list:ARM PORT, open list:C6X ARCHITECTURE, moderated list:H8/300 ARCHITECTURE, open list:QUALCOMM HEXAGON ARCHITECTURE, open list:IA64 Itanium PLATFORM, open list:M68 Hi all, While investigating why ARM64 required a ton of objects to be rebuilt when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was because we define __early_init_dt_declare_initrd() differently and we do that in arch/arm64/include/asm/memory.h which gets included by a fair amount of other header files, and translation units as well. Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build systems that generate two kernels: one with the initramfs and one without. buildroot is one of these build systems, OpenWrt is also another one that does this. This patch series proposes adding an empty initrd.h to satisfy the need for drivers/of/fdt.c to unconditionally include that file, and moves the custom __early_init_dt_declare_initrd() definition away from asm/memory.h This cuts the number of objects rebuilds from 1920 down to 26, so a factor 73 approximately. Apologies for the long CC list, please let me know how you would go about merging that and if another approach would be preferable, e.g: introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or something like that. Changes in v2: - put an /* empty */ comment in the asm-generic/initrd.h file - trim down the CC list to maximize the chances of people receiving this Florian Fainelli (2): arch: Add asm-generic/initrd.h and make use of it for most architectures arm64: Create asm/initrd.h arch/alpha/include/asm/Kbuild | 1 + arch/arc/include/asm/Kbuild | 1 + arch/arm/include/asm/Kbuild | 1 + arch/arm64/include/asm/initrd.h | 13 +++++++++++++ arch/arm64/include/asm/memory.h | 8 -------- arch/c6x/include/asm/Kbuild | 1 + arch/h8300/include/asm/Kbuild | 1 + arch/hexagon/include/asm/Kbuild | 1 + arch/ia64/include/asm/Kbuild | 1 + arch/m68k/include/asm/Kbuild | 1 + arch/microblaze/include/asm/Kbuild | 1 + arch/mips/include/asm/Kbuild | 1 + arch/nds32/include/asm/Kbuild | 1 + arch/nios2/include/asm/Kbuild | 1 + arch/openrisc/include/asm/Kbuild | 1 + arch/parisc/include/asm/Kbuild | 1 + arch/powerpc/include/asm/Kbuild | 1 + arch/riscv/include/asm/Kbuild | 1 + arch/s390/include/asm/Kbuild | 1 + arch/sh/include/asm/Kbuild | 1 + arch/sparc/include/asm/Kbuild | 1 + arch/um/include/asm/Kbuild | 1 + arch/unicore32/include/asm/Kbuild | 1 + arch/x86/include/asm/Kbuild | 1 + arch/xtensa/include/asm/Kbuild | 1 + drivers/of/fdt.c | 1 + include/asm-generic/initrd.h | 1 + 27 files changed, 38 insertions(+), 8 deletions(-) create mode 100644 arch/arm64/include/asm/initrd.h create mode 100644 include/asm-generic/initrd.h -- 2.17.1 ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-kernel Cc: Florian Fainelli, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, open list:ALPHA PORT, open list:SYNOPSYS ARC ARCHITECTURE, moderated list:ARM PORT, open list:C6X ARCHITECTURE, moderated list:H8/300, ARCHITECTURE, , open list:QUALCOMM HEXAGON ARCHITECTURE, open list:IA64 Itanium PLATFORM, open list:M68K ARCHITECTURE, open list:MIPS, moderated list:NIOS2 ARCHITECTURE, open list:OPENRISC ARCHITECTURE, open list:PARISC ARCHITECTURE, open list:LINUX FOR POWERPC 32-BIT AND 64-BIT, , open list:RISC-V ARCHITECTURE, open list:S390, open list:SUPERH, open list:SPARC + UltraSPARC, , open list:USER-MODE LINUX UML, open list:TENSILICA XTENSA PORT xtensa, open list:OPEN FIRMWARE AND FLATTENED, DEVICE, , open list:GENERIC INCLUDE/ASM HEADER FILES Hi all, While investigating why ARM64 required a ton of objects to be rebuilt when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was because we define __early_init_dt_declare_initrd() differently and we do that in arch/arm64/include/asm/memory.h which gets included by a fair amount of other header files, and translation units as well. Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build systems that generate two kernels: one with the initramfs and one without. buildroot is one of these build systems, OpenWrt is also another one that does this. This patch series proposes adding an empty initrd.h to satisfy the need for drivers/of/fdt.c to unconditionally include that file, and moves the custom __early_init_dt_declare_initrd() definition away from asm/memory.h This cuts the number of objects rebuilds from 1920 down to 26, so a factor 73 approximately. Apologies for the long CC list, please let me know how you would go about merging that and if another approach would be preferable, e.g: introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or something like that. Changes in v2: - put an /* empty */ comment in the asm-generic/initrd.h file - trim down the CC list to maximize the chances of people receiving this Florian Fainelli (2): arch: Add asm-generic/initrd.h and make use of it for most architectures arm64: Create asm/initrd.h arch/alpha/include/asm/Kbuild | 1 + arch/arc/include/asm/Kbuild | 1 + arch/arm/include/asm/Kbuild | 1 + arch/arm64/include/asm/initrd.h | 13 +++++++++++++ arch/arm64/include/asm/memory.h | 8 -------- arch/c6x/include/asm/Kbuild | 1 + arch/h8300/include/asm/Kbuild | 1 + arch/hexagon/include/asm/Kbuild | 1 + arch/ia64/include/asm/Kbuild | 1 + arch/m68k/include/asm/Kbuild | 1 + arch/microblaze/include/asm/Kbuild | 1 + arch/mips/include/asm/Kbuild | 1 + arch/nds32/include/asm/Kbuild | 1 + arch/nios2/include/asm/Kbuild | 1 + arch/openrisc/include/asm/Kbuild | 1 + arch/parisc/include/asm/Kbuild | 1 + arch/powerpc/include/asm/Kbuild | 1 + arch/riscv/include/asm/Kbuild | 1 + arch/s390/include/asm/Kbuild | 1 + arch/sh/include/asm/Kbuild | 1 + arch/sparc/include/asm/Kbuild | 1 + arch/um/include/asm/Kbuild | 1 + arch/unicore32/include/asm/Kbuild | 1 + arch/x86/include/asm/Kbuild | 1 + arch/xtensa/include/asm/Kbuild | 1 + drivers/of/fdt.c | 1 + include/asm-generic/initrd.h | 1 + 27 files changed, 38 insertions(+), 8 deletions(-) create mode 100644 arch/arm64/include/asm/initrd.h create mode 100644 include/asm-generic/initrd.h -- 2.17.1 ^ permalink raw reply [flat|nested] 168+ messages in thread
* [OpenRISC] [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: openrisc Hi all, While investigating why ARM64 required a ton of objects to be rebuilt when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was because we define __early_init_dt_declare_initrd() differently and we do that in arch/arm64/include/asm/memory.h which gets included by a fair amount of other header files, and translation units as well. Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build systems that generate two kernels: one with the initramfs and one without. buildroot is one of these build systems, OpenWrt is also another one that does this. This patch series proposes adding an empty initrd.h to satisfy the need for drivers/of/fdt.c to unconditionally include that file, and moves the custom __early_init_dt_declare_initrd() definition away from asm/memory.h This cuts the number of objects rebuilds from 1920 down to 26, so a factor 73 approximately. Apologies for the long CC list, please let me know how you would go about merging that and if another approach would be preferable, e.g: introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or something like that. Changes in v2: - put an /* empty */ comment in the asm-generic/initrd.h file - trim down the CC list to maximize the chances of people receiving this Florian Fainelli (2): arch: Add asm-generic/initrd.h and make use of it for most architectures arm64: Create asm/initrd.h arch/alpha/include/asm/Kbuild | 1 + arch/arc/include/asm/Kbuild | 1 + arch/arm/include/asm/Kbuild | 1 + arch/arm64/include/asm/initrd.h | 13 +++++++++++++ arch/arm64/include/asm/memory.h | 8 -------- arch/c6x/include/asm/Kbuild | 1 + arch/h8300/include/asm/Kbuild | 1 + arch/hexagon/include/asm/Kbuild | 1 + arch/ia64/include/asm/Kbuild | 1 + arch/m68k/include/asm/Kbuild | 1 + arch/microblaze/include/asm/Kbuild | 1 + arch/mips/include/asm/Kbuild | 1 + arch/nds32/include/asm/Kbuild | 1 + arch/nios2/include/asm/Kbuild | 1 + arch/openrisc/include/asm/Kbuild | 1 + arch/parisc/include/asm/Kbuild | 1 + arch/powerpc/include/asm/Kbuild | 1 + arch/riscv/include/asm/Kbuild | 1 + arch/s390/include/asm/Kbuild | 1 + arch/sh/include/asm/Kbuild | 1 + arch/sparc/include/asm/Kbuild | 1 + arch/um/include/asm/Kbuild | 1 + arch/unicore32/include/asm/Kbuild | 1 + arch/x86/include/asm/Kbuild | 1 + arch/xtensa/include/asm/Kbuild | 1 + drivers/of/fdt.c | 1 + include/asm-generic/initrd.h | 1 + 27 files changed, 38 insertions(+), 8 deletions(-) create mode 100644 arch/arm64/include/asm/initrd.h create mode 100644 include/asm-generic/initrd.h -- 2.17.1 ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-arm-kernel Hi all, While investigating why ARM64 required a ton of objects to be rebuilt when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was because we define __early_init_dt_declare_initrd() differently and we do that in arch/arm64/include/asm/memory.h which gets included by a fair amount of other header files, and translation units as well. Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build systems that generate two kernels: one with the initramfs and one without. buildroot is one of these build systems, OpenWrt is also another one that does this. This patch series proposes adding an empty initrd.h to satisfy the need for drivers/of/fdt.c to unconditionally include that file, and moves the custom __early_init_dt_declare_initrd() definition away from asm/memory.h This cuts the number of objects rebuilds from 1920 down to 26, so a factor 73 approximately. Apologies for the long CC list, please let me know how you would go about merging that and if another approach would be preferable, e.g: introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or something like that. Changes in v2: - put an /* empty */ comment in the asm-generic/initrd.h file - trim down the CC list to maximize the chances of people receiving this Florian Fainelli (2): arch: Add asm-generic/initrd.h and make use of it for most architectures arm64: Create asm/initrd.h arch/alpha/include/asm/Kbuild | 1 + arch/arc/include/asm/Kbuild | 1 + arch/arm/include/asm/Kbuild | 1 + arch/arm64/include/asm/initrd.h | 13 +++++++++++++ arch/arm64/include/asm/memory.h | 8 -------- arch/c6x/include/asm/Kbuild | 1 + arch/h8300/include/asm/Kbuild | 1 + arch/hexagon/include/asm/Kbuild | 1 + arch/ia64/include/asm/Kbuild | 1 + arch/m68k/include/asm/Kbuild | 1 + arch/microblaze/include/asm/Kbuild | 1 + arch/mips/include/asm/Kbuild | 1 + arch/nds32/include/asm/Kbuild | 1 + arch/nios2/include/asm/Kbuild | 1 + arch/openrisc/include/asm/Kbuild | 1 + arch/parisc/include/asm/Kbuild | 1 + arch/powerpc/include/asm/Kbuild | 1 + arch/riscv/include/asm/Kbuild | 1 + arch/s390/include/asm/Kbuild | 1 + arch/sh/include/asm/Kbuild | 1 + arch/sparc/include/asm/Kbuild | 1 + arch/um/include/asm/Kbuild | 1 + arch/unicore32/include/asm/Kbuild | 1 + arch/x86/include/asm/Kbuild | 1 + arch/xtensa/include/asm/Kbuild | 1 + drivers/of/fdt.c | 1 + include/asm-generic/initrd.h | 1 + 27 files changed, 38 insertions(+), 8 deletions(-) create mode 100644 arch/arm64/include/asm/initrd.h create mode 100644 include/asm-generic/initrd.h -- 2.17.1 ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-snps-arc Hi all, While investigating why ARM64 required a ton of objects to be rebuilt when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was because we define __early_init_dt_declare_initrd() differently and we do that in arch/arm64/include/asm/memory.h which gets included by a fair amount of other header files, and translation units as well. Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build systems that generate two kernels: one with the initramfs and one without. buildroot is one of these build systems, OpenWrt is also another one that does this. This patch series proposes adding an empty initrd.h to satisfy the need for drivers/of/fdt.c to unconditionally include that file, and moves the custom __early_init_dt_declare_initrd() definition away from asm/memory.h This cuts the number of objects rebuilds from 1920 down to 26, so a factor 73 approximately. Apologies for the long CC list, please let me know how you would go about merging that and if another approach would be preferable, e.g: introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or something like that. Changes in v2: - put an /* empty */ comment in the asm-generic/initrd.h file - trim down the CC list to maximize the chances of people receiving this Florian Fainelli (2): arch: Add asm-generic/initrd.h and make use of it for most architectures arm64: Create asm/initrd.h arch/alpha/include/asm/Kbuild | 1 + arch/arc/include/asm/Kbuild | 1 + arch/arm/include/asm/Kbuild | 1 + arch/arm64/include/asm/initrd.h | 13 +++++++++++++ arch/arm64/include/asm/memory.h | 8 -------- arch/c6x/include/asm/Kbuild | 1 + arch/h8300/include/asm/Kbuild | 1 + arch/hexagon/include/asm/Kbuild | 1 + arch/ia64/include/asm/Kbuild | 1 + arch/m68k/include/asm/Kbuild | 1 + arch/microblaze/include/asm/Kbuild | 1 + arch/mips/include/asm/Kbuild | 1 + arch/nds32/include/asm/Kbuild | 1 + arch/nios2/include/asm/Kbuild | 1 + arch/openrisc/include/asm/Kbuild | 1 + arch/parisc/include/asm/Kbuild | 1 + arch/powerpc/include/asm/Kbuild | 1 + arch/riscv/include/asm/Kbuild | 1 + arch/s390/include/asm/Kbuild | 1 + arch/sh/include/asm/Kbuild | 1 + arch/sparc/include/asm/Kbuild | 1 + arch/um/include/asm/Kbuild | 1 + arch/unicore32/include/asm/Kbuild | 1 + arch/x86/include/asm/Kbuild | 1 + arch/xtensa/include/asm/Kbuild | 1 + drivers/of/fdt.c | 1 + include/asm-generic/initrd.h | 1 + 27 files changed, 38 insertions(+), 8 deletions(-) create mode 100644 arch/arm64/include/asm/initrd.h create mode 100644 include/asm-generic/initrd.h -- 2.17.1 ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-kernel Cc: open list:MIPS, open list:IA64 Itanium PLATFORM, open list:SUPERH, Catalin Marinas, Will Deacon, open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE, open list:SPARC + UltraSPARC sparc/sparc64, open list:RISC-V ARCHITECTURE, open list:GENERIC INCLUDE/ASM HEADER FILES, open list:S390, Florian Fainelli, open list:C6X ARCHITECTURE, open list:QUALCOMM HEXAGON ARCHITECTURE, open list:SYNOPSYS ARC ARCHITECTURE, moderated list:H8/300 ARCHITECTURE, open list:TENSILICA XTENSA PORT xtensa, Arnd Bergmann, Marc Zyngier, open list:USER-MODE LINUX UML, open list:M68K ARCHITECTURE, open list:OPENRISC ARCHITECTURE, moderated list:ARM PORT, open list:PARISC ARCHITECTURE, Greg Kroah-Hartman, open list:ALPHA PORT, Olof Johansson, moderated list:NIOS2 ARCHITECTURE, open list:LINUX FOR POWERPC 32-BIT AND 64-BIT Hi all, While investigating why ARM64 required a ton of objects to be rebuilt when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was because we define __early_init_dt_declare_initrd() differently and we do that in arch/arm64/include/asm/memory.h which gets included by a fair amount of other header files, and translation units as well. Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build systems that generate two kernels: one with the initramfs and one without. buildroot is one of these build systems, OpenWrt is also another one that does this. This patch series proposes adding an empty initrd.h to satisfy the need for drivers/of/fdt.c to unconditionally include that file, and moves the custom __early_init_dt_declare_initrd() definition away from asm/memory.h This cuts the number of objects rebuilds from 1920 down to 26, so a factor 73 approximately. Apologies for the long CC list, please let me know how you would go about merging that and if another approach would be preferable, e.g: introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or something like that. Changes in v2: - put an /* empty */ comment in the asm-generic/initrd.h file - trim down the CC list to maximize the chances of people receiving this Florian Fainelli (2): arch: Add asm-generic/initrd.h and make use of it for most architectures arm64: Create asm/initrd.h arch/alpha/include/asm/Kbuild | 1 + arch/arc/include/asm/Kbuild | 1 + arch/arm/include/asm/Kbuild | 1 + arch/arm64/include/asm/initrd.h | 13 +++++++++++++ arch/arm64/include/asm/memory.h | 8 -------- arch/c6x/include/asm/Kbuild | 1 + arch/h8300/include/asm/Kbuild | 1 + arch/hexagon/include/asm/Kbuild | 1 + arch/ia64/include/asm/Kbuild | 1 + arch/m68k/include/asm/Kbuild | 1 + arch/microblaze/include/asm/Kbuild | 1 + arch/mips/include/asm/Kbuild | 1 + arch/nds32/include/asm/Kbuild | 1 + arch/nios2/include/asm/Kbuild | 1 + arch/openrisc/include/asm/Kbuild | 1 + arch/parisc/include/asm/Kbuild | 1 + arch/powerpc/include/asm/Kbuild | 1 + arch/riscv/include/asm/Kbuild | 1 + arch/s390/include/asm/Kbuild | 1 + arch/sh/include/asm/Kbuild | 1 + arch/sparc/include/asm/Kbuild | 1 + arch/um/include/asm/Kbuild | 1 + arch/unicore32/include/asm/Kbuild | 1 + arch/x86/include/asm/Kbuild | 1 + arch/xtensa/include/asm/Kbuild | 1 + drivers/of/fdt.c | 1 + include/asm-generic/initrd.h | 1 + 27 files changed, 38 insertions(+), 8 deletions(-) create mode 100644 arch/arm64/include/asm/initrd.h create mode 100644 include/asm-generic/initrd.h -- 2.17.1 ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-kernel Cc: open list:MIPS, open list:IA64 Itanium PLATFORM, open list:SUPERH, Catalin Marinas, Will Deacon, open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE, open list:SPARC + UltraSPARC sparc/sparc64, open list:RISC-V ARCHITECTURE, open list:GENERIC INCLUDE/ASM HEADER FILES, open list:S390, Florian Fainelli, open list:C6X ARCHITECTURE, open list:QUALCOMM HEXAGON ARCHITECTURE, open list:SYNOPSYS ARC ARCHITECTURE, moderated list:H8/300 ARCHITECTURE, open list:TENSILICA XTENSA PORT xtensa, Arnd Bergmann, Marc Zyngier, open list:USER-MODE LINUX UML, open list:M68K ARCHITECTURE, open list:OPENRISC ARCHITECTURE, moderated list:ARM PORT, open list:PARISC ARCHITECTURE, Greg Kroah-Hartman, open list:ALPHA PORT, Olof Johansson, moderated list:NIOS2 ARCHITECTURE, open list:LINUX FOR POWERPC 32-BIT AND 64-BIT Hi all, While investigating why ARM64 required a ton of objects to be rebuilt when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was because we define __early_init_dt_declare_initrd() differently and we do that in arch/arm64/include/asm/memory.h which gets included by a fair amount of other header files, and translation units as well. Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build systems that generate two kernels: one with the initramfs and one without. buildroot is one of these build systems, OpenWrt is also another one that does this. This patch series proposes adding an empty initrd.h to satisfy the need for drivers/of/fdt.c to unconditionally include that file, and moves the custom __early_init_dt_declare_initrd() definition away from asm/memory.h This cuts the number of objects rebuilds from 1920 down to 26, so a factor 73 approximately. Apologies for the long CC list, please let me know how you would go about merging that and if another approach would be preferable, e.g: introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or something like that. Changes in v2: - put an /* empty */ comment in the asm-generic/initrd.h file - trim down the CC list to maximize the chances of people receiving this Florian Fainelli (2): arch: Add asm-generic/initrd.h and make use of it for most architectures arm64: Create asm/initrd.h arch/alpha/include/asm/Kbuild | 1 + arch/arc/include/asm/Kbuild | 1 + arch/arm/include/asm/Kbuild | 1 + arch/arm64/include/asm/initrd.h | 13 +++++++++++++ arch/arm64/include/asm/memory.h | 8 -------- arch/c6x/include/asm/Kbuild | 1 + arch/h8300/include/asm/Kbuild | 1 + arch/hexagon/include/asm/Kbuild | 1 + arch/ia64/include/asm/Kbuild | 1 + arch/m68k/include/asm/Kbuild | 1 + arch/microblaze/include/asm/Kbuild | 1 + arch/mips/include/asm/Kbuild | 1 + arch/nds32/include/asm/Kbuild | 1 + arch/nios2/include/asm/Kbuild | 1 + arch/openrisc/include/asm/Kbuild | 1 + arch/parisc/include/asm/Kbuild | 1 + arch/powerpc/include/asm/Kbuild | 1 + arch/riscv/include/asm/Kbuild | 1 + arch/s390/include/asm/Kbuild | 1 + arch/sh/include/asm/Kbuild | 1 + arch/sparc/include/asm/Kbuild | 1 + arch/um/include/asm/Kbuild | 1 + arch/unicore32/include/asm/Kbuild | 1 + arch/x86/include/asm/Kbuild | 1 + arch/xtensa/include/asm/Kbuild | 1 + drivers/of/fdt.c | 1 + include/asm-generic/initrd.h | 1 + 27 files changed, 38 insertions(+), 8 deletions(-) create mode 100644 arch/arm64/include/asm/initrd.h create mode 100644 include/asm-generic/initrd.h -- 2.17.1 _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-riscv Hi all, While investigating why ARM64 required a ton of objects to be rebuilt when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was because we define __early_init_dt_declare_initrd() differently and we do that in arch/arm64/include/asm/memory.h which gets included by a fair amount of other header files, and translation units as well. Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build systems that generate two kernels: one with the initramfs and one without. buildroot is one of these build systems, OpenWrt is also another one that does this. This patch series proposes adding an empty initrd.h to satisfy the need for drivers/of/fdt.c to unconditionally include that file, and moves the custom __early_init_dt_declare_initrd() definition away from asm/memory.h This cuts the number of objects rebuilds from 1920 down to 26, so a factor 73 approximately. Apologies for the long CC list, please let me know how you would go about merging that and if another approach would be preferable, e.g: introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or something like that. Changes in v2: - put an /* empty */ comment in the asm-generic/initrd.h file - trim down the CC list to maximize the chances of people receiving this Florian Fainelli (2): arch: Add asm-generic/initrd.h and make use of it for most architectures arm64: Create asm/initrd.h arch/alpha/include/asm/Kbuild | 1 + arch/arc/include/asm/Kbuild | 1 + arch/arm/include/asm/Kbuild | 1 + arch/arm64/include/asm/initrd.h | 13 +++++++++++++ arch/arm64/include/asm/memory.h | 8 -------- arch/c6x/include/asm/Kbuild | 1 + arch/h8300/include/asm/Kbuild | 1 + arch/hexagon/include/asm/Kbuild | 1 + arch/ia64/include/asm/Kbuild | 1 + arch/m68k/include/asm/Kbuild | 1 + arch/microblaze/include/asm/Kbuild | 1 + arch/mips/include/asm/Kbuild | 1 + arch/nds32/include/asm/Kbuild | 1 + arch/nios2/include/asm/Kbuild | 1 + arch/openrisc/include/asm/Kbuild | 1 + arch/parisc/include/asm/Kbuild | 1 + arch/powerpc/include/asm/Kbuild | 1 + arch/riscv/include/asm/Kbuild | 1 + arch/s390/include/asm/Kbuild | 1 + arch/sh/include/asm/Kbuild | 1 + arch/sparc/include/asm/Kbuild | 1 + arch/um/include/asm/Kbuild | 1 + arch/unicore32/include/asm/Kbuild | 1 + arch/x86/include/asm/Kbuild | 1 + arch/xtensa/include/asm/Kbuild | 1 + drivers/of/fdt.c | 1 + include/asm-generic/initrd.h | 1 + 27 files changed, 38 insertions(+), 8 deletions(-) create mode 100644 arch/arm64/include/asm/initrd.h create mode 100644 include/asm-generic/initrd.h -- 2.17.1 ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-kernel Cc: Florian Fainelli, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, open list:ALPHA PORT, open list:SYNOPSYS ARC ARCHITECTURE, moderated list:ARM PORT, open list:C6X ARCHITECTURE, moderated list:H8/300 ARCHITECTURE, open list:QUALCOMM HEXAGON ARCHITECTURE, open list:IA64 Itanium PLATFORM, open list:M68 Hi all, While investigating why ARM64 required a ton of objects to be rebuilt when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was because we define __early_init_dt_declare_initrd() differently and we do that in arch/arm64/include/asm/memory.h which gets included by a fair amount of other header files, and translation units as well. Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build systems that generate two kernels: one with the initramfs and one without. buildroot is one of these build systems, OpenWrt is also another one that does this. This patch series proposes adding an empty initrd.h to satisfy the need for drivers/of/fdt.c to unconditionally include that file, and moves the custom __early_init_dt_declare_initrd() definition away from asm/memory.h This cuts the number of objects rebuilds from 1920 down to 26, so a factor 73 approximately. Apologies for the long CC list, please let me know how you would go about merging that and if another approach would be preferable, e.g: introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or something like that. Changes in v2: - put an /* empty */ comment in the asm-generic/initrd.h file - trim down the CC list to maximize the chances of people receiving this Florian Fainelli (2): arch: Add asm-generic/initrd.h and make use of it for most architectures arm64: Create asm/initrd.h arch/alpha/include/asm/Kbuild | 1 + arch/arc/include/asm/Kbuild | 1 + arch/arm/include/asm/Kbuild | 1 + arch/arm64/include/asm/initrd.h | 13 +++++++++++++ arch/arm64/include/asm/memory.h | 8 -------- arch/c6x/include/asm/Kbuild | 1 + arch/h8300/include/asm/Kbuild | 1 + arch/hexagon/include/asm/Kbuild | 1 + arch/ia64/include/asm/Kbuild | 1 + arch/m68k/include/asm/Kbuild | 1 + arch/microblaze/include/asm/Kbuild | 1 + arch/mips/include/asm/Kbuild | 1 + arch/nds32/include/asm/Kbuild | 1 + arch/nios2/include/asm/Kbuild | 1 + arch/openrisc/include/asm/Kbuild | 1 + arch/parisc/include/asm/Kbuild | 1 + arch/powerpc/include/asm/Kbuild | 1 + arch/riscv/include/asm/Kbuild | 1 + arch/s390/include/asm/Kbuild | 1 + arch/sh/include/asm/Kbuild | 1 + arch/sparc/include/asm/Kbuild | 1 + arch/um/include/asm/Kbuild | 1 + arch/unicore32/include/asm/Kbuild | 1 + arch/x86/include/asm/Kbuild | 1 + arch/xtensa/include/asm/Kbuild | 1 + drivers/of/fdt.c | 1 + include/asm-generic/initrd.h | 1 + 27 files changed, 38 insertions(+), 8 deletions(-) create mode 100644 arch/arm64/include/asm/initrd.h create mode 100644 include/asm-generic/initrd.h -- 2.17.1 ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-kernel Cc: Florian Fainelli, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, open list:ALPHA PORT, open list:SYNOPSYS ARC ARCHITECTURE, moderated list:ARM PORT, open list:C6X ARCHITECTURE, moderated list:H8/300 ARCHITECTURE, open list:QUALCOMM HEXAGON ARCHITECTURE, open list:IA64 Itanium PLATFORM, open list:M68K ARCHITECTURE, open list:MIPS, moderated list:NIOS2 ARCHITECTURE, open list:OPENRISC ARCHITECTURE, open list:PARISC ARCHITECTURE, open list:LINUX FOR POWERPC 32-BIT AND 64-BIT, open list:RISC-V ARCHITECTURE, open list:S390, open list:SUPERH, open list:SPARC + UltraSPARC sparc/sparc64, open list:USER-MODE LINUX UML, open list:TENSILICA XTENSA PORT xtensa, open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE, open list:GENERIC INCLUDE/ASM HEADER FILES Hi all, While investigating why ARM64 required a ton of objects to be rebuilt when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was because we define __early_init_dt_declare_initrd() differently and we do that in arch/arm64/include/asm/memory.h which gets included by a fair amount of other header files, and translation units as well. Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build systems that generate two kernels: one with the initramfs and one without. buildroot is one of these build systems, OpenWrt is also another one that does this. This patch series proposes adding an empty initrd.h to satisfy the need for drivers/of/fdt.c to unconditionally include that file, and moves the custom __early_init_dt_declare_initrd() definition away from asm/memory.h This cuts the number of objects rebuilds from 1920 down to 26, so a factor 73 approximately. Apologies for the long CC list, please let me know how you would go about merging that and if another approach would be preferable, e.g: introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or something like that. Changes in v2: - put an /* empty */ comment in the asm-generic/initrd.h file - trim down the CC list to maximize the chances of people receiving this Florian Fainelli (2): arch: Add asm-generic/initrd.h and make use of it for most architectures arm64: Create asm/initrd.h arch/alpha/include/asm/Kbuild | 1 + arch/arc/include/asm/Kbuild | 1 + arch/arm/include/asm/Kbuild | 1 + arch/arm64/include/asm/initrd.h | 13 +++++++++++++ arch/arm64/include/asm/memory.h | 8 -------- arch/c6x/include/asm/Kbuild | 1 + arch/h8300/include/asm/Kbuild | 1 + arch/hexagon/include/asm/Kbuild | 1 + arch/ia64/include/asm/Kbuild | 1 + arch/m68k/include/asm/Kbuild | 1 + arch/microblaze/include/asm/Kbuild | 1 + arch/mips/include/asm/Kbuild | 1 + arch/nds32/include/asm/Kbuild | 1 + arch/nios2/include/asm/Kbuild | 1 + arch/openrisc/include/asm/Kbuild | 1 + arch/parisc/include/asm/Kbuild | 1 + arch/powerpc/include/asm/Kbuild | 1 + arch/riscv/include/asm/Kbuild | 1 + arch/s390/include/asm/Kbuild | 1 + arch/sh/include/asm/Kbuild | 1 + arch/sparc/include/asm/Kbuild | 1 + arch/um/include/asm/Kbuild | 1 + arch/unicore32/include/asm/Kbuild | 1 + arch/x86/include/asm/Kbuild | 1 + arch/xtensa/include/asm/Kbuild | 1 + drivers/of/fdt.c | 1 + include/asm-generic/initrd.h | 1 + 27 files changed, 38 insertions(+), 8 deletions(-) create mode 100644 arch/arm64/include/asm/initrd.h create mode 100644 include/asm-generic/initrd.h -- 2.17.1 ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-kernel Cc: Florian Fainelli, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, open list:ALPHA PORT, open list:SYNOPSYS ARC ARCHITECTURE, moderated list:ARM PORT, open list:C6X ARCHITECTURE, moderated list:H8/300 ARCHITECTURE, open list:QUALCOMM HEXAGON ARCHITECTURE, open list:IA64 (Itanium) PLATFORM, open list:M68K ARCHITECTURE, open list:MIPS, moderated list:NIOS2 ARCHITECTURE, open list:OPENRISC ARCHITECTURE, open list:PARISC ARCHITECTURE, open list:LINUX FOR POWERPC (32-BIT AND 64-BIT), open list:RISC-V ARCHITECTURE, open list:S390, open list:SUPERH, open list:SPARC + UltraSPARC (sparc/sparc64), open list:USER-MODE LINUX (UML), open list:TENSILICA XTENSA PORT (xtensa), open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE, open list:GENERIC INCLUDE/ASM HEADER FILES Hi all, While investigating why ARM64 required a ton of objects to be rebuilt when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was because we define __early_init_dt_declare_initrd() differently and we do that in arch/arm64/include/asm/memory.h which gets included by a fair amount of other header files, and translation units as well. Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build systems that generate two kernels: one with the initramfs and one without. buildroot is one of these build systems, OpenWrt is also another one that does this. This patch series proposes adding an empty initrd.h to satisfy the need for drivers/of/fdt.c to unconditionally include that file, and moves the custom __early_init_dt_declare_initrd() definition away from asm/memory.h This cuts the number of objects rebuilds from 1920 down to 26, so a factor 73 approximately. Apologies for the long CC list, please let me know how you would go about merging that and if another approach would be preferable, e.g: introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or something like that. Changes in v2: - put an /* empty */ comment in the asm-generic/initrd.h file - trim down the CC list to maximize the chances of people receiving this Florian Fainelli (2): arch: Add asm-generic/initrd.h and make use of it for most architectures arm64: Create asm/initrd.h arch/alpha/include/asm/Kbuild | 1 + arch/arc/include/asm/Kbuild | 1 + arch/arm/include/asm/Kbuild | 1 + arch/arm64/include/asm/initrd.h | 13 +++++++++++++ arch/arm64/include/asm/memory.h | 8 -------- arch/c6x/include/asm/Kbuild | 1 + arch/h8300/include/asm/Kbuild | 1 + arch/hexagon/include/asm/Kbuild | 1 + arch/ia64/include/asm/Kbuild | 1 + arch/m68k/include/asm/Kbuild | 1 + arch/microblaze/include/asm/Kbuild | 1 + arch/mips/include/asm/Kbuild | 1 + arch/nds32/include/asm/Kbuild | 1 + arch/nios2/include/asm/Kbuild | 1 + arch/openrisc/include/asm/Kbuild | 1 + arch/parisc/include/asm/Kbuild | 1 + arch/powerpc/include/asm/Kbuild | 1 + arch/riscv/include/asm/Kbuild | 1 + arch/s390/include/asm/Kbuild | 1 + arch/sh/include/asm/Kbuild | 1 + arch/sparc/include/asm/Kbuild | 1 + arch/um/include/asm/Kbuild | 1 + arch/unicore32/include/asm/Kbuild | 1 + arch/x86/include/asm/Kbuild | 1 + arch/xtensa/include/asm/Kbuild | 1 + drivers/of/fdt.c | 1 + include/asm-generic/initrd.h | 1 + 27 files changed, 38 insertions(+), 8 deletions(-) create mode 100644 arch/arm64/include/asm/initrd.h create mode 100644 include/asm-generic/initrd.h -- 2.17.1 ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-kernel Cc: Florian Fainelli, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, open list:ALPHA PORT, open list:SYNOPSYS ARC ARCHITECTURE, moderated list:ARM PORT, open list:C6X ARCHITECTURE, moderated list:H8/300 ARCHITECTURE, open list:QUALCOMM HEXAGON ARCHITECTURE, open list:IA64 (Itanium) PLATFORM, linux-m68k Hi all, While investigating why ARM64 required a ton of objects to be rebuilt when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was because we define __early_init_dt_declare_initrd() differently and we do that in arch/arm64/include/asm/memory.h which gets included by a fair amount of other header files, and translation units as well. Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build systems that generate two kernels: one with the initramfs and one without. buildroot is one of these build systems, OpenWrt is also another one that does this. This patch series proposes adding an empty initrd.h to satisfy the need for drivers/of/fdt.c to unconditionally include that file, and moves the custom __early_init_dt_declare_initrd() definition away from asm/memory.h This cuts the number of objects rebuilds from 1920 down to 26, so a factor 73 approximately. Apologies for the long CC list, please let me know how you would go about merging that and if another approach would be preferable, e.g: introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or something like that. Changes in v2: - put an /* empty */ comment in the asm-generic/initrd.h file - trim down the CC list to maximize the chances of people receiving this Florian Fainelli (2): arch: Add asm-generic/initrd.h and make use of it for most architectures arm64: Create asm/initrd.h arch/alpha/include/asm/Kbuild | 1 + arch/arc/include/asm/Kbuild | 1 + arch/arm/include/asm/Kbuild | 1 + arch/arm64/include/asm/initrd.h | 13 +++++++++++++ arch/arm64/include/asm/memory.h | 8 -------- arch/c6x/include/asm/Kbuild | 1 + arch/h8300/include/asm/Kbuild | 1 + arch/hexagon/include/asm/Kbuild | 1 + arch/ia64/include/asm/Kbuild | 1 + arch/m68k/include/asm/Kbuild | 1 + arch/microblaze/include/asm/Kbuild | 1 + arch/mips/include/asm/Kbuild | 1 + arch/nds32/include/asm/Kbuild | 1 + arch/nios2/include/asm/Kbuild | 1 + arch/openrisc/include/asm/Kbuild | 1 + arch/parisc/include/asm/Kbuild | 1 + arch/powerpc/include/asm/Kbuild | 1 + arch/riscv/include/asm/Kbuild | 1 + arch/s390/include/asm/Kbuild | 1 + arch/sh/include/asm/Kbuild | 1 + arch/sparc/include/asm/Kbuild | 1 + arch/um/include/asm/Kbuild | 1 + arch/unicore32/include/asm/Kbuild | 1 + arch/x86/include/asm/Kbuild | 1 + arch/xtensa/include/asm/Kbuild | 1 + drivers/of/fdt.c | 1 + include/asm-generic/initrd.h | 1 + 27 files changed, 38 insertions(+), 8 deletions(-) create mode 100644 arch/arm64/include/asm/initrd.h create mode 100644 include/asm-generic/initrd.h -- 2.17.1 ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 1/2] arch: Add asm-generic/initrd.h and make use of it for most architectures 2018-10-24 19:32 ` Florian Fainelli ` (9 preceding siblings ...) (?) @ 2018-10-24 19:32 ` Florian Fainelli -1 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-kernel Cc: Florian Fainelli, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, open list:ALPHA PORT, open list:SYNOPSYS ARC ARCHITECTURE, moderated list:ARM PORT, open list:C6X ARCHITECTURE, moderated list:H8/300 ARCHITECTURE, open list:QUALCOMM HEXAGON ARCHITECTURE, open list:IA64 Itanium PLATFORM, open list:M68 In preparation for separating the definition of __early_init_dt_declare_initrd() on ARM64 in order to cut the amount of files that require a rebuild when CONFIG_BLK_DEV_INITRD value is changed, introduce an empty asm-generic initrd.h file and update all architectures but arm64 to make use of it. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- arch/alpha/include/asm/Kbuild | 1 + arch/arc/include/asm/Kbuild | 1 + arch/arm/include/asm/Kbuild | 1 + arch/c6x/include/asm/Kbuild | 1 + arch/h8300/include/asm/Kbuild | 1 + arch/hexagon/include/asm/Kbuild | 1 + arch/ia64/include/asm/Kbuild | 1 + arch/m68k/include/asm/Kbuild | 1 + arch/microblaze/include/asm/Kbuild | 1 + arch/mips/include/asm/Kbuild | 1 + arch/nds32/include/asm/Kbuild | 1 + arch/nios2/include/asm/Kbuild | 1 + arch/openrisc/include/asm/Kbuild | 1 + arch/parisc/include/asm/Kbuild | 1 + arch/powerpc/include/asm/Kbuild | 1 + arch/riscv/include/asm/Kbuild | 1 + arch/s390/include/asm/Kbuild | 1 + arch/sh/include/asm/Kbuild | 1 + arch/sparc/include/asm/Kbuild | 1 + arch/um/include/asm/Kbuild | 1 + arch/unicore32/include/asm/Kbuild | 1 + arch/x86/include/asm/Kbuild | 1 + arch/xtensa/include/asm/Kbuild | 1 + include/asm-generic/initrd.h | 1 + 24 files changed, 24 insertions(+) create mode 100644 include/asm-generic/initrd.h diff --git a/arch/alpha/include/asm/Kbuild b/arch/alpha/include/asm/Kbuild index 0580cb8c84b2..cd6f723aed1b 100644 --- a/arch/alpha/include/asm/Kbuild +++ b/arch/alpha/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += compat.h generic-y += exec.h generic-y += export.h generic-y += fb.h +generic-y += initrd.h generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/arc/include/asm/Kbuild b/arch/arc/include/asm/Kbuild index feed50ce89fa..ba18632aa493 100644 --- a/arch/arc/include/asm/Kbuild +++ b/arch/arc/include/asm/Kbuild @@ -10,6 +10,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kmap_types.h diff --git a/arch/arm/include/asm/Kbuild b/arch/arm/include/asm/Kbuild index 1d66db9c9db5..b91d5b32e64f 100644 --- a/arch/arm/include/asm/Kbuild +++ b/arch/arm/include/asm/Kbuild @@ -4,6 +4,7 @@ generic-y += early_ioremap.h generic-y += emergency-restart.h generic-y += exec.h generic-y += extable.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += kdebug.h generic-y += local.h diff --git a/arch/c6x/include/asm/Kbuild b/arch/c6x/include/asm/Kbuild index 33a2c94fed0d..9e14cf6e89b4 100644 --- a/arch/c6x/include/asm/Kbuild +++ b/arch/c6x/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += extable.h generic-y += fb.h generic-y += futex.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += io.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/h8300/include/asm/Kbuild b/arch/h8300/include/asm/Kbuild index a5d0b2991f47..7d4e06a757c8 100644 --- a/arch/h8300/include/asm/Kbuild +++ b/arch/h8300/include/asm/Kbuild @@ -19,6 +19,7 @@ generic-y += futex.h generic-y += hardirq.h generic-y += hash.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/hexagon/include/asm/Kbuild b/arch/hexagon/include/asm/Kbuild index 47c4da3d64a4..0be62abf2123 100644 --- a/arch/hexagon/include/asm/Kbuild +++ b/arch/hexagon/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += iomap.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/ia64/include/asm/Kbuild b/arch/ia64/include/asm/Kbuild index 557bbc8ba9f5..1a1f1e4ba0d5 100644 --- a/arch/ia64/include/asm/Kbuild +++ b/arch/ia64/include/asm/Kbuild @@ -1,5 +1,6 @@ generic-y += compat.h generic-y += exec.h +generic-y += initrd.h generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/m68k/include/asm/Kbuild b/arch/m68k/include/asm/Kbuild index a4b8d3331a9e..9903551e0c9c 100644 --- a/arch/m68k/include/asm/Kbuild +++ b/arch/m68k/include/asm/Kbuild @@ -7,6 +7,7 @@ generic-y += exec.h generic-y += extable.h generic-y += futex.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/microblaze/include/asm/Kbuild b/arch/microblaze/include/asm/Kbuild index 569ba9e670c1..ec37e6304be5 100644 --- a/arch/microblaze/include/asm/Kbuild +++ b/arch/microblaze/include/asm/Kbuild @@ -11,6 +11,7 @@ generic-y += exec.h generic-y += extable.h generic-y += fb.h generic-y += hardirq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/mips/include/asm/Kbuild b/arch/mips/include/asm/Kbuild index 9a81e72119da..005ef04a4c73 100644 --- a/arch/mips/include/asm/Kbuild +++ b/arch/mips/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += device.h generic-y += dma-contiguous.h generic-y += emergency-restart.h generic-y += export.h +generic-y += initrd.h generic-y += irq_work.h generic-y += local64.h generic-y += mcs_spinlock.h diff --git a/arch/nds32/include/asm/Kbuild b/arch/nds32/include/asm/Kbuild index dbc4e5422550..1400aaf0c840 100644 --- a/arch/nds32/include/asm/Kbuild +++ b/arch/nds32/include/asm/Kbuild @@ -25,6 +25,7 @@ generic-y += ftrace.h generic-y += gpio.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += ioctl.h generic-y += ioctls.h generic-y += irq.h diff --git a/arch/nios2/include/asm/Kbuild b/arch/nios2/include/asm/Kbuild index 8fde4fa2c34f..d89de02549ee 100644 --- a/arch/nios2/include/asm/Kbuild +++ b/arch/nios2/include/asm/Kbuild @@ -18,6 +18,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/openrisc/include/asm/Kbuild b/arch/openrisc/include/asm/Kbuild index eb87cd8327c8..296fd55e8473 100644 --- a/arch/openrisc/include/asm/Kbuild +++ b/arch/openrisc/include/asm/Kbuild @@ -15,6 +15,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/parisc/include/asm/Kbuild b/arch/parisc/include/asm/Kbuild index 2013d639e735..1382d78a2477 100644 --- a/arch/parisc/include/asm/Kbuild +++ b/arch/parisc/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += exec.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/powerpc/include/asm/Kbuild b/arch/powerpc/include/asm/Kbuild index 3196d227e351..e3ea67c30605 100644 --- a/arch/powerpc/include/asm/Kbuild +++ b/arch/powerpc/include/asm/Kbuild @@ -1,5 +1,6 @@ generic-y += div64.h generic-y += export.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += local64.h diff --git a/arch/riscv/include/asm/Kbuild b/arch/riscv/include/asm/Kbuild index efdbe311e936..0e67ed69c423 100644 --- a/arch/riscv/include/asm/Kbuild +++ b/arch/riscv/include/asm/Kbuild @@ -17,6 +17,7 @@ generic-y += futex.h generic-y += hardirq.h generic-y += hash.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += ioctl.h generic-y += ioctls.h generic-y += ipcbuf.h diff --git a/arch/s390/include/asm/Kbuild b/arch/s390/include/asm/Kbuild index e3239772887a..dc618745d427 100644 --- a/arch/s390/include/asm/Kbuild +++ b/arch/s390/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += export.h generic-y += fb.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kmap_types.h diff --git a/arch/sh/include/asm/Kbuild b/arch/sh/include/asm/Kbuild index 6a5609a55965..c006a7cf3a43 100644 --- a/arch/sh/include/asm/Kbuild +++ b/arch/sh/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += dma-mapping.h generic-y += emergency-restart.h generic-y += exec.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += local.h diff --git a/arch/sparc/include/asm/Kbuild b/arch/sparc/include/asm/Kbuild index 410b263ef5c8..a5772c2a96c8 100644 --- a/arch/sparc/include/asm/Kbuild +++ b/arch/sparc/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += exec.h generic-y += export.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += linkage.h diff --git a/arch/um/include/asm/Kbuild b/arch/um/include/asm/Kbuild index b10dde6cb793..032cfe1b530b 100644 --- a/arch/um/include/asm/Kbuild +++ b/arch/um/include/asm/Kbuild @@ -12,6 +12,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += io.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/unicore32/include/asm/Kbuild b/arch/unicore32/include/asm/Kbuild index 1372553dc0a9..32e7dea45fcd 100644 --- a/arch/unicore32/include/asm/Kbuild +++ b/arch/unicore32/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/x86/include/asm/Kbuild b/arch/x86/include/asm/Kbuild index a0ab9ab61c75..290bd1c3ee2d 100644 --- a/arch/x86/include/asm/Kbuild +++ b/arch/x86/include/asm/Kbuild @@ -9,5 +9,6 @@ generated-y += xen-hypercalls.h generic-y += dma-contiguous.h generic-y += early_ioremap.h generic-y += export.h +generic-y += initrd.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/xtensa/include/asm/Kbuild b/arch/xtensa/include/asm/Kbuild index 82c756431b49..f2c363f2d22a 100644 --- a/arch/xtensa/include/asm/Kbuild +++ b/arch/xtensa/include/asm/Kbuild @@ -9,6 +9,7 @@ generic-y += exec.h generic-y += extable.h generic-y += fb.h generic-y += hardirq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/include/asm-generic/initrd.h b/include/asm-generic/initrd.h new file mode 100644 index 000000000000..40a8c178f10d --- /dev/null +++ b/include/asm-generic/initrd.h @@ -0,0 +1 @@ +/* empty */ -- 2.17.1 ^ permalink raw reply related [flat|nested] 168+ messages in thread
* [PATCH v2 1/2] arch: Add asm-generic/initrd.h and make use of it for most architectures @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-kernel Cc: Florian Fainelli, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, open list:ALPHA PORT, open list:SYNOPSYS ARC ARCHITECTURE, moderated list:ARM PORT, open list:C6X ARCHITECTURE, moderated list:H8/300, ARCHITECTURE, , open list:QUALCOMM HEXAGON ARCHITECTURE, open list:IA64 Itanium PLATFORM, open list:M68K ARCHITECTURE, open list:MIPS, moderated list:NIOS2 ARCHITECTURE, open list:OPENRISC ARCHITECTURE, open list:PARISC ARCHITECTURE, open list:LINUX FOR POWERPC 32-BIT AND 64-BIT, , open list:RISC-V ARCHITECTURE, open list:S390, open list:SUPERH, open list:SPARC + UltraSPARC, , open list:USER-MODE LINUX UML, open list:TENSILICA XTENSA PORT xtensa, open list:OPEN FIRMWARE AND FLATTENED, DEVICE, , open list:GENERIC INCLUDE/ASM HEADER FILES In preparation for separating the definition of __early_init_dt_declare_initrd() on ARM64 in order to cut the amount of files that require a rebuild when CONFIG_BLK_DEV_INITRD value is changed, introduce an empty asm-generic initrd.h file and update all architectures but arm64 to make use of it. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- arch/alpha/include/asm/Kbuild | 1 + arch/arc/include/asm/Kbuild | 1 + arch/arm/include/asm/Kbuild | 1 + arch/c6x/include/asm/Kbuild | 1 + arch/h8300/include/asm/Kbuild | 1 + arch/hexagon/include/asm/Kbuild | 1 + arch/ia64/include/asm/Kbuild | 1 + arch/m68k/include/asm/Kbuild | 1 + arch/microblaze/include/asm/Kbuild | 1 + arch/mips/include/asm/Kbuild | 1 + arch/nds32/include/asm/Kbuild | 1 + arch/nios2/include/asm/Kbuild | 1 + arch/openrisc/include/asm/Kbuild | 1 + arch/parisc/include/asm/Kbuild | 1 + arch/powerpc/include/asm/Kbuild | 1 + arch/riscv/include/asm/Kbuild | 1 + arch/s390/include/asm/Kbuild | 1 + arch/sh/include/asm/Kbuild | 1 + arch/sparc/include/asm/Kbuild | 1 + arch/um/include/asm/Kbuild | 1 + arch/unicore32/include/asm/Kbuild | 1 + arch/x86/include/asm/Kbuild | 1 + arch/xtensa/include/asm/Kbuild | 1 + include/asm-generic/initrd.h | 1 + 24 files changed, 24 insertions(+) create mode 100644 include/asm-generic/initrd.h diff --git a/arch/alpha/include/asm/Kbuild b/arch/alpha/include/asm/Kbuild index 0580cb8c84b2..cd6f723aed1b 100644 --- a/arch/alpha/include/asm/Kbuild +++ b/arch/alpha/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += compat.h generic-y += exec.h generic-y += export.h generic-y += fb.h +generic-y += initrd.h generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/arc/include/asm/Kbuild b/arch/arc/include/asm/Kbuild index feed50ce89fa..ba18632aa493 100644 --- a/arch/arc/include/asm/Kbuild +++ b/arch/arc/include/asm/Kbuild @@ -10,6 +10,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kmap_types.h diff --git a/arch/arm/include/asm/Kbuild b/arch/arm/include/asm/Kbuild index 1d66db9c9db5..b91d5b32e64f 100644 --- a/arch/arm/include/asm/Kbuild +++ b/arch/arm/include/asm/Kbuild @@ -4,6 +4,7 @@ generic-y += early_ioremap.h generic-y += emergency-restart.h generic-y += exec.h generic-y += extable.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += kdebug.h generic-y += local.h diff --git a/arch/c6x/include/asm/Kbuild b/arch/c6x/include/asm/Kbuild index 33a2c94fed0d..9e14cf6e89b4 100644 --- a/arch/c6x/include/asm/Kbuild +++ b/arch/c6x/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += extable.h generic-y += fb.h generic-y += futex.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += io.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/h8300/include/asm/Kbuild b/arch/h8300/include/asm/Kbuild index a5d0b2991f47..7d4e06a757c8 100644 --- a/arch/h8300/include/asm/Kbuild +++ b/arch/h8300/include/asm/Kbuild @@ -19,6 +19,7 @@ generic-y += futex.h generic-y += hardirq.h generic-y += hash.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/hexagon/include/asm/Kbuild b/arch/hexagon/include/asm/Kbuild index 47c4da3d64a4..0be62abf2123 100644 --- a/arch/hexagon/include/asm/Kbuild +++ b/arch/hexagon/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += iomap.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/ia64/include/asm/Kbuild b/arch/ia64/include/asm/Kbuild index 557bbc8ba9f5..1a1f1e4ba0d5 100644 --- a/arch/ia64/include/asm/Kbuild +++ b/arch/ia64/include/asm/Kbuild @@ -1,5 +1,6 @@ generic-y += compat.h generic-y += exec.h +generic-y += initrd.h generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/m68k/include/asm/Kbuild b/arch/m68k/include/asm/Kbuild index a4b8d3331a9e..9903551e0c9c 100644 --- a/arch/m68k/include/asm/Kbuild +++ b/arch/m68k/include/asm/Kbuild @@ -7,6 +7,7 @@ generic-y += exec.h generic-y += extable.h generic-y += futex.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/microblaze/include/asm/Kbuild b/arch/microblaze/include/asm/Kbuild index 569ba9e670c1..ec37e6304be5 100644 --- a/arch/microblaze/include/asm/Kbuild +++ b/arch/microblaze/include/asm/Kbuild @@ -11,6 +11,7 @@ generic-y += exec.h generic-y += extable.h generic-y += fb.h generic-y += hardirq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/mips/include/asm/Kbuild b/arch/mips/include/asm/Kbuild index 9a81e72119da..005ef04a4c73 100644 --- a/arch/mips/include/asm/Kbuild +++ b/arch/mips/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += device.h generic-y += dma-contiguous.h generic-y += emergency-restart.h generic-y += export.h +generic-y += initrd.h generic-y += irq_work.h generic-y += local64.h generic-y += mcs_spinlock.h diff --git a/arch/nds32/include/asm/Kbuild b/arch/nds32/include/asm/Kbuild index dbc4e5422550..1400aaf0c840 100644 --- a/arch/nds32/include/asm/Kbuild +++ b/arch/nds32/include/asm/Kbuild @@ -25,6 +25,7 @@ generic-y += ftrace.h generic-y += gpio.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += ioctl.h generic-y += ioctls.h generic-y += irq.h diff --git a/arch/nios2/include/asm/Kbuild b/arch/nios2/include/asm/Kbuild index 8fde4fa2c34f..d89de02549ee 100644 --- a/arch/nios2/include/asm/Kbuild +++ b/arch/nios2/include/asm/Kbuild @@ -18,6 +18,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/openrisc/include/asm/Kbuild b/arch/openrisc/include/asm/Kbuild index eb87cd8327c8..296fd55e8473 100644 --- a/arch/openrisc/include/asm/Kbuild +++ b/arch/openrisc/include/asm/Kbuild @@ -15,6 +15,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/parisc/include/asm/Kbuild b/arch/parisc/include/asm/Kbuild index 2013d639e735..1382d78a2477 100644 --- a/arch/parisc/include/asm/Kbuild +++ b/arch/parisc/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += exec.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/powerpc/include/asm/Kbuild b/arch/powerpc/include/asm/Kbuild index 3196d227e351..e3ea67c30605 100644 --- a/arch/powerpc/include/asm/Kbuild +++ b/arch/powerpc/include/asm/Kbuild @@ -1,5 +1,6 @@ generic-y += div64.h generic-y += export.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += local64.h diff --git a/arch/riscv/include/asm/Kbuild b/arch/riscv/include/asm/Kbuild index efdbe311e936..0e67ed69c423 100644 --- a/arch/riscv/include/asm/Kbuild +++ b/arch/riscv/include/asm/Kbuild @@ -17,6 +17,7 @@ generic-y += futex.h generic-y += hardirq.h generic-y += hash.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += ioctl.h generic-y += ioctls.h generic-y += ipcbuf.h diff --git a/arch/s390/include/asm/Kbuild b/arch/s390/include/asm/Kbuild index e3239772887a..dc618745d427 100644 --- a/arch/s390/include/asm/Kbuild +++ b/arch/s390/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += export.h generic-y += fb.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kmap_types.h diff --git a/arch/sh/include/asm/Kbuild b/arch/sh/include/asm/Kbuild index 6a5609a55965..c006a7cf3a43 100644 --- a/arch/sh/include/asm/Kbuild +++ b/arch/sh/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += dma-mapping.h generic-y += emergency-restart.h generic-y += exec.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += local.h diff --git a/arch/sparc/include/asm/Kbuild b/arch/sparc/include/asm/Kbuild index 410b263ef5c8..a5772c2a96c8 100644 --- a/arch/sparc/include/asm/Kbuild +++ b/arch/sparc/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += exec.h generic-y += export.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += linkage.h diff --git a/arch/um/include/asm/Kbuild b/arch/um/include/asm/Kbuild index b10dde6cb793..032cfe1b530b 100644 --- a/arch/um/include/asm/Kbuild +++ b/arch/um/include/asm/Kbuild @@ -12,6 +12,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += io.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/unicore32/include/asm/Kbuild b/arch/unicore32/include/asm/Kbuild index 1372553dc0a9..32e7dea45fcd 100644 --- a/arch/unicore32/include/asm/Kbuild +++ b/arch/unicore32/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/x86/include/asm/Kbuild b/arch/x86/include/asm/Kbuild index a0ab9ab61c75..290bd1c3ee2d 100644 --- a/arch/x86/include/asm/Kbuild +++ b/arch/x86/include/asm/Kbuild @@ -9,5 +9,6 @@ generated-y += xen-hypercalls.h generic-y += dma-contiguous.h generic-y += early_ioremap.h generic-y += export.h +generic-y += initrd.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/xtensa/include/asm/Kbuild b/arch/xtensa/include/asm/Kbuild index 82c756431b49..f2c363f2d22a 100644 --- a/arch/xtensa/include/asm/Kbuild +++ b/arch/xtensa/include/asm/Kbuild @@ -9,6 +9,7 @@ generic-y += exec.h generic-y += extable.h generic-y += fb.h generic-y += hardirq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/include/asm-generic/initrd.h b/include/asm-generic/initrd.h new file mode 100644 index 000000000000..40a8c178f10d --- /dev/null +++ b/include/asm-generic/initrd.h @@ -0,0 +1 @@ +/* empty */ -- 2.17.1 ^ permalink raw reply related [flat|nested] 168+ messages in thread
* [OpenRISC] [PATCH v2 1/2] arch: Add asm-generic/initrd.h and make use of it for most architectures @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: openrisc In preparation for separating the definition of __early_init_dt_declare_initrd() on ARM64 in order to cut the amount of files that require a rebuild when CONFIG_BLK_DEV_INITRD value is changed, introduce an empty asm-generic initrd.h file and update all architectures but arm64 to make use of it. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- arch/alpha/include/asm/Kbuild | 1 + arch/arc/include/asm/Kbuild | 1 + arch/arm/include/asm/Kbuild | 1 + arch/c6x/include/asm/Kbuild | 1 + arch/h8300/include/asm/Kbuild | 1 + arch/hexagon/include/asm/Kbuild | 1 + arch/ia64/include/asm/Kbuild | 1 + arch/m68k/include/asm/Kbuild | 1 + arch/microblaze/include/asm/Kbuild | 1 + arch/mips/include/asm/Kbuild | 1 + arch/nds32/include/asm/Kbuild | 1 + arch/nios2/include/asm/Kbuild | 1 + arch/openrisc/include/asm/Kbuild | 1 + arch/parisc/include/asm/Kbuild | 1 + arch/powerpc/include/asm/Kbuild | 1 + arch/riscv/include/asm/Kbuild | 1 + arch/s390/include/asm/Kbuild | 1 + arch/sh/include/asm/Kbuild | 1 + arch/sparc/include/asm/Kbuild | 1 + arch/um/include/asm/Kbuild | 1 + arch/unicore32/include/asm/Kbuild | 1 + arch/x86/include/asm/Kbuild | 1 + arch/xtensa/include/asm/Kbuild | 1 + include/asm-generic/initrd.h | 1 + 24 files changed, 24 insertions(+) create mode 100644 include/asm-generic/initrd.h diff --git a/arch/alpha/include/asm/Kbuild b/arch/alpha/include/asm/Kbuild index 0580cb8c84b2..cd6f723aed1b 100644 --- a/arch/alpha/include/asm/Kbuild +++ b/arch/alpha/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += compat.h generic-y += exec.h generic-y += export.h generic-y += fb.h +generic-y += initrd.h generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/arc/include/asm/Kbuild b/arch/arc/include/asm/Kbuild index feed50ce89fa..ba18632aa493 100644 --- a/arch/arc/include/asm/Kbuild +++ b/arch/arc/include/asm/Kbuild @@ -10,6 +10,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kmap_types.h diff --git a/arch/arm/include/asm/Kbuild b/arch/arm/include/asm/Kbuild index 1d66db9c9db5..b91d5b32e64f 100644 --- a/arch/arm/include/asm/Kbuild +++ b/arch/arm/include/asm/Kbuild @@ -4,6 +4,7 @@ generic-y += early_ioremap.h generic-y += emergency-restart.h generic-y += exec.h generic-y += extable.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += kdebug.h generic-y += local.h diff --git a/arch/c6x/include/asm/Kbuild b/arch/c6x/include/asm/Kbuild index 33a2c94fed0d..9e14cf6e89b4 100644 --- a/arch/c6x/include/asm/Kbuild +++ b/arch/c6x/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += extable.h generic-y += fb.h generic-y += futex.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += io.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/h8300/include/asm/Kbuild b/arch/h8300/include/asm/Kbuild index a5d0b2991f47..7d4e06a757c8 100644 --- a/arch/h8300/include/asm/Kbuild +++ b/arch/h8300/include/asm/Kbuild @@ -19,6 +19,7 @@ generic-y += futex.h generic-y += hardirq.h generic-y += hash.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/hexagon/include/asm/Kbuild b/arch/hexagon/include/asm/Kbuild index 47c4da3d64a4..0be62abf2123 100644 --- a/arch/hexagon/include/asm/Kbuild +++ b/arch/hexagon/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += iomap.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/ia64/include/asm/Kbuild b/arch/ia64/include/asm/Kbuild index 557bbc8ba9f5..1a1f1e4ba0d5 100644 --- a/arch/ia64/include/asm/Kbuild +++ b/arch/ia64/include/asm/Kbuild @@ -1,5 +1,6 @@ generic-y += compat.h generic-y += exec.h +generic-y += initrd.h generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/m68k/include/asm/Kbuild b/arch/m68k/include/asm/Kbuild index a4b8d3331a9e..9903551e0c9c 100644 --- a/arch/m68k/include/asm/Kbuild +++ b/arch/m68k/include/asm/Kbuild @@ -7,6 +7,7 @@ generic-y += exec.h generic-y += extable.h generic-y += futex.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/microblaze/include/asm/Kbuild b/arch/microblaze/include/asm/Kbuild index 569ba9e670c1..ec37e6304be5 100644 --- a/arch/microblaze/include/asm/Kbuild +++ b/arch/microblaze/include/asm/Kbuild @@ -11,6 +11,7 @@ generic-y += exec.h generic-y += extable.h generic-y += fb.h generic-y += hardirq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/mips/include/asm/Kbuild b/arch/mips/include/asm/Kbuild index 9a81e72119da..005ef04a4c73 100644 --- a/arch/mips/include/asm/Kbuild +++ b/arch/mips/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += device.h generic-y += dma-contiguous.h generic-y += emergency-restart.h generic-y += export.h +generic-y += initrd.h generic-y += irq_work.h generic-y += local64.h generic-y += mcs_spinlock.h diff --git a/arch/nds32/include/asm/Kbuild b/arch/nds32/include/asm/Kbuild index dbc4e5422550..1400aaf0c840 100644 --- a/arch/nds32/include/asm/Kbuild +++ b/arch/nds32/include/asm/Kbuild @@ -25,6 +25,7 @@ generic-y += ftrace.h generic-y += gpio.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += ioctl.h generic-y += ioctls.h generic-y += irq.h diff --git a/arch/nios2/include/asm/Kbuild b/arch/nios2/include/asm/Kbuild index 8fde4fa2c34f..d89de02549ee 100644 --- a/arch/nios2/include/asm/Kbuild +++ b/arch/nios2/include/asm/Kbuild @@ -18,6 +18,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/openrisc/include/asm/Kbuild b/arch/openrisc/include/asm/Kbuild index eb87cd8327c8..296fd55e8473 100644 --- a/arch/openrisc/include/asm/Kbuild +++ b/arch/openrisc/include/asm/Kbuild @@ -15,6 +15,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/parisc/include/asm/Kbuild b/arch/parisc/include/asm/Kbuild index 2013d639e735..1382d78a2477 100644 --- a/arch/parisc/include/asm/Kbuild +++ b/arch/parisc/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += exec.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/powerpc/include/asm/Kbuild b/arch/powerpc/include/asm/Kbuild index 3196d227e351..e3ea67c30605 100644 --- a/arch/powerpc/include/asm/Kbuild +++ b/arch/powerpc/include/asm/Kbuild @@ -1,5 +1,6 @@ generic-y += div64.h generic-y += export.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += local64.h diff --git a/arch/riscv/include/asm/Kbuild b/arch/riscv/include/asm/Kbuild index efdbe311e936..0e67ed69c423 100644 --- a/arch/riscv/include/asm/Kbuild +++ b/arch/riscv/include/asm/Kbuild @@ -17,6 +17,7 @@ generic-y += futex.h generic-y += hardirq.h generic-y += hash.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += ioctl.h generic-y += ioctls.h generic-y += ipcbuf.h diff --git a/arch/s390/include/asm/Kbuild b/arch/s390/include/asm/Kbuild index e3239772887a..dc618745d427 100644 --- a/arch/s390/include/asm/Kbuild +++ b/arch/s390/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += export.h generic-y += fb.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kmap_types.h diff --git a/arch/sh/include/asm/Kbuild b/arch/sh/include/asm/Kbuild index 6a5609a55965..c006a7cf3a43 100644 --- a/arch/sh/include/asm/Kbuild +++ b/arch/sh/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += dma-mapping.h generic-y += emergency-restart.h generic-y += exec.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += local.h diff --git a/arch/sparc/include/asm/Kbuild b/arch/sparc/include/asm/Kbuild index 410b263ef5c8..a5772c2a96c8 100644 --- a/arch/sparc/include/asm/Kbuild +++ b/arch/sparc/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += exec.h generic-y += export.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += linkage.h diff --git a/arch/um/include/asm/Kbuild b/arch/um/include/asm/Kbuild index b10dde6cb793..032cfe1b530b 100644 --- a/arch/um/include/asm/Kbuild +++ b/arch/um/include/asm/Kbuild @@ -12,6 +12,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += io.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/unicore32/include/asm/Kbuild b/arch/unicore32/include/asm/Kbuild index 1372553dc0a9..32e7dea45fcd 100644 --- a/arch/unicore32/include/asm/Kbuild +++ b/arch/unicore32/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/x86/include/asm/Kbuild b/arch/x86/include/asm/Kbuild index a0ab9ab61c75..290bd1c3ee2d 100644 --- a/arch/x86/include/asm/Kbuild +++ b/arch/x86/include/asm/Kbuild @@ -9,5 +9,6 @@ generated-y += xen-hypercalls.h generic-y += dma-contiguous.h generic-y += early_ioremap.h generic-y += export.h +generic-y += initrd.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/xtensa/include/asm/Kbuild b/arch/xtensa/include/asm/Kbuild index 82c756431b49..f2c363f2d22a 100644 --- a/arch/xtensa/include/asm/Kbuild +++ b/arch/xtensa/include/asm/Kbuild @@ -9,6 +9,7 @@ generic-y += exec.h generic-y += extable.h generic-y += fb.h generic-y += hardirq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/include/asm-generic/initrd.h b/include/asm-generic/initrd.h new file mode 100644 index 000000000000..40a8c178f10d --- /dev/null +++ b/include/asm-generic/initrd.h @@ -0,0 +1 @@ +/* empty */ -- 2.17.1 ^ permalink raw reply related [flat|nested] 168+ messages in thread
* [PATCH v2 1/2] arch: Add asm-generic/initrd.h and make use of it for most architectures @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-arm-kernel In preparation for separating the definition of __early_init_dt_declare_initrd() on ARM64 in order to cut the amount of files that require a rebuild when CONFIG_BLK_DEV_INITRD value is changed, introduce an empty asm-generic initrd.h file and update all architectures but arm64 to make use of it. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- arch/alpha/include/asm/Kbuild | 1 + arch/arc/include/asm/Kbuild | 1 + arch/arm/include/asm/Kbuild | 1 + arch/c6x/include/asm/Kbuild | 1 + arch/h8300/include/asm/Kbuild | 1 + arch/hexagon/include/asm/Kbuild | 1 + arch/ia64/include/asm/Kbuild | 1 + arch/m68k/include/asm/Kbuild | 1 + arch/microblaze/include/asm/Kbuild | 1 + arch/mips/include/asm/Kbuild | 1 + arch/nds32/include/asm/Kbuild | 1 + arch/nios2/include/asm/Kbuild | 1 + arch/openrisc/include/asm/Kbuild | 1 + arch/parisc/include/asm/Kbuild | 1 + arch/powerpc/include/asm/Kbuild | 1 + arch/riscv/include/asm/Kbuild | 1 + arch/s390/include/asm/Kbuild | 1 + arch/sh/include/asm/Kbuild | 1 + arch/sparc/include/asm/Kbuild | 1 + arch/um/include/asm/Kbuild | 1 + arch/unicore32/include/asm/Kbuild | 1 + arch/x86/include/asm/Kbuild | 1 + arch/xtensa/include/asm/Kbuild | 1 + include/asm-generic/initrd.h | 1 + 24 files changed, 24 insertions(+) create mode 100644 include/asm-generic/initrd.h diff --git a/arch/alpha/include/asm/Kbuild b/arch/alpha/include/asm/Kbuild index 0580cb8c84b2..cd6f723aed1b 100644 --- a/arch/alpha/include/asm/Kbuild +++ b/arch/alpha/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += compat.h generic-y += exec.h generic-y += export.h generic-y += fb.h +generic-y += initrd.h generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/arc/include/asm/Kbuild b/arch/arc/include/asm/Kbuild index feed50ce89fa..ba18632aa493 100644 --- a/arch/arc/include/asm/Kbuild +++ b/arch/arc/include/asm/Kbuild @@ -10,6 +10,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kmap_types.h diff --git a/arch/arm/include/asm/Kbuild b/arch/arm/include/asm/Kbuild index 1d66db9c9db5..b91d5b32e64f 100644 --- a/arch/arm/include/asm/Kbuild +++ b/arch/arm/include/asm/Kbuild @@ -4,6 +4,7 @@ generic-y += early_ioremap.h generic-y += emergency-restart.h generic-y += exec.h generic-y += extable.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += kdebug.h generic-y += local.h diff --git a/arch/c6x/include/asm/Kbuild b/arch/c6x/include/asm/Kbuild index 33a2c94fed0d..9e14cf6e89b4 100644 --- a/arch/c6x/include/asm/Kbuild +++ b/arch/c6x/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += extable.h generic-y += fb.h generic-y += futex.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += io.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/h8300/include/asm/Kbuild b/arch/h8300/include/asm/Kbuild index a5d0b2991f47..7d4e06a757c8 100644 --- a/arch/h8300/include/asm/Kbuild +++ b/arch/h8300/include/asm/Kbuild @@ -19,6 +19,7 @@ generic-y += futex.h generic-y += hardirq.h generic-y += hash.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/hexagon/include/asm/Kbuild b/arch/hexagon/include/asm/Kbuild index 47c4da3d64a4..0be62abf2123 100644 --- a/arch/hexagon/include/asm/Kbuild +++ b/arch/hexagon/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += iomap.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/ia64/include/asm/Kbuild b/arch/ia64/include/asm/Kbuild index 557bbc8ba9f5..1a1f1e4ba0d5 100644 --- a/arch/ia64/include/asm/Kbuild +++ b/arch/ia64/include/asm/Kbuild @@ -1,5 +1,6 @@ generic-y += compat.h generic-y += exec.h +generic-y += initrd.h generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/m68k/include/asm/Kbuild b/arch/m68k/include/asm/Kbuild index a4b8d3331a9e..9903551e0c9c 100644 --- a/arch/m68k/include/asm/Kbuild +++ b/arch/m68k/include/asm/Kbuild @@ -7,6 +7,7 @@ generic-y += exec.h generic-y += extable.h generic-y += futex.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/microblaze/include/asm/Kbuild b/arch/microblaze/include/asm/Kbuild index 569ba9e670c1..ec37e6304be5 100644 --- a/arch/microblaze/include/asm/Kbuild +++ b/arch/microblaze/include/asm/Kbuild @@ -11,6 +11,7 @@ generic-y += exec.h generic-y += extable.h generic-y += fb.h generic-y += hardirq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/mips/include/asm/Kbuild b/arch/mips/include/asm/Kbuild index 9a81e72119da..005ef04a4c73 100644 --- a/arch/mips/include/asm/Kbuild +++ b/arch/mips/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += device.h generic-y += dma-contiguous.h generic-y += emergency-restart.h generic-y += export.h +generic-y += initrd.h generic-y += irq_work.h generic-y += local64.h generic-y += mcs_spinlock.h diff --git a/arch/nds32/include/asm/Kbuild b/arch/nds32/include/asm/Kbuild index dbc4e5422550..1400aaf0c840 100644 --- a/arch/nds32/include/asm/Kbuild +++ b/arch/nds32/include/asm/Kbuild @@ -25,6 +25,7 @@ generic-y += ftrace.h generic-y += gpio.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += ioctl.h generic-y += ioctls.h generic-y += irq.h diff --git a/arch/nios2/include/asm/Kbuild b/arch/nios2/include/asm/Kbuild index 8fde4fa2c34f..d89de02549ee 100644 --- a/arch/nios2/include/asm/Kbuild +++ b/arch/nios2/include/asm/Kbuild @@ -18,6 +18,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/openrisc/include/asm/Kbuild b/arch/openrisc/include/asm/Kbuild index eb87cd8327c8..296fd55e8473 100644 --- a/arch/openrisc/include/asm/Kbuild +++ b/arch/openrisc/include/asm/Kbuild @@ -15,6 +15,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/parisc/include/asm/Kbuild b/arch/parisc/include/asm/Kbuild index 2013d639e735..1382d78a2477 100644 --- a/arch/parisc/include/asm/Kbuild +++ b/arch/parisc/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += exec.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/powerpc/include/asm/Kbuild b/arch/powerpc/include/asm/Kbuild index 3196d227e351..e3ea67c30605 100644 --- a/arch/powerpc/include/asm/Kbuild +++ b/arch/powerpc/include/asm/Kbuild @@ -1,5 +1,6 @@ generic-y += div64.h generic-y += export.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += local64.h diff --git a/arch/riscv/include/asm/Kbuild b/arch/riscv/include/asm/Kbuild index efdbe311e936..0e67ed69c423 100644 --- a/arch/riscv/include/asm/Kbuild +++ b/arch/riscv/include/asm/Kbuild @@ -17,6 +17,7 @@ generic-y += futex.h generic-y += hardirq.h generic-y += hash.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += ioctl.h generic-y += ioctls.h generic-y += ipcbuf.h diff --git a/arch/s390/include/asm/Kbuild b/arch/s390/include/asm/Kbuild index e3239772887a..dc618745d427 100644 --- a/arch/s390/include/asm/Kbuild +++ b/arch/s390/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += export.h generic-y += fb.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kmap_types.h diff --git a/arch/sh/include/asm/Kbuild b/arch/sh/include/asm/Kbuild index 6a5609a55965..c006a7cf3a43 100644 --- a/arch/sh/include/asm/Kbuild +++ b/arch/sh/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += dma-mapping.h generic-y += emergency-restart.h generic-y += exec.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += local.h diff --git a/arch/sparc/include/asm/Kbuild b/arch/sparc/include/asm/Kbuild index 410b263ef5c8..a5772c2a96c8 100644 --- a/arch/sparc/include/asm/Kbuild +++ b/arch/sparc/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += exec.h generic-y += export.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += linkage.h diff --git a/arch/um/include/asm/Kbuild b/arch/um/include/asm/Kbuild index b10dde6cb793..032cfe1b530b 100644 --- a/arch/um/include/asm/Kbuild +++ b/arch/um/include/asm/Kbuild @@ -12,6 +12,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += io.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/unicore32/include/asm/Kbuild b/arch/unicore32/include/asm/Kbuild index 1372553dc0a9..32e7dea45fcd 100644 --- a/arch/unicore32/include/asm/Kbuild +++ b/arch/unicore32/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/x86/include/asm/Kbuild b/arch/x86/include/asm/Kbuild index a0ab9ab61c75..290bd1c3ee2d 100644 --- a/arch/x86/include/asm/Kbuild +++ b/arch/x86/include/asm/Kbuild @@ -9,5 +9,6 @@ generated-y += xen-hypercalls.h generic-y += dma-contiguous.h generic-y += early_ioremap.h generic-y += export.h +generic-y += initrd.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/xtensa/include/asm/Kbuild b/arch/xtensa/include/asm/Kbuild index 82c756431b49..f2c363f2d22a 100644 --- a/arch/xtensa/include/asm/Kbuild +++ b/arch/xtensa/include/asm/Kbuild @@ -9,6 +9,7 @@ generic-y += exec.h generic-y += extable.h generic-y += fb.h generic-y += hardirq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/include/asm-generic/initrd.h b/include/asm-generic/initrd.h new file mode 100644 index 000000000000..40a8c178f10d --- /dev/null +++ b/include/asm-generic/initrd.h @@ -0,0 +1 @@ +/* empty */ -- 2.17.1 ^ permalink raw reply related [flat|nested] 168+ messages in thread
* [PATCH v2 1/2] arch: Add asm-generic/initrd.h and make use of it for most architectures @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-snps-arc In preparation for separating the definition of __early_init_dt_declare_initrd() on ARM64 in order to cut the amount of files that require a rebuild when CONFIG_BLK_DEV_INITRD value is changed, introduce an empty asm-generic initrd.h file and update all architectures but arm64 to make use of it. Signed-off-by: Florian Fainelli <f.fainelli at gmail.com> --- arch/alpha/include/asm/Kbuild | 1 + arch/arc/include/asm/Kbuild | 1 + arch/arm/include/asm/Kbuild | 1 + arch/c6x/include/asm/Kbuild | 1 + arch/h8300/include/asm/Kbuild | 1 + arch/hexagon/include/asm/Kbuild | 1 + arch/ia64/include/asm/Kbuild | 1 + arch/m68k/include/asm/Kbuild | 1 + arch/microblaze/include/asm/Kbuild | 1 + arch/mips/include/asm/Kbuild | 1 + arch/nds32/include/asm/Kbuild | 1 + arch/nios2/include/asm/Kbuild | 1 + arch/openrisc/include/asm/Kbuild | 1 + arch/parisc/include/asm/Kbuild | 1 + arch/powerpc/include/asm/Kbuild | 1 + arch/riscv/include/asm/Kbuild | 1 + arch/s390/include/asm/Kbuild | 1 + arch/sh/include/asm/Kbuild | 1 + arch/sparc/include/asm/Kbuild | 1 + arch/um/include/asm/Kbuild | 1 + arch/unicore32/include/asm/Kbuild | 1 + arch/x86/include/asm/Kbuild | 1 + arch/xtensa/include/asm/Kbuild | 1 + include/asm-generic/initrd.h | 1 + 24 files changed, 24 insertions(+) create mode 100644 include/asm-generic/initrd.h diff --git a/arch/alpha/include/asm/Kbuild b/arch/alpha/include/asm/Kbuild index 0580cb8c84b2..cd6f723aed1b 100644 --- a/arch/alpha/include/asm/Kbuild +++ b/arch/alpha/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += compat.h generic-y += exec.h generic-y += export.h generic-y += fb.h +generic-y += initrd.h generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/arc/include/asm/Kbuild b/arch/arc/include/asm/Kbuild index feed50ce89fa..ba18632aa493 100644 --- a/arch/arc/include/asm/Kbuild +++ b/arch/arc/include/asm/Kbuild @@ -10,6 +10,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kmap_types.h diff --git a/arch/arm/include/asm/Kbuild b/arch/arm/include/asm/Kbuild index 1d66db9c9db5..b91d5b32e64f 100644 --- a/arch/arm/include/asm/Kbuild +++ b/arch/arm/include/asm/Kbuild @@ -4,6 +4,7 @@ generic-y += early_ioremap.h generic-y += emergency-restart.h generic-y += exec.h generic-y += extable.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += kdebug.h generic-y += local.h diff --git a/arch/c6x/include/asm/Kbuild b/arch/c6x/include/asm/Kbuild index 33a2c94fed0d..9e14cf6e89b4 100644 --- a/arch/c6x/include/asm/Kbuild +++ b/arch/c6x/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += extable.h generic-y += fb.h generic-y += futex.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += io.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/h8300/include/asm/Kbuild b/arch/h8300/include/asm/Kbuild index a5d0b2991f47..7d4e06a757c8 100644 --- a/arch/h8300/include/asm/Kbuild +++ b/arch/h8300/include/asm/Kbuild @@ -19,6 +19,7 @@ generic-y += futex.h generic-y += hardirq.h generic-y += hash.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/hexagon/include/asm/Kbuild b/arch/hexagon/include/asm/Kbuild index 47c4da3d64a4..0be62abf2123 100644 --- a/arch/hexagon/include/asm/Kbuild +++ b/arch/hexagon/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += iomap.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/ia64/include/asm/Kbuild b/arch/ia64/include/asm/Kbuild index 557bbc8ba9f5..1a1f1e4ba0d5 100644 --- a/arch/ia64/include/asm/Kbuild +++ b/arch/ia64/include/asm/Kbuild @@ -1,5 +1,6 @@ generic-y += compat.h generic-y += exec.h +generic-y += initrd.h generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/m68k/include/asm/Kbuild b/arch/m68k/include/asm/Kbuild index a4b8d3331a9e..9903551e0c9c 100644 --- a/arch/m68k/include/asm/Kbuild +++ b/arch/m68k/include/asm/Kbuild @@ -7,6 +7,7 @@ generic-y += exec.h generic-y += extable.h generic-y += futex.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/microblaze/include/asm/Kbuild b/arch/microblaze/include/asm/Kbuild index 569ba9e670c1..ec37e6304be5 100644 --- a/arch/microblaze/include/asm/Kbuild +++ b/arch/microblaze/include/asm/Kbuild @@ -11,6 +11,7 @@ generic-y += exec.h generic-y += extable.h generic-y += fb.h generic-y += hardirq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/mips/include/asm/Kbuild b/arch/mips/include/asm/Kbuild index 9a81e72119da..005ef04a4c73 100644 --- a/arch/mips/include/asm/Kbuild +++ b/arch/mips/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += device.h generic-y += dma-contiguous.h generic-y += emergency-restart.h generic-y += export.h +generic-y += initrd.h generic-y += irq_work.h generic-y += local64.h generic-y += mcs_spinlock.h diff --git a/arch/nds32/include/asm/Kbuild b/arch/nds32/include/asm/Kbuild index dbc4e5422550..1400aaf0c840 100644 --- a/arch/nds32/include/asm/Kbuild +++ b/arch/nds32/include/asm/Kbuild @@ -25,6 +25,7 @@ generic-y += ftrace.h generic-y += gpio.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += ioctl.h generic-y += ioctls.h generic-y += irq.h diff --git a/arch/nios2/include/asm/Kbuild b/arch/nios2/include/asm/Kbuild index 8fde4fa2c34f..d89de02549ee 100644 --- a/arch/nios2/include/asm/Kbuild +++ b/arch/nios2/include/asm/Kbuild @@ -18,6 +18,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/openrisc/include/asm/Kbuild b/arch/openrisc/include/asm/Kbuild index eb87cd8327c8..296fd55e8473 100644 --- a/arch/openrisc/include/asm/Kbuild +++ b/arch/openrisc/include/asm/Kbuild @@ -15,6 +15,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/parisc/include/asm/Kbuild b/arch/parisc/include/asm/Kbuild index 2013d639e735..1382d78a2477 100644 --- a/arch/parisc/include/asm/Kbuild +++ b/arch/parisc/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += exec.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/powerpc/include/asm/Kbuild b/arch/powerpc/include/asm/Kbuild index 3196d227e351..e3ea67c30605 100644 --- a/arch/powerpc/include/asm/Kbuild +++ b/arch/powerpc/include/asm/Kbuild @@ -1,5 +1,6 @@ generic-y += div64.h generic-y += export.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += local64.h diff --git a/arch/riscv/include/asm/Kbuild b/arch/riscv/include/asm/Kbuild index efdbe311e936..0e67ed69c423 100644 --- a/arch/riscv/include/asm/Kbuild +++ b/arch/riscv/include/asm/Kbuild @@ -17,6 +17,7 @@ generic-y += futex.h generic-y += hardirq.h generic-y += hash.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += ioctl.h generic-y += ioctls.h generic-y += ipcbuf.h diff --git a/arch/s390/include/asm/Kbuild b/arch/s390/include/asm/Kbuild index e3239772887a..dc618745d427 100644 --- a/arch/s390/include/asm/Kbuild +++ b/arch/s390/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += export.h generic-y += fb.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kmap_types.h diff --git a/arch/sh/include/asm/Kbuild b/arch/sh/include/asm/Kbuild index 6a5609a55965..c006a7cf3a43 100644 --- a/arch/sh/include/asm/Kbuild +++ b/arch/sh/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += dma-mapping.h generic-y += emergency-restart.h generic-y += exec.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += local.h diff --git a/arch/sparc/include/asm/Kbuild b/arch/sparc/include/asm/Kbuild index 410b263ef5c8..a5772c2a96c8 100644 --- a/arch/sparc/include/asm/Kbuild +++ b/arch/sparc/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += exec.h generic-y += export.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += linkage.h diff --git a/arch/um/include/asm/Kbuild b/arch/um/include/asm/Kbuild index b10dde6cb793..032cfe1b530b 100644 --- a/arch/um/include/asm/Kbuild +++ b/arch/um/include/asm/Kbuild @@ -12,6 +12,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += io.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/unicore32/include/asm/Kbuild b/arch/unicore32/include/asm/Kbuild index 1372553dc0a9..32e7dea45fcd 100644 --- a/arch/unicore32/include/asm/Kbuild +++ b/arch/unicore32/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/x86/include/asm/Kbuild b/arch/x86/include/asm/Kbuild index a0ab9ab61c75..290bd1c3ee2d 100644 --- a/arch/x86/include/asm/Kbuild +++ b/arch/x86/include/asm/Kbuild @@ -9,5 +9,6 @@ generated-y += xen-hypercalls.h generic-y += dma-contiguous.h generic-y += early_ioremap.h generic-y += export.h +generic-y += initrd.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/xtensa/include/asm/Kbuild b/arch/xtensa/include/asm/Kbuild index 82c756431b49..f2c363f2d22a 100644 --- a/arch/xtensa/include/asm/Kbuild +++ b/arch/xtensa/include/asm/Kbuild @@ -9,6 +9,7 @@ generic-y += exec.h generic-y += extable.h generic-y += fb.h generic-y += hardirq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/include/asm-generic/initrd.h b/include/asm-generic/initrd.h new file mode 100644 index 000000000000..40a8c178f10d --- /dev/null +++ b/include/asm-generic/initrd.h @@ -0,0 +1 @@ +/* empty */ -- 2.17.1 ^ permalink raw reply related [flat|nested] 168+ messages in thread
* [PATCH v2 1/2] arch: Add asm-generic/initrd.h and make use of it for most architectures @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-kernel Cc: open list:MIPS, open list:IA64 Itanium PLATFORM, open list:SUPERH, Catalin Marinas, Will Deacon, open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE, open list:SPARC + UltraSPARC sparc/sparc64, open list:RISC-V ARCHITECTURE, open list:GENERIC INCLUDE/ASM HEADER FILES, open list:S390, Florian Fainelli, open list:C6X ARCHITECTURE, open list:QUALCOMM HEXAGON ARCHITECTURE, open list:SYNOPSYS ARC ARCHITECTURE, moderated list:H8/300 ARCHITECTURE, open list:TENSILICA XTENSA PORT xtensa, Arnd Bergmann, Marc Zyngier, open list:USER-MODE LINUX UML, open list:M68K ARCHITECTURE, open list:OPENRISC ARCHITECTURE, moderated list:ARM PORT, open list:PARISC ARCHITECTURE, Greg Kroah-Hartman, open list:ALPHA PORT, Olof Johansson, moderated list:NIOS2 ARCHITECTURE, open list:LINUX FOR POWERPC 32-BIT AND 64-BIT In preparation for separating the definition of __early_init_dt_declare_initrd() on ARM64 in order to cut the amount of files that require a rebuild when CONFIG_BLK_DEV_INITRD value is changed, introduce an empty asm-generic initrd.h file and update all architectures but arm64 to make use of it. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- arch/alpha/include/asm/Kbuild | 1 + arch/arc/include/asm/Kbuild | 1 + arch/arm/include/asm/Kbuild | 1 + arch/c6x/include/asm/Kbuild | 1 + arch/h8300/include/asm/Kbuild | 1 + arch/hexagon/include/asm/Kbuild | 1 + arch/ia64/include/asm/Kbuild | 1 + arch/m68k/include/asm/Kbuild | 1 + arch/microblaze/include/asm/Kbuild | 1 + arch/mips/include/asm/Kbuild | 1 + arch/nds32/include/asm/Kbuild | 1 + arch/nios2/include/asm/Kbuild | 1 + arch/openrisc/include/asm/Kbuild | 1 + arch/parisc/include/asm/Kbuild | 1 + arch/powerpc/include/asm/Kbuild | 1 + arch/riscv/include/asm/Kbuild | 1 + arch/s390/include/asm/Kbuild | 1 + arch/sh/include/asm/Kbuild | 1 + arch/sparc/include/asm/Kbuild | 1 + arch/um/include/asm/Kbuild | 1 + arch/unicore32/include/asm/Kbuild | 1 + arch/x86/include/asm/Kbuild | 1 + arch/xtensa/include/asm/Kbuild | 1 + include/asm-generic/initrd.h | 1 + 24 files changed, 24 insertions(+) create mode 100644 include/asm-generic/initrd.h diff --git a/arch/alpha/include/asm/Kbuild b/arch/alpha/include/asm/Kbuild index 0580cb8c84b2..cd6f723aed1b 100644 --- a/arch/alpha/include/asm/Kbuild +++ b/arch/alpha/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += compat.h generic-y += exec.h generic-y += export.h generic-y += fb.h +generic-y += initrd.h generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/arc/include/asm/Kbuild b/arch/arc/include/asm/Kbuild index feed50ce89fa..ba18632aa493 100644 --- a/arch/arc/include/asm/Kbuild +++ b/arch/arc/include/asm/Kbuild @@ -10,6 +10,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kmap_types.h diff --git a/arch/arm/include/asm/Kbuild b/arch/arm/include/asm/Kbuild index 1d66db9c9db5..b91d5b32e64f 100644 --- a/arch/arm/include/asm/Kbuild +++ b/arch/arm/include/asm/Kbuild @@ -4,6 +4,7 @@ generic-y += early_ioremap.h generic-y += emergency-restart.h generic-y += exec.h generic-y += extable.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += kdebug.h generic-y += local.h diff --git a/arch/c6x/include/asm/Kbuild b/arch/c6x/include/asm/Kbuild index 33a2c94fed0d..9e14cf6e89b4 100644 --- a/arch/c6x/include/asm/Kbuild +++ b/arch/c6x/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += extable.h generic-y += fb.h generic-y += futex.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += io.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/h8300/include/asm/Kbuild b/arch/h8300/include/asm/Kbuild index a5d0b2991f47..7d4e06a757c8 100644 --- a/arch/h8300/include/asm/Kbuild +++ b/arch/h8300/include/asm/Kbuild @@ -19,6 +19,7 @@ generic-y += futex.h generic-y += hardirq.h generic-y += hash.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/hexagon/include/asm/Kbuild b/arch/hexagon/include/asm/Kbuild index 47c4da3d64a4..0be62abf2123 100644 --- a/arch/hexagon/include/asm/Kbuild +++ b/arch/hexagon/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += iomap.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/ia64/include/asm/Kbuild b/arch/ia64/include/asm/Kbuild index 557bbc8ba9f5..1a1f1e4ba0d5 100644 --- a/arch/ia64/include/asm/Kbuild +++ b/arch/ia64/include/asm/Kbuild @@ -1,5 +1,6 @@ generic-y += compat.h generic-y += exec.h +generic-y += initrd.h generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/m68k/include/asm/Kbuild b/arch/m68k/include/asm/Kbuild index a4b8d3331a9e..9903551e0c9c 100644 --- a/arch/m68k/include/asm/Kbuild +++ b/arch/m68k/include/asm/Kbuild @@ -7,6 +7,7 @@ generic-y += exec.h generic-y += extable.h generic-y += futex.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/microblaze/include/asm/Kbuild b/arch/microblaze/include/asm/Kbuild index 569ba9e670c1..ec37e6304be5 100644 --- a/arch/microblaze/include/asm/Kbuild +++ b/arch/microblaze/include/asm/Kbuild @@ -11,6 +11,7 @@ generic-y += exec.h generic-y += extable.h generic-y += fb.h generic-y += hardirq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/mips/include/asm/Kbuild b/arch/mips/include/asm/Kbuild index 9a81e72119da..005ef04a4c73 100644 --- a/arch/mips/include/asm/Kbuild +++ b/arch/mips/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += device.h generic-y += dma-contiguous.h generic-y += emergency-restart.h generic-y += export.h +generic-y += initrd.h generic-y += irq_work.h generic-y += local64.h generic-y += mcs_spinlock.h diff --git a/arch/nds32/include/asm/Kbuild b/arch/nds32/include/asm/Kbuild index dbc4e5422550..1400aaf0c840 100644 --- a/arch/nds32/include/asm/Kbuild +++ b/arch/nds32/include/asm/Kbuild @@ -25,6 +25,7 @@ generic-y += ftrace.h generic-y += gpio.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += ioctl.h generic-y += ioctls.h generic-y += irq.h diff --git a/arch/nios2/include/asm/Kbuild b/arch/nios2/include/asm/Kbuild index 8fde4fa2c34f..d89de02549ee 100644 --- a/arch/nios2/include/asm/Kbuild +++ b/arch/nios2/include/asm/Kbuild @@ -18,6 +18,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/openrisc/include/asm/Kbuild b/arch/openrisc/include/asm/Kbuild index eb87cd8327c8..296fd55e8473 100644 --- a/arch/openrisc/include/asm/Kbuild +++ b/arch/openrisc/include/asm/Kbuild @@ -15,6 +15,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/parisc/include/asm/Kbuild b/arch/parisc/include/asm/Kbuild index 2013d639e735..1382d78a2477 100644 --- a/arch/parisc/include/asm/Kbuild +++ b/arch/parisc/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += exec.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/powerpc/include/asm/Kbuild b/arch/powerpc/include/asm/Kbuild index 3196d227e351..e3ea67c30605 100644 --- a/arch/powerpc/include/asm/Kbuild +++ b/arch/powerpc/include/asm/Kbuild @@ -1,5 +1,6 @@ generic-y += div64.h generic-y += export.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += local64.h diff --git a/arch/riscv/include/asm/Kbuild b/arch/riscv/include/asm/Kbuild index efdbe311e936..0e67ed69c423 100644 --- a/arch/riscv/include/asm/Kbuild +++ b/arch/riscv/include/asm/Kbuild @@ -17,6 +17,7 @@ generic-y += futex.h generic-y += hardirq.h generic-y += hash.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += ioctl.h generic-y += ioctls.h generic-y += ipcbuf.h diff --git a/arch/s390/include/asm/Kbuild b/arch/s390/include/asm/Kbuild index e3239772887a..dc618745d427 100644 --- a/arch/s390/include/asm/Kbuild +++ b/arch/s390/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += export.h generic-y += fb.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kmap_types.h diff --git a/arch/sh/include/asm/Kbuild b/arch/sh/include/asm/Kbuild index 6a5609a55965..c006a7cf3a43 100644 --- a/arch/sh/include/asm/Kbuild +++ b/arch/sh/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += dma-mapping.h generic-y += emergency-restart.h generic-y += exec.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += local.h diff --git a/arch/sparc/include/asm/Kbuild b/arch/sparc/include/asm/Kbuild index 410b263ef5c8..a5772c2a96c8 100644 --- a/arch/sparc/include/asm/Kbuild +++ b/arch/sparc/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += exec.h generic-y += export.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += linkage.h diff --git a/arch/um/include/asm/Kbuild b/arch/um/include/asm/Kbuild index b10dde6cb793..032cfe1b530b 100644 --- a/arch/um/include/asm/Kbuild +++ b/arch/um/include/asm/Kbuild @@ -12,6 +12,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += io.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/unicore32/include/asm/Kbuild b/arch/unicore32/include/asm/Kbuild index 1372553dc0a9..32e7dea45fcd 100644 --- a/arch/unicore32/include/asm/Kbuild +++ b/arch/unicore32/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/x86/include/asm/Kbuild b/arch/x86/include/asm/Kbuild index a0ab9ab61c75..290bd1c3ee2d 100644 --- a/arch/x86/include/asm/Kbuild +++ b/arch/x86/include/asm/Kbuild @@ -9,5 +9,6 @@ generated-y += xen-hypercalls.h generic-y += dma-contiguous.h generic-y += early_ioremap.h generic-y += export.h +generic-y += initrd.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/xtensa/include/asm/Kbuild b/arch/xtensa/include/asm/Kbuild index 82c756431b49..f2c363f2d22a 100644 --- a/arch/xtensa/include/asm/Kbuild +++ b/arch/xtensa/include/asm/Kbuild @@ -9,6 +9,7 @@ generic-y += exec.h generic-y += extable.h generic-y += fb.h generic-y += hardirq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/include/asm-generic/initrd.h b/include/asm-generic/initrd.h new file mode 100644 index 000000000000..40a8c178f10d --- /dev/null +++ b/include/asm-generic/initrd.h @@ -0,0 +1 @@ +/* empty */ -- 2.17.1 ^ permalink raw reply related [flat|nested] 168+ messages in thread
* [PATCH v2 1/2] arch: Add asm-generic/initrd.h and make use of it for most architectures @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-kernel Cc: open list:MIPS, open list:IA64 Itanium PLATFORM, open list:SUPERH, Catalin Marinas, Will Deacon, open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE, open list:SPARC + UltraSPARC sparc/sparc64, open list:RISC-V ARCHITECTURE, open list:GENERIC INCLUDE/ASM HEADER FILES, open list:S390, Florian Fainelli, open list:C6X ARCHITECTURE, open list:QUALCOMM HEXAGON ARCHITECTURE, open list:SYNOPSYS ARC ARCHITECTURE, moderated list:H8/300 ARCHITECTURE, open list:TENSILICA XTENSA PORT xtensa, Arnd Bergmann, Marc Zyngier, open list:USER-MODE LINUX UML, open list:M68K ARCHITECTURE, open list:OPENRISC ARCHITECTURE, moderated list:ARM PORT, open list:PARISC ARCHITECTURE, Greg Kroah-Hartman, open list:ALPHA PORT, Olof Johansson, moderated list:NIOS2 ARCHITECTURE, open list:LINUX FOR POWERPC 32-BIT AND 64-BIT In preparation for separating the definition of __early_init_dt_declare_initrd() on ARM64 in order to cut the amount of files that require a rebuild when CONFIG_BLK_DEV_INITRD value is changed, introduce an empty asm-generic initrd.h file and update all architectures but arm64 to make use of it. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- arch/alpha/include/asm/Kbuild | 1 + arch/arc/include/asm/Kbuild | 1 + arch/arm/include/asm/Kbuild | 1 + arch/c6x/include/asm/Kbuild | 1 + arch/h8300/include/asm/Kbuild | 1 + arch/hexagon/include/asm/Kbuild | 1 + arch/ia64/include/asm/Kbuild | 1 + arch/m68k/include/asm/Kbuild | 1 + arch/microblaze/include/asm/Kbuild | 1 + arch/mips/include/asm/Kbuild | 1 + arch/nds32/include/asm/Kbuild | 1 + arch/nios2/include/asm/Kbuild | 1 + arch/openrisc/include/asm/Kbuild | 1 + arch/parisc/include/asm/Kbuild | 1 + arch/powerpc/include/asm/Kbuild | 1 + arch/riscv/include/asm/Kbuild | 1 + arch/s390/include/asm/Kbuild | 1 + arch/sh/include/asm/Kbuild | 1 + arch/sparc/include/asm/Kbuild | 1 + arch/um/include/asm/Kbuild | 1 + arch/unicore32/include/asm/Kbuild | 1 + arch/x86/include/asm/Kbuild | 1 + arch/xtensa/include/asm/Kbuild | 1 + include/asm-generic/initrd.h | 1 + 24 files changed, 24 insertions(+) create mode 100644 include/asm-generic/initrd.h diff --git a/arch/alpha/include/asm/Kbuild b/arch/alpha/include/asm/Kbuild index 0580cb8c84b2..cd6f723aed1b 100644 --- a/arch/alpha/include/asm/Kbuild +++ b/arch/alpha/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += compat.h generic-y += exec.h generic-y += export.h generic-y += fb.h +generic-y += initrd.h generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/arc/include/asm/Kbuild b/arch/arc/include/asm/Kbuild index feed50ce89fa..ba18632aa493 100644 --- a/arch/arc/include/asm/Kbuild +++ b/arch/arc/include/asm/Kbuild @@ -10,6 +10,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kmap_types.h diff --git a/arch/arm/include/asm/Kbuild b/arch/arm/include/asm/Kbuild index 1d66db9c9db5..b91d5b32e64f 100644 --- a/arch/arm/include/asm/Kbuild +++ b/arch/arm/include/asm/Kbuild @@ -4,6 +4,7 @@ generic-y += early_ioremap.h generic-y += emergency-restart.h generic-y += exec.h generic-y += extable.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += kdebug.h generic-y += local.h diff --git a/arch/c6x/include/asm/Kbuild b/arch/c6x/include/asm/Kbuild index 33a2c94fed0d..9e14cf6e89b4 100644 --- a/arch/c6x/include/asm/Kbuild +++ b/arch/c6x/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += extable.h generic-y += fb.h generic-y += futex.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += io.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/h8300/include/asm/Kbuild b/arch/h8300/include/asm/Kbuild index a5d0b2991f47..7d4e06a757c8 100644 --- a/arch/h8300/include/asm/Kbuild +++ b/arch/h8300/include/asm/Kbuild @@ -19,6 +19,7 @@ generic-y += futex.h generic-y += hardirq.h generic-y += hash.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/hexagon/include/asm/Kbuild b/arch/hexagon/include/asm/Kbuild index 47c4da3d64a4..0be62abf2123 100644 --- a/arch/hexagon/include/asm/Kbuild +++ b/arch/hexagon/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += iomap.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/ia64/include/asm/Kbuild b/arch/ia64/include/asm/Kbuild index 557bbc8ba9f5..1a1f1e4ba0d5 100644 --- a/arch/ia64/include/asm/Kbuild +++ b/arch/ia64/include/asm/Kbuild @@ -1,5 +1,6 @@ generic-y += compat.h generic-y += exec.h +generic-y += initrd.h generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/m68k/include/asm/Kbuild b/arch/m68k/include/asm/Kbuild index a4b8d3331a9e..9903551e0c9c 100644 --- a/arch/m68k/include/asm/Kbuild +++ b/arch/m68k/include/asm/Kbuild @@ -7,6 +7,7 @@ generic-y += exec.h generic-y += extable.h generic-y += futex.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/microblaze/include/asm/Kbuild b/arch/microblaze/include/asm/Kbuild index 569ba9e670c1..ec37e6304be5 100644 --- a/arch/microblaze/include/asm/Kbuild +++ b/arch/microblaze/include/asm/Kbuild @@ -11,6 +11,7 @@ generic-y += exec.h generic-y += extable.h generic-y += fb.h generic-y += hardirq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/mips/include/asm/Kbuild b/arch/mips/include/asm/Kbuild index 9a81e72119da..005ef04a4c73 100644 --- a/arch/mips/include/asm/Kbuild +++ b/arch/mips/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += device.h generic-y += dma-contiguous.h generic-y += emergency-restart.h generic-y += export.h +generic-y += initrd.h generic-y += irq_work.h generic-y += local64.h generic-y += mcs_spinlock.h diff --git a/arch/nds32/include/asm/Kbuild b/arch/nds32/include/asm/Kbuild index dbc4e5422550..1400aaf0c840 100644 --- a/arch/nds32/include/asm/Kbuild +++ b/arch/nds32/include/asm/Kbuild @@ -25,6 +25,7 @@ generic-y += ftrace.h generic-y += gpio.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += ioctl.h generic-y += ioctls.h generic-y += irq.h diff --git a/arch/nios2/include/asm/Kbuild b/arch/nios2/include/asm/Kbuild index 8fde4fa2c34f..d89de02549ee 100644 --- a/arch/nios2/include/asm/Kbuild +++ b/arch/nios2/include/asm/Kbuild @@ -18,6 +18,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/openrisc/include/asm/Kbuild b/arch/openrisc/include/asm/Kbuild index eb87cd8327c8..296fd55e8473 100644 --- a/arch/openrisc/include/asm/Kbuild +++ b/arch/openrisc/include/asm/Kbuild @@ -15,6 +15,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/parisc/include/asm/Kbuild b/arch/parisc/include/asm/Kbuild index 2013d639e735..1382d78a2477 100644 --- a/arch/parisc/include/asm/Kbuild +++ b/arch/parisc/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += exec.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/powerpc/include/asm/Kbuild b/arch/powerpc/include/asm/Kbuild index 3196d227e351..e3ea67c30605 100644 --- a/arch/powerpc/include/asm/Kbuild +++ b/arch/powerpc/include/asm/Kbuild @@ -1,5 +1,6 @@ generic-y += div64.h generic-y += export.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += local64.h diff --git a/arch/riscv/include/asm/Kbuild b/arch/riscv/include/asm/Kbuild index efdbe311e936..0e67ed69c423 100644 --- a/arch/riscv/include/asm/Kbuild +++ b/arch/riscv/include/asm/Kbuild @@ -17,6 +17,7 @@ generic-y += futex.h generic-y += hardirq.h generic-y += hash.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += ioctl.h generic-y += ioctls.h generic-y += ipcbuf.h diff --git a/arch/s390/include/asm/Kbuild b/arch/s390/include/asm/Kbuild index e3239772887a..dc618745d427 100644 --- a/arch/s390/include/asm/Kbuild +++ b/arch/s390/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += export.h generic-y += fb.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kmap_types.h diff --git a/arch/sh/include/asm/Kbuild b/arch/sh/include/asm/Kbuild index 6a5609a55965..c006a7cf3a43 100644 --- a/arch/sh/include/asm/Kbuild +++ b/arch/sh/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += dma-mapping.h generic-y += emergency-restart.h generic-y += exec.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += local.h diff --git a/arch/sparc/include/asm/Kbuild b/arch/sparc/include/asm/Kbuild index 410b263ef5c8..a5772c2a96c8 100644 --- a/arch/sparc/include/asm/Kbuild +++ b/arch/sparc/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += exec.h generic-y += export.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += linkage.h diff --git a/arch/um/include/asm/Kbuild b/arch/um/include/asm/Kbuild index b10dde6cb793..032cfe1b530b 100644 --- a/arch/um/include/asm/Kbuild +++ b/arch/um/include/asm/Kbuild @@ -12,6 +12,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += io.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/unicore32/include/asm/Kbuild b/arch/unicore32/include/asm/Kbuild index 1372553dc0a9..32e7dea45fcd 100644 --- a/arch/unicore32/include/asm/Kbuild +++ b/arch/unicore32/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/x86/include/asm/Kbuild b/arch/x86/include/asm/Kbuild index a0ab9ab61c75..290bd1c3ee2d 100644 --- a/arch/x86/include/asm/Kbuild +++ b/arch/x86/include/asm/Kbuild @@ -9,5 +9,6 @@ generated-y += xen-hypercalls.h generic-y += dma-contiguous.h generic-y += early_ioremap.h generic-y += export.h +generic-y += initrd.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/xtensa/include/asm/Kbuild b/arch/xtensa/include/asm/Kbuild index 82c756431b49..f2c363f2d22a 100644 --- a/arch/xtensa/include/asm/Kbuild +++ b/arch/xtensa/include/asm/Kbuild @@ -9,6 +9,7 @@ generic-y += exec.h generic-y += extable.h generic-y += fb.h generic-y += hardirq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/include/asm-generic/initrd.h b/include/asm-generic/initrd.h new file mode 100644 index 000000000000..40a8c178f10d --- /dev/null +++ b/include/asm-generic/initrd.h @@ -0,0 +1 @@ +/* empty */ -- 2.17.1 _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply related [flat|nested] 168+ messages in thread
* [PATCH v2 1/2] arch: Add asm-generic/initrd.h and make use of it for most architectures @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-riscv In preparation for separating the definition of __early_init_dt_declare_initrd() on ARM64 in order to cut the amount of files that require a rebuild when CONFIG_BLK_DEV_INITRD value is changed, introduce an empty asm-generic initrd.h file and update all architectures but arm64 to make use of it. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- arch/alpha/include/asm/Kbuild | 1 + arch/arc/include/asm/Kbuild | 1 + arch/arm/include/asm/Kbuild | 1 + arch/c6x/include/asm/Kbuild | 1 + arch/h8300/include/asm/Kbuild | 1 + arch/hexagon/include/asm/Kbuild | 1 + arch/ia64/include/asm/Kbuild | 1 + arch/m68k/include/asm/Kbuild | 1 + arch/microblaze/include/asm/Kbuild | 1 + arch/mips/include/asm/Kbuild | 1 + arch/nds32/include/asm/Kbuild | 1 + arch/nios2/include/asm/Kbuild | 1 + arch/openrisc/include/asm/Kbuild | 1 + arch/parisc/include/asm/Kbuild | 1 + arch/powerpc/include/asm/Kbuild | 1 + arch/riscv/include/asm/Kbuild | 1 + arch/s390/include/asm/Kbuild | 1 + arch/sh/include/asm/Kbuild | 1 + arch/sparc/include/asm/Kbuild | 1 + arch/um/include/asm/Kbuild | 1 + arch/unicore32/include/asm/Kbuild | 1 + arch/x86/include/asm/Kbuild | 1 + arch/xtensa/include/asm/Kbuild | 1 + include/asm-generic/initrd.h | 1 + 24 files changed, 24 insertions(+) create mode 100644 include/asm-generic/initrd.h diff --git a/arch/alpha/include/asm/Kbuild b/arch/alpha/include/asm/Kbuild index 0580cb8c84b2..cd6f723aed1b 100644 --- a/arch/alpha/include/asm/Kbuild +++ b/arch/alpha/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += compat.h generic-y += exec.h generic-y += export.h generic-y += fb.h +generic-y += initrd.h generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/arc/include/asm/Kbuild b/arch/arc/include/asm/Kbuild index feed50ce89fa..ba18632aa493 100644 --- a/arch/arc/include/asm/Kbuild +++ b/arch/arc/include/asm/Kbuild @@ -10,6 +10,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kmap_types.h diff --git a/arch/arm/include/asm/Kbuild b/arch/arm/include/asm/Kbuild index 1d66db9c9db5..b91d5b32e64f 100644 --- a/arch/arm/include/asm/Kbuild +++ b/arch/arm/include/asm/Kbuild @@ -4,6 +4,7 @@ generic-y += early_ioremap.h generic-y += emergency-restart.h generic-y += exec.h generic-y += extable.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += kdebug.h generic-y += local.h diff --git a/arch/c6x/include/asm/Kbuild b/arch/c6x/include/asm/Kbuild index 33a2c94fed0d..9e14cf6e89b4 100644 --- a/arch/c6x/include/asm/Kbuild +++ b/arch/c6x/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += extable.h generic-y += fb.h generic-y += futex.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += io.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/h8300/include/asm/Kbuild b/arch/h8300/include/asm/Kbuild index a5d0b2991f47..7d4e06a757c8 100644 --- a/arch/h8300/include/asm/Kbuild +++ b/arch/h8300/include/asm/Kbuild @@ -19,6 +19,7 @@ generic-y += futex.h generic-y += hardirq.h generic-y += hash.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/hexagon/include/asm/Kbuild b/arch/hexagon/include/asm/Kbuild index 47c4da3d64a4..0be62abf2123 100644 --- a/arch/hexagon/include/asm/Kbuild +++ b/arch/hexagon/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += iomap.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/ia64/include/asm/Kbuild b/arch/ia64/include/asm/Kbuild index 557bbc8ba9f5..1a1f1e4ba0d5 100644 --- a/arch/ia64/include/asm/Kbuild +++ b/arch/ia64/include/asm/Kbuild @@ -1,5 +1,6 @@ generic-y += compat.h generic-y += exec.h +generic-y += initrd.h generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/m68k/include/asm/Kbuild b/arch/m68k/include/asm/Kbuild index a4b8d3331a9e..9903551e0c9c 100644 --- a/arch/m68k/include/asm/Kbuild +++ b/arch/m68k/include/asm/Kbuild @@ -7,6 +7,7 @@ generic-y += exec.h generic-y += extable.h generic-y += futex.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/microblaze/include/asm/Kbuild b/arch/microblaze/include/asm/Kbuild index 569ba9e670c1..ec37e6304be5 100644 --- a/arch/microblaze/include/asm/Kbuild +++ b/arch/microblaze/include/asm/Kbuild @@ -11,6 +11,7 @@ generic-y += exec.h generic-y += extable.h generic-y += fb.h generic-y += hardirq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/mips/include/asm/Kbuild b/arch/mips/include/asm/Kbuild index 9a81e72119da..005ef04a4c73 100644 --- a/arch/mips/include/asm/Kbuild +++ b/arch/mips/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += device.h generic-y += dma-contiguous.h generic-y += emergency-restart.h generic-y += export.h +generic-y += initrd.h generic-y += irq_work.h generic-y += local64.h generic-y += mcs_spinlock.h diff --git a/arch/nds32/include/asm/Kbuild b/arch/nds32/include/asm/Kbuild index dbc4e5422550..1400aaf0c840 100644 --- a/arch/nds32/include/asm/Kbuild +++ b/arch/nds32/include/asm/Kbuild @@ -25,6 +25,7 @@ generic-y += ftrace.h generic-y += gpio.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += ioctl.h generic-y += ioctls.h generic-y += irq.h diff --git a/arch/nios2/include/asm/Kbuild b/arch/nios2/include/asm/Kbuild index 8fde4fa2c34f..d89de02549ee 100644 --- a/arch/nios2/include/asm/Kbuild +++ b/arch/nios2/include/asm/Kbuild @@ -18,6 +18,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/openrisc/include/asm/Kbuild b/arch/openrisc/include/asm/Kbuild index eb87cd8327c8..296fd55e8473 100644 --- a/arch/openrisc/include/asm/Kbuild +++ b/arch/openrisc/include/asm/Kbuild @@ -15,6 +15,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/parisc/include/asm/Kbuild b/arch/parisc/include/asm/Kbuild index 2013d639e735..1382d78a2477 100644 --- a/arch/parisc/include/asm/Kbuild +++ b/arch/parisc/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += exec.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/powerpc/include/asm/Kbuild b/arch/powerpc/include/asm/Kbuild index 3196d227e351..e3ea67c30605 100644 --- a/arch/powerpc/include/asm/Kbuild +++ b/arch/powerpc/include/asm/Kbuild @@ -1,5 +1,6 @@ generic-y += div64.h generic-y += export.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += local64.h diff --git a/arch/riscv/include/asm/Kbuild b/arch/riscv/include/asm/Kbuild index efdbe311e936..0e67ed69c423 100644 --- a/arch/riscv/include/asm/Kbuild +++ b/arch/riscv/include/asm/Kbuild @@ -17,6 +17,7 @@ generic-y += futex.h generic-y += hardirq.h generic-y += hash.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += ioctl.h generic-y += ioctls.h generic-y += ipcbuf.h diff --git a/arch/s390/include/asm/Kbuild b/arch/s390/include/asm/Kbuild index e3239772887a..dc618745d427 100644 --- a/arch/s390/include/asm/Kbuild +++ b/arch/s390/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += export.h generic-y += fb.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kmap_types.h diff --git a/arch/sh/include/asm/Kbuild b/arch/sh/include/asm/Kbuild index 6a5609a55965..c006a7cf3a43 100644 --- a/arch/sh/include/asm/Kbuild +++ b/arch/sh/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += dma-mapping.h generic-y += emergency-restart.h generic-y += exec.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += local.h diff --git a/arch/sparc/include/asm/Kbuild b/arch/sparc/include/asm/Kbuild index 410b263ef5c8..a5772c2a96c8 100644 --- a/arch/sparc/include/asm/Kbuild +++ b/arch/sparc/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += exec.h generic-y += export.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += linkage.h diff --git a/arch/um/include/asm/Kbuild b/arch/um/include/asm/Kbuild index b10dde6cb793..032cfe1b530b 100644 --- a/arch/um/include/asm/Kbuild +++ b/arch/um/include/asm/Kbuild @@ -12,6 +12,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += io.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/unicore32/include/asm/Kbuild b/arch/unicore32/include/asm/Kbuild index 1372553dc0a9..32e7dea45fcd 100644 --- a/arch/unicore32/include/asm/Kbuild +++ b/arch/unicore32/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/x86/include/asm/Kbuild b/arch/x86/include/asm/Kbuild index a0ab9ab61c75..290bd1c3ee2d 100644 --- a/arch/x86/include/asm/Kbuild +++ b/arch/x86/include/asm/Kbuild @@ -9,5 +9,6 @@ generated-y += xen-hypercalls.h generic-y += dma-contiguous.h generic-y += early_ioremap.h generic-y += export.h +generic-y += initrd.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/xtensa/include/asm/Kbuild b/arch/xtensa/include/asm/Kbuild index 82c756431b49..f2c363f2d22a 100644 --- a/arch/xtensa/include/asm/Kbuild +++ b/arch/xtensa/include/asm/Kbuild @@ -9,6 +9,7 @@ generic-y += exec.h generic-y += extable.h generic-y += fb.h generic-y += hardirq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/include/asm-generic/initrd.h b/include/asm-generic/initrd.h new file mode 100644 index 000000000000..40a8c178f10d --- /dev/null +++ b/include/asm-generic/initrd.h @@ -0,0 +1 @@ +/* empty */ -- 2.17.1 ^ permalink raw reply related [flat|nested] 168+ messages in thread
* [PATCH v2 1/2] arch: Add asm-generic/initrd.h and make use of it for most architectures @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-kernel Cc: Florian Fainelli, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, open list:ALPHA PORT, open list:SYNOPSYS ARC ARCHITECTURE, moderated list:ARM PORT, open list:C6X ARCHITECTURE, moderated list:H8/300 ARCHITECTURE, open list:QUALCOMM HEXAGON ARCHITECTURE, open list:IA64 Itanium PLATFORM, open list:M68 In preparation for separating the definition of __early_init_dt_declare_initrd() on ARM64 in order to cut the amount of files that require a rebuild when CONFIG_BLK_DEV_INITRD value is changed, introduce an empty asm-generic initrd.h file and update all architectures but arm64 to make use of it. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- arch/alpha/include/asm/Kbuild | 1 + arch/arc/include/asm/Kbuild | 1 + arch/arm/include/asm/Kbuild | 1 + arch/c6x/include/asm/Kbuild | 1 + arch/h8300/include/asm/Kbuild | 1 + arch/hexagon/include/asm/Kbuild | 1 + arch/ia64/include/asm/Kbuild | 1 + arch/m68k/include/asm/Kbuild | 1 + arch/microblaze/include/asm/Kbuild | 1 + arch/mips/include/asm/Kbuild | 1 + arch/nds32/include/asm/Kbuild | 1 + arch/nios2/include/asm/Kbuild | 1 + arch/openrisc/include/asm/Kbuild | 1 + arch/parisc/include/asm/Kbuild | 1 + arch/powerpc/include/asm/Kbuild | 1 + arch/riscv/include/asm/Kbuild | 1 + arch/s390/include/asm/Kbuild | 1 + arch/sh/include/asm/Kbuild | 1 + arch/sparc/include/asm/Kbuild | 1 + arch/um/include/asm/Kbuild | 1 + arch/unicore32/include/asm/Kbuild | 1 + arch/x86/include/asm/Kbuild | 1 + arch/xtensa/include/asm/Kbuild | 1 + include/asm-generic/initrd.h | 1 + 24 files changed, 24 insertions(+) create mode 100644 include/asm-generic/initrd.h diff --git a/arch/alpha/include/asm/Kbuild b/arch/alpha/include/asm/Kbuild index 0580cb8c84b2..cd6f723aed1b 100644 --- a/arch/alpha/include/asm/Kbuild +++ b/arch/alpha/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += compat.h generic-y += exec.h generic-y += export.h generic-y += fb.h +generic-y += initrd.h generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/arc/include/asm/Kbuild b/arch/arc/include/asm/Kbuild index feed50ce89fa..ba18632aa493 100644 --- a/arch/arc/include/asm/Kbuild +++ b/arch/arc/include/asm/Kbuild @@ -10,6 +10,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kmap_types.h diff --git a/arch/arm/include/asm/Kbuild b/arch/arm/include/asm/Kbuild index 1d66db9c9db5..b91d5b32e64f 100644 --- a/arch/arm/include/asm/Kbuild +++ b/arch/arm/include/asm/Kbuild @@ -4,6 +4,7 @@ generic-y += early_ioremap.h generic-y += emergency-restart.h generic-y += exec.h generic-y += extable.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += kdebug.h generic-y += local.h diff --git a/arch/c6x/include/asm/Kbuild b/arch/c6x/include/asm/Kbuild index 33a2c94fed0d..9e14cf6e89b4 100644 --- a/arch/c6x/include/asm/Kbuild +++ b/arch/c6x/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += extable.h generic-y += fb.h generic-y += futex.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += io.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/h8300/include/asm/Kbuild b/arch/h8300/include/asm/Kbuild index a5d0b2991f47..7d4e06a757c8 100644 --- a/arch/h8300/include/asm/Kbuild +++ b/arch/h8300/include/asm/Kbuild @@ -19,6 +19,7 @@ generic-y += futex.h generic-y += hardirq.h generic-y += hash.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/hexagon/include/asm/Kbuild b/arch/hexagon/include/asm/Kbuild index 47c4da3d64a4..0be62abf2123 100644 --- a/arch/hexagon/include/asm/Kbuild +++ b/arch/hexagon/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += iomap.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/ia64/include/asm/Kbuild b/arch/ia64/include/asm/Kbuild index 557bbc8ba9f5..1a1f1e4ba0d5 100644 --- a/arch/ia64/include/asm/Kbuild +++ b/arch/ia64/include/asm/Kbuild @@ -1,5 +1,6 @@ generic-y += compat.h generic-y += exec.h +generic-y += initrd.h generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/m68k/include/asm/Kbuild b/arch/m68k/include/asm/Kbuild index a4b8d3331a9e..9903551e0c9c 100644 --- a/arch/m68k/include/asm/Kbuild +++ b/arch/m68k/include/asm/Kbuild @@ -7,6 +7,7 @@ generic-y += exec.h generic-y += extable.h generic-y += futex.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/microblaze/include/asm/Kbuild b/arch/microblaze/include/asm/Kbuild index 569ba9e670c1..ec37e6304be5 100644 --- a/arch/microblaze/include/asm/Kbuild +++ b/arch/microblaze/include/asm/Kbuild @@ -11,6 +11,7 @@ generic-y += exec.h generic-y += extable.h generic-y += fb.h generic-y += hardirq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/mips/include/asm/Kbuild b/arch/mips/include/asm/Kbuild index 9a81e72119da..005ef04a4c73 100644 --- a/arch/mips/include/asm/Kbuild +++ b/arch/mips/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += device.h generic-y += dma-contiguous.h generic-y += emergency-restart.h generic-y += export.h +generic-y += initrd.h generic-y += irq_work.h generic-y += local64.h generic-y += mcs_spinlock.h diff --git a/arch/nds32/include/asm/Kbuild b/arch/nds32/include/asm/Kbuild index dbc4e5422550..1400aaf0c840 100644 --- a/arch/nds32/include/asm/Kbuild +++ b/arch/nds32/include/asm/Kbuild @@ -25,6 +25,7 @@ generic-y += ftrace.h generic-y += gpio.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += ioctl.h generic-y += ioctls.h generic-y += irq.h diff --git a/arch/nios2/include/asm/Kbuild b/arch/nios2/include/asm/Kbuild index 8fde4fa2c34f..d89de02549ee 100644 --- a/arch/nios2/include/asm/Kbuild +++ b/arch/nios2/include/asm/Kbuild @@ -18,6 +18,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/openrisc/include/asm/Kbuild b/arch/openrisc/include/asm/Kbuild index eb87cd8327c8..296fd55e8473 100644 --- a/arch/openrisc/include/asm/Kbuild +++ b/arch/openrisc/include/asm/Kbuild @@ -15,6 +15,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/parisc/include/asm/Kbuild b/arch/parisc/include/asm/Kbuild index 2013d639e735..1382d78a2477 100644 --- a/arch/parisc/include/asm/Kbuild +++ b/arch/parisc/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += exec.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/powerpc/include/asm/Kbuild b/arch/powerpc/include/asm/Kbuild index 3196d227e351..e3ea67c30605 100644 --- a/arch/powerpc/include/asm/Kbuild +++ b/arch/powerpc/include/asm/Kbuild @@ -1,5 +1,6 @@ generic-y += div64.h generic-y += export.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += local64.h diff --git a/arch/riscv/include/asm/Kbuild b/arch/riscv/include/asm/Kbuild index efdbe311e936..0e67ed69c423 100644 --- a/arch/riscv/include/asm/Kbuild +++ b/arch/riscv/include/asm/Kbuild @@ -17,6 +17,7 @@ generic-y += futex.h generic-y += hardirq.h generic-y += hash.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += ioctl.h generic-y += ioctls.h generic-y += ipcbuf.h diff --git a/arch/s390/include/asm/Kbuild b/arch/s390/include/asm/Kbuild index e3239772887a..dc618745d427 100644 --- a/arch/s390/include/asm/Kbuild +++ b/arch/s390/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += export.h generic-y += fb.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kmap_types.h diff --git a/arch/sh/include/asm/Kbuild b/arch/sh/include/asm/Kbuild index 6a5609a55965..c006a7cf3a43 100644 --- a/arch/sh/include/asm/Kbuild +++ b/arch/sh/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += dma-mapping.h generic-y += emergency-restart.h generic-y += exec.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += local.h diff --git a/arch/sparc/include/asm/Kbuild b/arch/sparc/include/asm/Kbuild index 410b263ef5c8..a5772c2a96c8 100644 --- a/arch/sparc/include/asm/Kbuild +++ b/arch/sparc/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += exec.h generic-y += export.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += linkage.h diff --git a/arch/um/include/asm/Kbuild b/arch/um/include/asm/Kbuild index b10dde6cb793..032cfe1b530b 100644 --- a/arch/um/include/asm/Kbuild +++ b/arch/um/include/asm/Kbuild @@ -12,6 +12,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += io.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/unicore32/include/asm/Kbuild b/arch/unicore32/include/asm/Kbuild index 1372553dc0a9..32e7dea45fcd 100644 --- a/arch/unicore32/include/asm/Kbuild +++ b/arch/unicore32/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/x86/include/asm/Kbuild b/arch/x86/include/asm/Kbuild index a0ab9ab61c75..290bd1c3ee2d 100644 --- a/arch/x86/include/asm/Kbuild +++ b/arch/x86/include/asm/Kbuild @@ -9,5 +9,6 @@ generated-y += xen-hypercalls.h generic-y += dma-contiguous.h generic-y += early_ioremap.h generic-y += export.h +generic-y += initrd.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/xtensa/include/asm/Kbuild b/arch/xtensa/include/asm/Kbuild index 82c756431b49..f2c363f2d22a 100644 --- a/arch/xtensa/include/asm/Kbuild +++ b/arch/xtensa/include/asm/Kbuild @@ -9,6 +9,7 @@ generic-y += exec.h generic-y += extable.h generic-y += fb.h generic-y += hardirq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/include/asm-generic/initrd.h b/include/asm-generic/initrd.h new file mode 100644 index 000000000000..40a8c178f10d --- /dev/null +++ b/include/asm-generic/initrd.h @@ -0,0 +1 @@ +/* empty */ -- 2.17.1 ^ permalink raw reply related [flat|nested] 168+ messages in thread
* [PATCH v2 1/2] arch: Add asm-generic/initrd.h and make use of it for most architectures @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-kernel Cc: Florian Fainelli, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, open list:ALPHA PORT, open list:SYNOPSYS ARC ARCHITECTURE, moderated list:ARM PORT, open list:C6X ARCHITECTURE, moderated list:H8/300 ARCHITECTURE, open list:QUALCOMM HEXAGON ARCHITECTURE, open list:IA64 Itanium PLATFORM, open list:M68K ARCHITECTURE, open list:MIPS, moderated list:NIOS2 ARCHITECTURE, open list:OPENRISC ARCHITECTURE, open list:PARISC ARCHITECTURE, open list:LINUX FOR POWERPC 32-BIT AND 64-BIT, open list:RISC-V ARCHITECTURE, open list:S390, open list:SUPERH, open list:SPARC + UltraSPARC sparc/sparc64, open list:USER-MODE LINUX UML, open list:TENSILICA XTENSA PORT xtensa, open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE, open list:GENERIC INCLUDE/ASM HEADER FILES In preparation for separating the definition of __early_init_dt_declare_initrd() on ARM64 in order to cut the amount of files that require a rebuild when CONFIG_BLK_DEV_INITRD value is changed, introduce an empty asm-generic initrd.h file and update all architectures but arm64 to make use of it. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- arch/alpha/include/asm/Kbuild | 1 + arch/arc/include/asm/Kbuild | 1 + arch/arm/include/asm/Kbuild | 1 + arch/c6x/include/asm/Kbuild | 1 + arch/h8300/include/asm/Kbuild | 1 + arch/hexagon/include/asm/Kbuild | 1 + arch/ia64/include/asm/Kbuild | 1 + arch/m68k/include/asm/Kbuild | 1 + arch/microblaze/include/asm/Kbuild | 1 + arch/mips/include/asm/Kbuild | 1 + arch/nds32/include/asm/Kbuild | 1 + arch/nios2/include/asm/Kbuild | 1 + arch/openrisc/include/asm/Kbuild | 1 + arch/parisc/include/asm/Kbuild | 1 + arch/powerpc/include/asm/Kbuild | 1 + arch/riscv/include/asm/Kbuild | 1 + arch/s390/include/asm/Kbuild | 1 + arch/sh/include/asm/Kbuild | 1 + arch/sparc/include/asm/Kbuild | 1 + arch/um/include/asm/Kbuild | 1 + arch/unicore32/include/asm/Kbuild | 1 + arch/x86/include/asm/Kbuild | 1 + arch/xtensa/include/asm/Kbuild | 1 + include/asm-generic/initrd.h | 1 + 24 files changed, 24 insertions(+) create mode 100644 include/asm-generic/initrd.h diff --git a/arch/alpha/include/asm/Kbuild b/arch/alpha/include/asm/Kbuild index 0580cb8c84b2..cd6f723aed1b 100644 --- a/arch/alpha/include/asm/Kbuild +++ b/arch/alpha/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += compat.h generic-y += exec.h generic-y += export.h generic-y += fb.h +generic-y += initrd.h generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/arc/include/asm/Kbuild b/arch/arc/include/asm/Kbuild index feed50ce89fa..ba18632aa493 100644 --- a/arch/arc/include/asm/Kbuild +++ b/arch/arc/include/asm/Kbuild @@ -10,6 +10,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kmap_types.h diff --git a/arch/arm/include/asm/Kbuild b/arch/arm/include/asm/Kbuild index 1d66db9c9db5..b91d5b32e64f 100644 --- a/arch/arm/include/asm/Kbuild +++ b/arch/arm/include/asm/Kbuild @@ -4,6 +4,7 @@ generic-y += early_ioremap.h generic-y += emergency-restart.h generic-y += exec.h generic-y += extable.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += kdebug.h generic-y += local.h diff --git a/arch/c6x/include/asm/Kbuild b/arch/c6x/include/asm/Kbuild index 33a2c94fed0d..9e14cf6e89b4 100644 --- a/arch/c6x/include/asm/Kbuild +++ b/arch/c6x/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += extable.h generic-y += fb.h generic-y += futex.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += io.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/h8300/include/asm/Kbuild b/arch/h8300/include/asm/Kbuild index a5d0b2991f47..7d4e06a757c8 100644 --- a/arch/h8300/include/asm/Kbuild +++ b/arch/h8300/include/asm/Kbuild @@ -19,6 +19,7 @@ generic-y += futex.h generic-y += hardirq.h generic-y += hash.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/hexagon/include/asm/Kbuild b/arch/hexagon/include/asm/Kbuild index 47c4da3d64a4..0be62abf2123 100644 --- a/arch/hexagon/include/asm/Kbuild +++ b/arch/hexagon/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += iomap.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/ia64/include/asm/Kbuild b/arch/ia64/include/asm/Kbuild index 557bbc8ba9f5..1a1f1e4ba0d5 100644 --- a/arch/ia64/include/asm/Kbuild +++ b/arch/ia64/include/asm/Kbuild @@ -1,5 +1,6 @@ generic-y += compat.h generic-y += exec.h +generic-y += initrd.h generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/m68k/include/asm/Kbuild b/arch/m68k/include/asm/Kbuild index a4b8d3331a9e..9903551e0c9c 100644 --- a/arch/m68k/include/asm/Kbuild +++ b/arch/m68k/include/asm/Kbuild @@ -7,6 +7,7 @@ generic-y += exec.h generic-y += extable.h generic-y += futex.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/microblaze/include/asm/Kbuild b/arch/microblaze/include/asm/Kbuild index 569ba9e670c1..ec37e6304be5 100644 --- a/arch/microblaze/include/asm/Kbuild +++ b/arch/microblaze/include/asm/Kbuild @@ -11,6 +11,7 @@ generic-y += exec.h generic-y += extable.h generic-y += fb.h generic-y += hardirq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/mips/include/asm/Kbuild b/arch/mips/include/asm/Kbuild index 9a81e72119da..005ef04a4c73 100644 --- a/arch/mips/include/asm/Kbuild +++ b/arch/mips/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += device.h generic-y += dma-contiguous.h generic-y += emergency-restart.h generic-y += export.h +generic-y += initrd.h generic-y += irq_work.h generic-y += local64.h generic-y += mcs_spinlock.h diff --git a/arch/nds32/include/asm/Kbuild b/arch/nds32/include/asm/Kbuild index dbc4e5422550..1400aaf0c840 100644 --- a/arch/nds32/include/asm/Kbuild +++ b/arch/nds32/include/asm/Kbuild @@ -25,6 +25,7 @@ generic-y += ftrace.h generic-y += gpio.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += ioctl.h generic-y += ioctls.h generic-y += irq.h diff --git a/arch/nios2/include/asm/Kbuild b/arch/nios2/include/asm/Kbuild index 8fde4fa2c34f..d89de02549ee 100644 --- a/arch/nios2/include/asm/Kbuild +++ b/arch/nios2/include/asm/Kbuild @@ -18,6 +18,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/openrisc/include/asm/Kbuild b/arch/openrisc/include/asm/Kbuild index eb87cd8327c8..296fd55e8473 100644 --- a/arch/openrisc/include/asm/Kbuild +++ b/arch/openrisc/include/asm/Kbuild @@ -15,6 +15,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/parisc/include/asm/Kbuild b/arch/parisc/include/asm/Kbuild index 2013d639e735..1382d78a2477 100644 --- a/arch/parisc/include/asm/Kbuild +++ b/arch/parisc/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += exec.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/powerpc/include/asm/Kbuild b/arch/powerpc/include/asm/Kbuild index 3196d227e351..e3ea67c30605 100644 --- a/arch/powerpc/include/asm/Kbuild +++ b/arch/powerpc/include/asm/Kbuild @@ -1,5 +1,6 @@ generic-y += div64.h generic-y += export.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += local64.h diff --git a/arch/riscv/include/asm/Kbuild b/arch/riscv/include/asm/Kbuild index efdbe311e936..0e67ed69c423 100644 --- a/arch/riscv/include/asm/Kbuild +++ b/arch/riscv/include/asm/Kbuild @@ -17,6 +17,7 @@ generic-y += futex.h generic-y += hardirq.h generic-y += hash.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += ioctl.h generic-y += ioctls.h generic-y += ipcbuf.h diff --git a/arch/s390/include/asm/Kbuild b/arch/s390/include/asm/Kbuild index e3239772887a..dc618745d427 100644 --- a/arch/s390/include/asm/Kbuild +++ b/arch/s390/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += export.h generic-y += fb.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kmap_types.h diff --git a/arch/sh/include/asm/Kbuild b/arch/sh/include/asm/Kbuild index 6a5609a55965..c006a7cf3a43 100644 --- a/arch/sh/include/asm/Kbuild +++ b/arch/sh/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += dma-mapping.h generic-y += emergency-restart.h generic-y += exec.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += local.h diff --git a/arch/sparc/include/asm/Kbuild b/arch/sparc/include/asm/Kbuild index 410b263ef5c8..a5772c2a96c8 100644 --- a/arch/sparc/include/asm/Kbuild +++ b/arch/sparc/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += exec.h generic-y += export.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += linkage.h diff --git a/arch/um/include/asm/Kbuild b/arch/um/include/asm/Kbuild index b10dde6cb793..032cfe1b530b 100644 --- a/arch/um/include/asm/Kbuild +++ b/arch/um/include/asm/Kbuild @@ -12,6 +12,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += io.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/unicore32/include/asm/Kbuild b/arch/unicore32/include/asm/Kbuild index 1372553dc0a9..32e7dea45fcd 100644 --- a/arch/unicore32/include/asm/Kbuild +++ b/arch/unicore32/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/x86/include/asm/Kbuild b/arch/x86/include/asm/Kbuild index a0ab9ab61c75..290bd1c3ee2d 100644 --- a/arch/x86/include/asm/Kbuild +++ b/arch/x86/include/asm/Kbuild @@ -9,5 +9,6 @@ generated-y += xen-hypercalls.h generic-y += dma-contiguous.h generic-y += early_ioremap.h generic-y += export.h +generic-y += initrd.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/xtensa/include/asm/Kbuild b/arch/xtensa/include/asm/Kbuild index 82c756431b49..f2c363f2d22a 100644 --- a/arch/xtensa/include/asm/Kbuild +++ b/arch/xtensa/include/asm/Kbuild @@ -9,6 +9,7 @@ generic-y += exec.h generic-y += extable.h generic-y += fb.h generic-y += hardirq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/include/asm-generic/initrd.h b/include/asm-generic/initrd.h new file mode 100644 index 000000000000..40a8c178f10d --- /dev/null +++ b/include/asm-generic/initrd.h @@ -0,0 +1 @@ +/* empty */ -- 2.17.1 ^ permalink raw reply related [flat|nested] 168+ messages in thread
* [PATCH v2 1/2] arch: Add asm-generic/initrd.h and make use of it for most architectures @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-kernel Cc: Florian Fainelli, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, open list:ALPHA PORT, open list:SYNOPSYS ARC ARCHITECTURE, moderated list:ARM PORT, open list:C6X ARCHITECTURE, moderated list:H8/300 ARCHITECTURE, open list:QUALCOMM HEXAGON ARCHITECTURE, open list:IA64 (Itanium) PLATFORM, open list:M68K ARCHITECTURE, open list:MIPS, moderated list:NIOS2 ARCHITECTURE, open list:OPENRISC ARCHITECTURE, open list:PARISC ARCHITECTURE, open list:LINUX FOR POWERPC (32-BIT AND 64-BIT), open list:RISC-V ARCHITECTURE, open list:S390, open list:SUPERH, open list:SPARC + UltraSPARC (sparc/sparc64), open list:USER-MODE LINUX (UML), open list:TENSILICA XTENSA PORT (xtensa), open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE, open list:GENERIC INCLUDE/ASM HEADER FILES In preparation for separating the definition of __early_init_dt_declare_initrd() on ARM64 in order to cut the amount of files that require a rebuild when CONFIG_BLK_DEV_INITRD value is changed, introduce an empty asm-generic initrd.h file and update all architectures but arm64 to make use of it. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- arch/alpha/include/asm/Kbuild | 1 + arch/arc/include/asm/Kbuild | 1 + arch/arm/include/asm/Kbuild | 1 + arch/c6x/include/asm/Kbuild | 1 + arch/h8300/include/asm/Kbuild | 1 + arch/hexagon/include/asm/Kbuild | 1 + arch/ia64/include/asm/Kbuild | 1 + arch/m68k/include/asm/Kbuild | 1 + arch/microblaze/include/asm/Kbuild | 1 + arch/mips/include/asm/Kbuild | 1 + arch/nds32/include/asm/Kbuild | 1 + arch/nios2/include/asm/Kbuild | 1 + arch/openrisc/include/asm/Kbuild | 1 + arch/parisc/include/asm/Kbuild | 1 + arch/powerpc/include/asm/Kbuild | 1 + arch/riscv/include/asm/Kbuild | 1 + arch/s390/include/asm/Kbuild | 1 + arch/sh/include/asm/Kbuild | 1 + arch/sparc/include/asm/Kbuild | 1 + arch/um/include/asm/Kbuild | 1 + arch/unicore32/include/asm/Kbuild | 1 + arch/x86/include/asm/Kbuild | 1 + arch/xtensa/include/asm/Kbuild | 1 + include/asm-generic/initrd.h | 1 + 24 files changed, 24 insertions(+) create mode 100644 include/asm-generic/initrd.h diff --git a/arch/alpha/include/asm/Kbuild b/arch/alpha/include/asm/Kbuild index 0580cb8c84b2..cd6f723aed1b 100644 --- a/arch/alpha/include/asm/Kbuild +++ b/arch/alpha/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += compat.h generic-y += exec.h generic-y += export.h generic-y += fb.h +generic-y += initrd.h generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/arc/include/asm/Kbuild b/arch/arc/include/asm/Kbuild index feed50ce89fa..ba18632aa493 100644 --- a/arch/arc/include/asm/Kbuild +++ b/arch/arc/include/asm/Kbuild @@ -10,6 +10,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kmap_types.h diff --git a/arch/arm/include/asm/Kbuild b/arch/arm/include/asm/Kbuild index 1d66db9c9db5..b91d5b32e64f 100644 --- a/arch/arm/include/asm/Kbuild +++ b/arch/arm/include/asm/Kbuild @@ -4,6 +4,7 @@ generic-y += early_ioremap.h generic-y += emergency-restart.h generic-y += exec.h generic-y += extable.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += kdebug.h generic-y += local.h diff --git a/arch/c6x/include/asm/Kbuild b/arch/c6x/include/asm/Kbuild index 33a2c94fed0d..9e14cf6e89b4 100644 --- a/arch/c6x/include/asm/Kbuild +++ b/arch/c6x/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += extable.h generic-y += fb.h generic-y += futex.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += io.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/h8300/include/asm/Kbuild b/arch/h8300/include/asm/Kbuild index a5d0b2991f47..7d4e06a757c8 100644 --- a/arch/h8300/include/asm/Kbuild +++ b/arch/h8300/include/asm/Kbuild @@ -19,6 +19,7 @@ generic-y += futex.h generic-y += hardirq.h generic-y += hash.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/hexagon/include/asm/Kbuild b/arch/hexagon/include/asm/Kbuild index 47c4da3d64a4..0be62abf2123 100644 --- a/arch/hexagon/include/asm/Kbuild +++ b/arch/hexagon/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += iomap.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/ia64/include/asm/Kbuild b/arch/ia64/include/asm/Kbuild index 557bbc8ba9f5..1a1f1e4ba0d5 100644 --- a/arch/ia64/include/asm/Kbuild +++ b/arch/ia64/include/asm/Kbuild @@ -1,5 +1,6 @@ generic-y += compat.h generic-y += exec.h +generic-y += initrd.h generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/m68k/include/asm/Kbuild b/arch/m68k/include/asm/Kbuild index a4b8d3331a9e..9903551e0c9c 100644 --- a/arch/m68k/include/asm/Kbuild +++ b/arch/m68k/include/asm/Kbuild @@ -7,6 +7,7 @@ generic-y += exec.h generic-y += extable.h generic-y += futex.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/microblaze/include/asm/Kbuild b/arch/microblaze/include/asm/Kbuild index 569ba9e670c1..ec37e6304be5 100644 --- a/arch/microblaze/include/asm/Kbuild +++ b/arch/microblaze/include/asm/Kbuild @@ -11,6 +11,7 @@ generic-y += exec.h generic-y += extable.h generic-y += fb.h generic-y += hardirq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/mips/include/asm/Kbuild b/arch/mips/include/asm/Kbuild index 9a81e72119da..005ef04a4c73 100644 --- a/arch/mips/include/asm/Kbuild +++ b/arch/mips/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += device.h generic-y += dma-contiguous.h generic-y += emergency-restart.h generic-y += export.h +generic-y += initrd.h generic-y += irq_work.h generic-y += local64.h generic-y += mcs_spinlock.h diff --git a/arch/nds32/include/asm/Kbuild b/arch/nds32/include/asm/Kbuild index dbc4e5422550..1400aaf0c840 100644 --- a/arch/nds32/include/asm/Kbuild +++ b/arch/nds32/include/asm/Kbuild @@ -25,6 +25,7 @@ generic-y += ftrace.h generic-y += gpio.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += ioctl.h generic-y += ioctls.h generic-y += irq.h diff --git a/arch/nios2/include/asm/Kbuild b/arch/nios2/include/asm/Kbuild index 8fde4fa2c34f..d89de02549ee 100644 --- a/arch/nios2/include/asm/Kbuild +++ b/arch/nios2/include/asm/Kbuild @@ -18,6 +18,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/openrisc/include/asm/Kbuild b/arch/openrisc/include/asm/Kbuild index eb87cd8327c8..296fd55e8473 100644 --- a/arch/openrisc/include/asm/Kbuild +++ b/arch/openrisc/include/asm/Kbuild @@ -15,6 +15,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/parisc/include/asm/Kbuild b/arch/parisc/include/asm/Kbuild index 2013d639e735..1382d78a2477 100644 --- a/arch/parisc/include/asm/Kbuild +++ b/arch/parisc/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += exec.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/powerpc/include/asm/Kbuild b/arch/powerpc/include/asm/Kbuild index 3196d227e351..e3ea67c30605 100644 --- a/arch/powerpc/include/asm/Kbuild +++ b/arch/powerpc/include/asm/Kbuild @@ -1,5 +1,6 @@ generic-y += div64.h generic-y += export.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += local64.h diff --git a/arch/riscv/include/asm/Kbuild b/arch/riscv/include/asm/Kbuild index efdbe311e936..0e67ed69c423 100644 --- a/arch/riscv/include/asm/Kbuild +++ b/arch/riscv/include/asm/Kbuild @@ -17,6 +17,7 @@ generic-y += futex.h generic-y += hardirq.h generic-y += hash.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += ioctl.h generic-y += ioctls.h generic-y += ipcbuf.h diff --git a/arch/s390/include/asm/Kbuild b/arch/s390/include/asm/Kbuild index e3239772887a..dc618745d427 100644 --- a/arch/s390/include/asm/Kbuild +++ b/arch/s390/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += export.h generic-y += fb.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kmap_types.h diff --git a/arch/sh/include/asm/Kbuild b/arch/sh/include/asm/Kbuild index 6a5609a55965..c006a7cf3a43 100644 --- a/arch/sh/include/asm/Kbuild +++ b/arch/sh/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += dma-mapping.h generic-y += emergency-restart.h generic-y += exec.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += local.h diff --git a/arch/sparc/include/asm/Kbuild b/arch/sparc/include/asm/Kbuild index 410b263ef5c8..a5772c2a96c8 100644 --- a/arch/sparc/include/asm/Kbuild +++ b/arch/sparc/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += exec.h generic-y += export.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += linkage.h diff --git a/arch/um/include/asm/Kbuild b/arch/um/include/asm/Kbuild index b10dde6cb793..032cfe1b530b 100644 --- a/arch/um/include/asm/Kbuild +++ b/arch/um/include/asm/Kbuild @@ -12,6 +12,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += io.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/unicore32/include/asm/Kbuild b/arch/unicore32/include/asm/Kbuild index 1372553dc0a9..32e7dea45fcd 100644 --- a/arch/unicore32/include/asm/Kbuild +++ b/arch/unicore32/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/x86/include/asm/Kbuild b/arch/x86/include/asm/Kbuild index a0ab9ab61c75..290bd1c3ee2d 100644 --- a/arch/x86/include/asm/Kbuild +++ b/arch/x86/include/asm/Kbuild @@ -9,5 +9,6 @@ generated-y += xen-hypercalls.h generic-y += dma-contiguous.h generic-y += early_ioremap.h generic-y += export.h +generic-y += initrd.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/xtensa/include/asm/Kbuild b/arch/xtensa/include/asm/Kbuild index 82c756431b49..f2c363f2d22a 100644 --- a/arch/xtensa/include/asm/Kbuild +++ b/arch/xtensa/include/asm/Kbuild @@ -9,6 +9,7 @@ generic-y += exec.h generic-y += extable.h generic-y += fb.h generic-y += hardirq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/include/asm-generic/initrd.h b/include/asm-generic/initrd.h new file mode 100644 index 000000000000..40a8c178f10d --- /dev/null +++ b/include/asm-generic/initrd.h @@ -0,0 +1 @@ +/* empty */ -- 2.17.1 ^ permalink raw reply related [flat|nested] 168+ messages in thread
* [PATCH v2 1/2] arch: Add asm-generic/initrd.h and make use of it for most architectures @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-kernel Cc: Florian Fainelli, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, open list:ALPHA PORT, open list:SYNOPSYS ARC ARCHITECTURE, moderated list:ARM PORT, open list:C6X ARCHITECTURE, moderated list:H8/300 ARCHITECTURE, open list:QUALCOMM HEXAGON ARCHITECTURE, open list:IA64 (Itanium) PLATFORM, linux-m68k In preparation for separating the definition of __early_init_dt_declare_initrd() on ARM64 in order to cut the amount of files that require a rebuild when CONFIG_BLK_DEV_INITRD value is changed, introduce an empty asm-generic initrd.h file and update all architectures but arm64 to make use of it. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- arch/alpha/include/asm/Kbuild | 1 + arch/arc/include/asm/Kbuild | 1 + arch/arm/include/asm/Kbuild | 1 + arch/c6x/include/asm/Kbuild | 1 + arch/h8300/include/asm/Kbuild | 1 + arch/hexagon/include/asm/Kbuild | 1 + arch/ia64/include/asm/Kbuild | 1 + arch/m68k/include/asm/Kbuild | 1 + arch/microblaze/include/asm/Kbuild | 1 + arch/mips/include/asm/Kbuild | 1 + arch/nds32/include/asm/Kbuild | 1 + arch/nios2/include/asm/Kbuild | 1 + arch/openrisc/include/asm/Kbuild | 1 + arch/parisc/include/asm/Kbuild | 1 + arch/powerpc/include/asm/Kbuild | 1 + arch/riscv/include/asm/Kbuild | 1 + arch/s390/include/asm/Kbuild | 1 + arch/sh/include/asm/Kbuild | 1 + arch/sparc/include/asm/Kbuild | 1 + arch/um/include/asm/Kbuild | 1 + arch/unicore32/include/asm/Kbuild | 1 + arch/x86/include/asm/Kbuild | 1 + arch/xtensa/include/asm/Kbuild | 1 + include/asm-generic/initrd.h | 1 + 24 files changed, 24 insertions(+) create mode 100644 include/asm-generic/initrd.h diff --git a/arch/alpha/include/asm/Kbuild b/arch/alpha/include/asm/Kbuild index 0580cb8c84b2..cd6f723aed1b 100644 --- a/arch/alpha/include/asm/Kbuild +++ b/arch/alpha/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += compat.h generic-y += exec.h generic-y += export.h generic-y += fb.h +generic-y += initrd.h generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/arc/include/asm/Kbuild b/arch/arc/include/asm/Kbuild index feed50ce89fa..ba18632aa493 100644 --- a/arch/arc/include/asm/Kbuild +++ b/arch/arc/include/asm/Kbuild @@ -10,6 +10,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kmap_types.h diff --git a/arch/arm/include/asm/Kbuild b/arch/arm/include/asm/Kbuild index 1d66db9c9db5..b91d5b32e64f 100644 --- a/arch/arm/include/asm/Kbuild +++ b/arch/arm/include/asm/Kbuild @@ -4,6 +4,7 @@ generic-y += early_ioremap.h generic-y += emergency-restart.h generic-y += exec.h generic-y += extable.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += kdebug.h generic-y += local.h diff --git a/arch/c6x/include/asm/Kbuild b/arch/c6x/include/asm/Kbuild index 33a2c94fed0d..9e14cf6e89b4 100644 --- a/arch/c6x/include/asm/Kbuild +++ b/arch/c6x/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += extable.h generic-y += fb.h generic-y += futex.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += io.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/h8300/include/asm/Kbuild b/arch/h8300/include/asm/Kbuild index a5d0b2991f47..7d4e06a757c8 100644 --- a/arch/h8300/include/asm/Kbuild +++ b/arch/h8300/include/asm/Kbuild @@ -19,6 +19,7 @@ generic-y += futex.h generic-y += hardirq.h generic-y += hash.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/hexagon/include/asm/Kbuild b/arch/hexagon/include/asm/Kbuild index 47c4da3d64a4..0be62abf2123 100644 --- a/arch/hexagon/include/asm/Kbuild +++ b/arch/hexagon/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += iomap.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/ia64/include/asm/Kbuild b/arch/ia64/include/asm/Kbuild index 557bbc8ba9f5..1a1f1e4ba0d5 100644 --- a/arch/ia64/include/asm/Kbuild +++ b/arch/ia64/include/asm/Kbuild @@ -1,5 +1,6 @@ generic-y += compat.h generic-y += exec.h +generic-y += initrd.h generic-y += irq_work.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/m68k/include/asm/Kbuild b/arch/m68k/include/asm/Kbuild index a4b8d3331a9e..9903551e0c9c 100644 --- a/arch/m68k/include/asm/Kbuild +++ b/arch/m68k/include/asm/Kbuild @@ -7,6 +7,7 @@ generic-y += exec.h generic-y += extable.h generic-y += futex.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/microblaze/include/asm/Kbuild b/arch/microblaze/include/asm/Kbuild index 569ba9e670c1..ec37e6304be5 100644 --- a/arch/microblaze/include/asm/Kbuild +++ b/arch/microblaze/include/asm/Kbuild @@ -11,6 +11,7 @@ generic-y += exec.h generic-y += extable.h generic-y += fb.h generic-y += hardirq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/mips/include/asm/Kbuild b/arch/mips/include/asm/Kbuild index 9a81e72119da..005ef04a4c73 100644 --- a/arch/mips/include/asm/Kbuild +++ b/arch/mips/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += device.h generic-y += dma-contiguous.h generic-y += emergency-restart.h generic-y += export.h +generic-y += initrd.h generic-y += irq_work.h generic-y += local64.h generic-y += mcs_spinlock.h diff --git a/arch/nds32/include/asm/Kbuild b/arch/nds32/include/asm/Kbuild index dbc4e5422550..1400aaf0c840 100644 --- a/arch/nds32/include/asm/Kbuild +++ b/arch/nds32/include/asm/Kbuild @@ -25,6 +25,7 @@ generic-y += ftrace.h generic-y += gpio.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += ioctl.h generic-y += ioctls.h generic-y += irq.h diff --git a/arch/nios2/include/asm/Kbuild b/arch/nios2/include/asm/Kbuild index 8fde4fa2c34f..d89de02549ee 100644 --- a/arch/nios2/include/asm/Kbuild +++ b/arch/nios2/include/asm/Kbuild @@ -18,6 +18,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/openrisc/include/asm/Kbuild b/arch/openrisc/include/asm/Kbuild index eb87cd8327c8..296fd55e8473 100644 --- a/arch/openrisc/include/asm/Kbuild +++ b/arch/openrisc/include/asm/Kbuild @@ -15,6 +15,7 @@ generic-y += fb.h generic-y += ftrace.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/parisc/include/asm/Kbuild b/arch/parisc/include/asm/Kbuild index 2013d639e735..1382d78a2477 100644 --- a/arch/parisc/include/asm/Kbuild +++ b/arch/parisc/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += exec.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/powerpc/include/asm/Kbuild b/arch/powerpc/include/asm/Kbuild index 3196d227e351..e3ea67c30605 100644 --- a/arch/powerpc/include/asm/Kbuild +++ b/arch/powerpc/include/asm/Kbuild @@ -1,5 +1,6 @@ generic-y += div64.h generic-y += export.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += local64.h diff --git a/arch/riscv/include/asm/Kbuild b/arch/riscv/include/asm/Kbuild index efdbe311e936..0e67ed69c423 100644 --- a/arch/riscv/include/asm/Kbuild +++ b/arch/riscv/include/asm/Kbuild @@ -17,6 +17,7 @@ generic-y += futex.h generic-y += hardirq.h generic-y += hash.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += ioctl.h generic-y += ioctls.h generic-y += ipcbuf.h diff --git a/arch/s390/include/asm/Kbuild b/arch/s390/include/asm/Kbuild index e3239772887a..dc618745d427 100644 --- a/arch/s390/include/asm/Kbuild +++ b/arch/s390/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += export.h generic-y += fb.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kmap_types.h diff --git a/arch/sh/include/asm/Kbuild b/arch/sh/include/asm/Kbuild index 6a5609a55965..c006a7cf3a43 100644 --- a/arch/sh/include/asm/Kbuild +++ b/arch/sh/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += dma-mapping.h generic-y += emergency-restart.h generic-y += exec.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += local.h diff --git a/arch/sparc/include/asm/Kbuild b/arch/sparc/include/asm/Kbuild index 410b263ef5c8..a5772c2a96c8 100644 --- a/arch/sparc/include/asm/Kbuild +++ b/arch/sparc/include/asm/Kbuild @@ -5,6 +5,7 @@ generic-y += div64.h generic-y += emergency-restart.h generic-y += exec.h generic-y += export.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += linkage.h diff --git a/arch/um/include/asm/Kbuild b/arch/um/include/asm/Kbuild index b10dde6cb793..032cfe1b530b 100644 --- a/arch/um/include/asm/Kbuild +++ b/arch/um/include/asm/Kbuild @@ -12,6 +12,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += io.h generic-y += irq_regs.h generic-y += irq_work.h diff --git a/arch/unicore32/include/asm/Kbuild b/arch/unicore32/include/asm/Kbuild index 1372553dc0a9..32e7dea45fcd 100644 --- a/arch/unicore32/include/asm/Kbuild +++ b/arch/unicore32/include/asm/Kbuild @@ -13,6 +13,7 @@ generic-y += ftrace.h generic-y += futex.h generic-y += hardirq.h generic-y += hw_irq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/arch/x86/include/asm/Kbuild b/arch/x86/include/asm/Kbuild index a0ab9ab61c75..290bd1c3ee2d 100644 --- a/arch/x86/include/asm/Kbuild +++ b/arch/x86/include/asm/Kbuild @@ -9,5 +9,6 @@ generated-y += xen-hypercalls.h generic-y += dma-contiguous.h generic-y += early_ioremap.h generic-y += export.h +generic-y += initrd.h generic-y += mcs_spinlock.h generic-y += mm-arch-hooks.h diff --git a/arch/xtensa/include/asm/Kbuild b/arch/xtensa/include/asm/Kbuild index 82c756431b49..f2c363f2d22a 100644 --- a/arch/xtensa/include/asm/Kbuild +++ b/arch/xtensa/include/asm/Kbuild @@ -9,6 +9,7 @@ generic-y += exec.h generic-y += extable.h generic-y += fb.h generic-y += hardirq.h +generic-y += initrd.h generic-y += irq_regs.h generic-y += irq_work.h generic-y += kdebug.h diff --git a/include/asm-generic/initrd.h b/include/asm-generic/initrd.h new file mode 100644 index 000000000000..40a8c178f10d --- /dev/null +++ b/include/asm-generic/initrd.h @@ -0,0 +1 @@ +/* empty */ -- 2.17.1 ^ permalink raw reply related [flat|nested] 168+ messages in thread
* [PATCH v2 2/2] arm64: Create asm/initrd.h 2018-10-24 19:32 ` Florian Fainelli ` (9 preceding siblings ...) (?) @ 2018-10-24 19:32 ` Florian Fainelli -1 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-kernel Cc: Florian Fainelli, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, open list:ALPHA PORT, open list:SYNOPSYS ARC ARCHITECTURE, moderated list:ARM PORT, open list:C6X ARCHITECTURE, moderated list:H8/300 ARCHITECTURE, open list:QUALCOMM HEXAGON ARCHITECTURE, open list:IA64 Itanium PLATFORM, open list:M68 ARM64 is the only architecture that requires a re-definition of __early_init_dt_declare_initrd(). Now that we added the infrastructure in asm-generic to provide an asm/initrd.h file, properly break up that definition from asm/memory.h and make use of that header in drivers/of/fdt.c where this is used. This significantly cuts the number of objects that need to be rebuilt on ARM64 due to the repercusions of including asm/memory.h in several places. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- arch/arm64/include/asm/initrd.h | 13 +++++++++++++ arch/arm64/include/asm/memory.h | 8 -------- drivers/of/fdt.c | 1 + 3 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 arch/arm64/include/asm/initrd.h diff --git a/arch/arm64/include/asm/initrd.h b/arch/arm64/include/asm/initrd.h new file mode 100644 index 000000000000..0c9572485810 --- /dev/null +++ b/arch/arm64/include/asm/initrd.h @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __ASM_INITRD_H +#define __ASM_INITRD_H + +#ifdef CONFIG_BLK_DEV_INITRD +#define __early_init_dt_declare_initrd(__start, __end) \ + do { \ + initrd_start = (__start); \ + initrd_end = (__end); \ + } while (0) +#endif + +#endif /* __ASM_INITRD_H */ diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h index b96442960aea..dc3ca21ba240 100644 --- a/arch/arm64/include/asm/memory.h +++ b/arch/arm64/include/asm/memory.h @@ -168,14 +168,6 @@ #define IOREMAP_MAX_ORDER (PMD_SHIFT) #endif -#ifdef CONFIG_BLK_DEV_INITRD -#define __early_init_dt_declare_initrd(__start, __end) \ - do { \ - initrd_start = (__start); \ - initrd_end = (__end); \ - } while (0) -#endif - #ifndef __ASSEMBLY__ #include <linux/bitops.h> diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c index 800ad252cf9c..4e4711af907b 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c @@ -28,6 +28,7 @@ #include <asm/setup.h> /* for COMMAND_LINE_SIZE */ #include <asm/page.h> +#include <asm/initrd.h> #include "of_private.h" -- 2.17.1 ^ permalink raw reply related [flat|nested] 168+ messages in thread
* [PATCH v2 2/2] arm64: Create asm/initrd.h @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-kernel Cc: Florian Fainelli, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, open list:ALPHA PORT, open list:SYNOPSYS ARC ARCHITECTURE, moderated list:ARM PORT, open list:C6X ARCHITECTURE, moderated list:H8/300, ARCHITECTURE, , open list:QUALCOMM HEXAGON ARCHITECTURE, open list:IA64 Itanium PLATFORM, open list:M68K ARCHITECTURE, open list:MIPS, moderated list:NIOS2 ARCHITECTURE, open list:OPENRISC ARCHITECTURE, open list:PARISC ARCHITECTURE, open list:LINUX FOR POWERPC 32-BIT AND 64-BIT, , open list:RISC-V ARCHITECTURE, open list:S390, open list:SUPERH, open list:SPARC + UltraSPARC, , open list:USER-MODE LINUX UML, open list:TENSILICA XTENSA PORT xtensa, open list:OPEN FIRMWARE AND FLATTENED, DEVICE, , open list:GENERIC INCLUDE/ASM HEADER FILES ARM64 is the only architecture that requires a re-definition of __early_init_dt_declare_initrd(). Now that we added the infrastructure in asm-generic to provide an asm/initrd.h file, properly break up that definition from asm/memory.h and make use of that header in drivers/of/fdt.c where this is used. This significantly cuts the number of objects that need to be rebuilt on ARM64 due to the repercusions of including asm/memory.h in several places. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- arch/arm64/include/asm/initrd.h | 13 +++++++++++++ arch/arm64/include/asm/memory.h | 8 -------- drivers/of/fdt.c | 1 + 3 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 arch/arm64/include/asm/initrd.h diff --git a/arch/arm64/include/asm/initrd.h b/arch/arm64/include/asm/initrd.h new file mode 100644 index 000000000000..0c9572485810 --- /dev/null +++ b/arch/arm64/include/asm/initrd.h @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __ASM_INITRD_H +#define __ASM_INITRD_H + +#ifdef CONFIG_BLK_DEV_INITRD +#define __early_init_dt_declare_initrd(__start, __end) \ + do { \ + initrd_start = (__start); \ + initrd_end = (__end); \ + } while (0) +#endif + +#endif /* __ASM_INITRD_H */ diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h index b96442960aea..dc3ca21ba240 100644 --- a/arch/arm64/include/asm/memory.h +++ b/arch/arm64/include/asm/memory.h @@ -168,14 +168,6 @@ #define IOREMAP_MAX_ORDER (PMD_SHIFT) #endif -#ifdef CONFIG_BLK_DEV_INITRD -#define __early_init_dt_declare_initrd(__start, __end) \ - do { \ - initrd_start = (__start); \ - initrd_end = (__end); \ - } while (0) -#endif - #ifndef __ASSEMBLY__ #include <linux/bitops.h> diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c index 800ad252cf9c..4e4711af907b 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c @@ -28,6 +28,7 @@ #include <asm/setup.h> /* for COMMAND_LINE_SIZE */ #include <asm/page.h> +#include <asm/initrd.h> #include "of_private.h" -- 2.17.1 ^ permalink raw reply related [flat|nested] 168+ messages in thread
* [OpenRISC] [PATCH v2 2/2] arm64: Create asm/initrd.h @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: openrisc ARM64 is the only architecture that requires a re-definition of __early_init_dt_declare_initrd(). Now that we added the infrastructure in asm-generic to provide an asm/initrd.h file, properly break up that definition from asm/memory.h and make use of that header in drivers/of/fdt.c where this is used. This significantly cuts the number of objects that need to be rebuilt on ARM64 due to the repercusions of including asm/memory.h in several places. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- arch/arm64/include/asm/initrd.h | 13 +++++++++++++ arch/arm64/include/asm/memory.h | 8 -------- drivers/of/fdt.c | 1 + 3 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 arch/arm64/include/asm/initrd.h diff --git a/arch/arm64/include/asm/initrd.h b/arch/arm64/include/asm/initrd.h new file mode 100644 index 000000000000..0c9572485810 --- /dev/null +++ b/arch/arm64/include/asm/initrd.h @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __ASM_INITRD_H +#define __ASM_INITRD_H + +#ifdef CONFIG_BLK_DEV_INITRD +#define __early_init_dt_declare_initrd(__start, __end) \ + do { \ + initrd_start = (__start); \ + initrd_end = (__end); \ + } while (0) +#endif + +#endif /* __ASM_INITRD_H */ diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h index b96442960aea..dc3ca21ba240 100644 --- a/arch/arm64/include/asm/memory.h +++ b/arch/arm64/include/asm/memory.h @@ -168,14 +168,6 @@ #define IOREMAP_MAX_ORDER (PMD_SHIFT) #endif -#ifdef CONFIG_BLK_DEV_INITRD -#define __early_init_dt_declare_initrd(__start, __end) \ - do { \ - initrd_start = (__start); \ - initrd_end = (__end); \ - } while (0) -#endif - #ifndef __ASSEMBLY__ #include <linux/bitops.h> diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c index 800ad252cf9c..4e4711af907b 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c @@ -28,6 +28,7 @@ #include <asm/setup.h> /* for COMMAND_LINE_SIZE */ #include <asm/page.h> +#include <asm/initrd.h> #include "of_private.h" -- 2.17.1 ^ permalink raw reply related [flat|nested] 168+ messages in thread
* [PATCH v2 2/2] arm64: Create asm/initrd.h @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-arm-kernel ARM64 is the only architecture that requires a re-definition of __early_init_dt_declare_initrd(). Now that we added the infrastructure in asm-generic to provide an asm/initrd.h file, properly break up that definition from asm/memory.h and make use of that header in drivers/of/fdt.c where this is used. This significantly cuts the number of objects that need to be rebuilt on ARM64 due to the repercusions of including asm/memory.h in several places. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- arch/arm64/include/asm/initrd.h | 13 +++++++++++++ arch/arm64/include/asm/memory.h | 8 -------- drivers/of/fdt.c | 1 + 3 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 arch/arm64/include/asm/initrd.h diff --git a/arch/arm64/include/asm/initrd.h b/arch/arm64/include/asm/initrd.h new file mode 100644 index 000000000000..0c9572485810 --- /dev/null +++ b/arch/arm64/include/asm/initrd.h @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __ASM_INITRD_H +#define __ASM_INITRD_H + +#ifdef CONFIG_BLK_DEV_INITRD +#define __early_init_dt_declare_initrd(__start, __end) \ + do { \ + initrd_start = (__start); \ + initrd_end = (__end); \ + } while (0) +#endif + +#endif /* __ASM_INITRD_H */ diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h index b96442960aea..dc3ca21ba240 100644 --- a/arch/arm64/include/asm/memory.h +++ b/arch/arm64/include/asm/memory.h @@ -168,14 +168,6 @@ #define IOREMAP_MAX_ORDER (PMD_SHIFT) #endif -#ifdef CONFIG_BLK_DEV_INITRD -#define __early_init_dt_declare_initrd(__start, __end) \ - do { \ - initrd_start = (__start); \ - initrd_end = (__end); \ - } while (0) -#endif - #ifndef __ASSEMBLY__ #include <linux/bitops.h> diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c index 800ad252cf9c..4e4711af907b 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c @@ -28,6 +28,7 @@ #include <asm/setup.h> /* for COMMAND_LINE_SIZE */ #include <asm/page.h> +#include <asm/initrd.h> #include "of_private.h" -- 2.17.1 ^ permalink raw reply related [flat|nested] 168+ messages in thread
* [PATCH v2 2/2] arm64: Create asm/initrd.h @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-snps-arc ARM64 is the only architecture that requires a re-definition of __early_init_dt_declare_initrd(). Now that we added the infrastructure in asm-generic to provide an asm/initrd.h file, properly break up that definition from asm/memory.h and make use of that header in drivers/of/fdt.c where this is used. This significantly cuts the number of objects that need to be rebuilt on ARM64 due to the repercusions of including asm/memory.h in several places. Signed-off-by: Florian Fainelli <f.fainelli at gmail.com> --- arch/arm64/include/asm/initrd.h | 13 +++++++++++++ arch/arm64/include/asm/memory.h | 8 -------- drivers/of/fdt.c | 1 + 3 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 arch/arm64/include/asm/initrd.h diff --git a/arch/arm64/include/asm/initrd.h b/arch/arm64/include/asm/initrd.h new file mode 100644 index 000000000000..0c9572485810 --- /dev/null +++ b/arch/arm64/include/asm/initrd.h @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __ASM_INITRD_H +#define __ASM_INITRD_H + +#ifdef CONFIG_BLK_DEV_INITRD +#define __early_init_dt_declare_initrd(__start, __end) \ + do { \ + initrd_start = (__start); \ + initrd_end = (__end); \ + } while (0) +#endif + +#endif /* __ASM_INITRD_H */ diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h index b96442960aea..dc3ca21ba240 100644 --- a/arch/arm64/include/asm/memory.h +++ b/arch/arm64/include/asm/memory.h @@ -168,14 +168,6 @@ #define IOREMAP_MAX_ORDER (PMD_SHIFT) #endif -#ifdef CONFIG_BLK_DEV_INITRD -#define __early_init_dt_declare_initrd(__start, __end) \ - do { \ - initrd_start = (__start); \ - initrd_end = (__end); \ - } while (0) -#endif - #ifndef __ASSEMBLY__ #include <linux/bitops.h> diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c index 800ad252cf9c..4e4711af907b 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c @@ -28,6 +28,7 @@ #include <asm/setup.h> /* for COMMAND_LINE_SIZE */ #include <asm/page.h> +#include <asm/initrd.h> #include "of_private.h" -- 2.17.1 ^ permalink raw reply related [flat|nested] 168+ messages in thread
* [PATCH v2 2/2] arm64: Create asm/initrd.h @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-kernel Cc: open list:MIPS, open list:IA64 Itanium PLATFORM, open list:SUPERH, Catalin Marinas, Will Deacon, open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE, open list:SPARC + UltraSPARC sparc/sparc64, open list:RISC-V ARCHITECTURE, open list:GENERIC INCLUDE/ASM HEADER FILES, open list:S390, Florian Fainelli, open list:C6X ARCHITECTURE, open list:QUALCOMM HEXAGON ARCHITECTURE, open list:SYNOPSYS ARC ARCHITECTURE, moderated list:H8/300 ARCHITECTURE, open list:TENSILICA XTENSA PORT xtensa, Arnd Bergmann, Marc Zyngier, open list:USER-MODE LINUX UML, open list:M68K ARCHITECTURE, open list:OPENRISC ARCHITECTURE, moderated list:ARM PORT, open list:PARISC ARCHITECTURE, Greg Kroah-Hartman, open list:ALPHA PORT, Olof Johansson, moderated list:NIOS2 ARCHITECTURE, open list:LINUX FOR POWERPC 32-BIT AND 64-BIT ARM64 is the only architecture that requires a re-definition of __early_init_dt_declare_initrd(). Now that we added the infrastructure in asm-generic to provide an asm/initrd.h file, properly break up that definition from asm/memory.h and make use of that header in drivers/of/fdt.c where this is used. This significantly cuts the number of objects that need to be rebuilt on ARM64 due to the repercusions of including asm/memory.h in several places. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- arch/arm64/include/asm/initrd.h | 13 +++++++++++++ arch/arm64/include/asm/memory.h | 8 -------- drivers/of/fdt.c | 1 + 3 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 arch/arm64/include/asm/initrd.h diff --git a/arch/arm64/include/asm/initrd.h b/arch/arm64/include/asm/initrd.h new file mode 100644 index 000000000000..0c9572485810 --- /dev/null +++ b/arch/arm64/include/asm/initrd.h @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __ASM_INITRD_H +#define __ASM_INITRD_H + +#ifdef CONFIG_BLK_DEV_INITRD +#define __early_init_dt_declare_initrd(__start, __end) \ + do { \ + initrd_start = (__start); \ + initrd_end = (__end); \ + } while (0) +#endif + +#endif /* __ASM_INITRD_H */ diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h index b96442960aea..dc3ca21ba240 100644 --- a/arch/arm64/include/asm/memory.h +++ b/arch/arm64/include/asm/memory.h @@ -168,14 +168,6 @@ #define IOREMAP_MAX_ORDER (PMD_SHIFT) #endif -#ifdef CONFIG_BLK_DEV_INITRD -#define __early_init_dt_declare_initrd(__start, __end) \ - do { \ - initrd_start = (__start); \ - initrd_end = (__end); \ - } while (0) -#endif - #ifndef __ASSEMBLY__ #include <linux/bitops.h> diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c index 800ad252cf9c..4e4711af907b 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c @@ -28,6 +28,7 @@ #include <asm/setup.h> /* for COMMAND_LINE_SIZE */ #include <asm/page.h> +#include <asm/initrd.h> #include "of_private.h" -- 2.17.1 ^ permalink raw reply related [flat|nested] 168+ messages in thread
* [PATCH v2 2/2] arm64: Create asm/initrd.h @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-kernel Cc: open list:MIPS, open list:IA64 Itanium PLATFORM, open list:SUPERH, Catalin Marinas, Will Deacon, open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE, open list:SPARC + UltraSPARC sparc/sparc64, open list:RISC-V ARCHITECTURE, open list:GENERIC INCLUDE/ASM HEADER FILES, open list:S390, Florian Fainelli, open list:C6X ARCHITECTURE, open list:QUALCOMM HEXAGON ARCHITECTURE, open list:SYNOPSYS ARC ARCHITECTURE, moderated list:H8/300 ARCHITECTURE, open list:TENSILICA XTENSA PORT xtensa, Arnd Bergmann, Marc Zyngier, open list:USER-MODE LINUX UML, open list:M68K ARCHITECTURE, open list:OPENRISC ARCHITECTURE, moderated list:ARM PORT, open list:PARISC ARCHITECTURE, Greg Kroah-Hartman, open list:ALPHA PORT, Olof Johansson, moderated list:NIOS2 ARCHITECTURE, open list:LINUX FOR POWERPC 32-BIT AND 64-BIT ARM64 is the only architecture that requires a re-definition of __early_init_dt_declare_initrd(). Now that we added the infrastructure in asm-generic to provide an asm/initrd.h file, properly break up that definition from asm/memory.h and make use of that header in drivers/of/fdt.c where this is used. This significantly cuts the number of objects that need to be rebuilt on ARM64 due to the repercusions of including asm/memory.h in several places. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- arch/arm64/include/asm/initrd.h | 13 +++++++++++++ arch/arm64/include/asm/memory.h | 8 -------- drivers/of/fdt.c | 1 + 3 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 arch/arm64/include/asm/initrd.h diff --git a/arch/arm64/include/asm/initrd.h b/arch/arm64/include/asm/initrd.h new file mode 100644 index 000000000000..0c9572485810 --- /dev/null +++ b/arch/arm64/include/asm/initrd.h @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __ASM_INITRD_H +#define __ASM_INITRD_H + +#ifdef CONFIG_BLK_DEV_INITRD +#define __early_init_dt_declare_initrd(__start, __end) \ + do { \ + initrd_start = (__start); \ + initrd_end = (__end); \ + } while (0) +#endif + +#endif /* __ASM_INITRD_H */ diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h index b96442960aea..dc3ca21ba240 100644 --- a/arch/arm64/include/asm/memory.h +++ b/arch/arm64/include/asm/memory.h @@ -168,14 +168,6 @@ #define IOREMAP_MAX_ORDER (PMD_SHIFT) #endif -#ifdef CONFIG_BLK_DEV_INITRD -#define __early_init_dt_declare_initrd(__start, __end) \ - do { \ - initrd_start = (__start); \ - initrd_end = (__end); \ - } while (0) -#endif - #ifndef __ASSEMBLY__ #include <linux/bitops.h> diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c index 800ad252cf9c..4e4711af907b 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c @@ -28,6 +28,7 @@ #include <asm/setup.h> /* for COMMAND_LINE_SIZE */ #include <asm/page.h> +#include <asm/initrd.h> #include "of_private.h" -- 2.17.1 _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply related [flat|nested] 168+ messages in thread
* [PATCH v2 2/2] arm64: Create asm/initrd.h @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-riscv ARM64 is the only architecture that requires a re-definition of __early_init_dt_declare_initrd(). Now that we added the infrastructure in asm-generic to provide an asm/initrd.h file, properly break up that definition from asm/memory.h and make use of that header in drivers/of/fdt.c where this is used. This significantly cuts the number of objects that need to be rebuilt on ARM64 due to the repercusions of including asm/memory.h in several places. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- arch/arm64/include/asm/initrd.h | 13 +++++++++++++ arch/arm64/include/asm/memory.h | 8 -------- drivers/of/fdt.c | 1 + 3 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 arch/arm64/include/asm/initrd.h diff --git a/arch/arm64/include/asm/initrd.h b/arch/arm64/include/asm/initrd.h new file mode 100644 index 000000000000..0c9572485810 --- /dev/null +++ b/arch/arm64/include/asm/initrd.h @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __ASM_INITRD_H +#define __ASM_INITRD_H + +#ifdef CONFIG_BLK_DEV_INITRD +#define __early_init_dt_declare_initrd(__start, __end) \ + do { \ + initrd_start = (__start); \ + initrd_end = (__end); \ + } while (0) +#endif + +#endif /* __ASM_INITRD_H */ diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h index b96442960aea..dc3ca21ba240 100644 --- a/arch/arm64/include/asm/memory.h +++ b/arch/arm64/include/asm/memory.h @@ -168,14 +168,6 @@ #define IOREMAP_MAX_ORDER (PMD_SHIFT) #endif -#ifdef CONFIG_BLK_DEV_INITRD -#define __early_init_dt_declare_initrd(__start, __end) \ - do { \ - initrd_start = (__start); \ - initrd_end = (__end); \ - } while (0) -#endif - #ifndef __ASSEMBLY__ #include <linux/bitops.h> diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c index 800ad252cf9c..4e4711af907b 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c @@ -28,6 +28,7 @@ #include <asm/setup.h> /* for COMMAND_LINE_SIZE */ #include <asm/page.h> +#include <asm/initrd.h> #include "of_private.h" -- 2.17.1 ^ permalink raw reply related [flat|nested] 168+ messages in thread
* [PATCH v2 2/2] arm64: Create asm/initrd.h @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-kernel Cc: Florian Fainelli, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, open list:ALPHA PORT, open list:SYNOPSYS ARC ARCHITECTURE, moderated list:ARM PORT, open list:C6X ARCHITECTURE, moderated list:H8/300 ARCHITECTURE, open list:QUALCOMM HEXAGON ARCHITECTURE, open list:IA64 Itanium PLATFORM, open list:M68 ARM64 is the only architecture that requires a re-definition of __early_init_dt_declare_initrd(). Now that we added the infrastructure in asm-generic to provide an asm/initrd.h file, properly break up that definition from asm/memory.h and make use of that header in drivers/of/fdt.c where this is used. This significantly cuts the number of objects that need to be rebuilt on ARM64 due to the repercusions of including asm/memory.h in several places. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- arch/arm64/include/asm/initrd.h | 13 +++++++++++++ arch/arm64/include/asm/memory.h | 8 -------- drivers/of/fdt.c | 1 + 3 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 arch/arm64/include/asm/initrd.h diff --git a/arch/arm64/include/asm/initrd.h b/arch/arm64/include/asm/initrd.h new file mode 100644 index 000000000000..0c9572485810 --- /dev/null +++ b/arch/arm64/include/asm/initrd.h @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __ASM_INITRD_H +#define __ASM_INITRD_H + +#ifdef CONFIG_BLK_DEV_INITRD +#define __early_init_dt_declare_initrd(__start, __end) \ + do { \ + initrd_start = (__start); \ + initrd_end = (__end); \ + } while (0) +#endif + +#endif /* __ASM_INITRD_H */ diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h index b96442960aea..dc3ca21ba240 100644 --- a/arch/arm64/include/asm/memory.h +++ b/arch/arm64/include/asm/memory.h @@ -168,14 +168,6 @@ #define IOREMAP_MAX_ORDER (PMD_SHIFT) #endif -#ifdef CONFIG_BLK_DEV_INITRD -#define __early_init_dt_declare_initrd(__start, __end) \ - do { \ - initrd_start = (__start); \ - initrd_end = (__end); \ - } while (0) -#endif - #ifndef __ASSEMBLY__ #include <linux/bitops.h> diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c index 800ad252cf9c..4e4711af907b 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c @@ -28,6 +28,7 @@ #include <asm/setup.h> /* for COMMAND_LINE_SIZE */ #include <asm/page.h> +#include <asm/initrd.h> #include "of_private.h" -- 2.17.1 ^ permalink raw reply related [flat|nested] 168+ messages in thread
* [PATCH v2 2/2] arm64: Create asm/initrd.h @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-kernel Cc: Florian Fainelli, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, open list:ALPHA PORT, open list:SYNOPSYS ARC ARCHITECTURE, moderated list:ARM PORT, open list:C6X ARCHITECTURE, moderated list:H8/300 ARCHITECTURE, open list:QUALCOMM HEXAGON ARCHITECTURE, open list:IA64 Itanium PLATFORM, open list:M68K ARCHITECTURE, open list:MIPS, moderated list:NIOS2 ARCHITECTURE, open list:OPENRISC ARCHITECTURE, open list:PARISC ARCHITECTURE, open list:LINUX FOR POWERPC 32-BIT AND 64-BIT, open list:RISC-V ARCHITECTURE, open list:S390, open list:SUPERH, open list:SPARC + UltraSPARC sparc/sparc64, open list:USER-MODE LINUX UML, open list:TENSILICA XTENSA PORT xtensa, open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE, open list:GENERIC INCLUDE/ASM HEADER FILES ARM64 is the only architecture that requires a re-definition of __early_init_dt_declare_initrd(). Now that we added the infrastructure in asm-generic to provide an asm/initrd.h file, properly break up that definition from asm/memory.h and make use of that header in drivers/of/fdt.c where this is used. This significantly cuts the number of objects that need to be rebuilt on ARM64 due to the repercusions of including asm/memory.h in several places. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- arch/arm64/include/asm/initrd.h | 13 +++++++++++++ arch/arm64/include/asm/memory.h | 8 -------- drivers/of/fdt.c | 1 + 3 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 arch/arm64/include/asm/initrd.h diff --git a/arch/arm64/include/asm/initrd.h b/arch/arm64/include/asm/initrd.h new file mode 100644 index 000000000000..0c9572485810 --- /dev/null +++ b/arch/arm64/include/asm/initrd.h @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __ASM_INITRD_H +#define __ASM_INITRD_H + +#ifdef CONFIG_BLK_DEV_INITRD +#define __early_init_dt_declare_initrd(__start, __end) \ + do { \ + initrd_start = (__start); \ + initrd_end = (__end); \ + } while (0) +#endif + +#endif /* __ASM_INITRD_H */ diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h index b96442960aea..dc3ca21ba240 100644 --- a/arch/arm64/include/asm/memory.h +++ b/arch/arm64/include/asm/memory.h @@ -168,14 +168,6 @@ #define IOREMAP_MAX_ORDER (PMD_SHIFT) #endif -#ifdef CONFIG_BLK_DEV_INITRD -#define __early_init_dt_declare_initrd(__start, __end) \ - do { \ - initrd_start = (__start); \ - initrd_end = (__end); \ - } while (0) -#endif - #ifndef __ASSEMBLY__ #include <linux/bitops.h> diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c index 800ad252cf9c..4e4711af907b 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c @@ -28,6 +28,7 @@ #include <asm/setup.h> /* for COMMAND_LINE_SIZE */ #include <asm/page.h> +#include <asm/initrd.h> #include "of_private.h" -- 2.17.1 ^ permalink raw reply related [flat|nested] 168+ messages in thread
* [PATCH v2 2/2] arm64: Create asm/initrd.h @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-kernel Cc: Florian Fainelli, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, open list:ALPHA PORT, open list:SYNOPSYS ARC ARCHITECTURE, moderated list:ARM PORT, open list:C6X ARCHITECTURE, moderated list:H8/300 ARCHITECTURE, open list:QUALCOMM HEXAGON ARCHITECTURE, open list:IA64 (Itanium) PLATFORM, open list:M68K ARCHITECTURE, open list:MIPS, moderated list:NIOS2 ARCHITECTURE, open list:OPENRISC ARCHITECTURE, open list:PARISC ARCHITECTURE, open list:LINUX FOR POWERPC (32-BIT AND 64-BIT), open list:RISC-V ARCHITECTURE, open list:S390, open list:SUPERH, open list:SPARC + UltraSPARC (sparc/sparc64), open list:USER-MODE LINUX (UML), open list:TENSILICA XTENSA PORT (xtensa), open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE, open list:GENERIC INCLUDE/ASM HEADER FILES ARM64 is the only architecture that requires a re-definition of __early_init_dt_declare_initrd(). Now that we added the infrastructure in asm-generic to provide an asm/initrd.h file, properly break up that definition from asm/memory.h and make use of that header in drivers/of/fdt.c where this is used. This significantly cuts the number of objects that need to be rebuilt on ARM64 due to the repercusions of including asm/memory.h in several places. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- arch/arm64/include/asm/initrd.h | 13 +++++++++++++ arch/arm64/include/asm/memory.h | 8 -------- drivers/of/fdt.c | 1 + 3 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 arch/arm64/include/asm/initrd.h diff --git a/arch/arm64/include/asm/initrd.h b/arch/arm64/include/asm/initrd.h new file mode 100644 index 000000000000..0c9572485810 --- /dev/null +++ b/arch/arm64/include/asm/initrd.h @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __ASM_INITRD_H +#define __ASM_INITRD_H + +#ifdef CONFIG_BLK_DEV_INITRD +#define __early_init_dt_declare_initrd(__start, __end) \ + do { \ + initrd_start = (__start); \ + initrd_end = (__end); \ + } while (0) +#endif + +#endif /* __ASM_INITRD_H */ diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h index b96442960aea..dc3ca21ba240 100644 --- a/arch/arm64/include/asm/memory.h +++ b/arch/arm64/include/asm/memory.h @@ -168,14 +168,6 @@ #define IOREMAP_MAX_ORDER (PMD_SHIFT) #endif -#ifdef CONFIG_BLK_DEV_INITRD -#define __early_init_dt_declare_initrd(__start, __end) \ - do { \ - initrd_start = (__start); \ - initrd_end = (__end); \ - } while (0) -#endif - #ifndef __ASSEMBLY__ #include <linux/bitops.h> diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c index 800ad252cf9c..4e4711af907b 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c @@ -28,6 +28,7 @@ #include <asm/setup.h> /* for COMMAND_LINE_SIZE */ #include <asm/page.h> +#include <asm/initrd.h> #include "of_private.h" -- 2.17.1 ^ permalink raw reply related [flat|nested] 168+ messages in thread
* [PATCH v2 2/2] arm64: Create asm/initrd.h @ 2018-10-24 19:32 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 19:32 UTC (permalink / raw) To: linux-kernel Cc: Florian Fainelli, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, open list:ALPHA PORT, open list:SYNOPSYS ARC ARCHITECTURE, moderated list:ARM PORT, open list:C6X ARCHITECTURE, moderated list:H8/300 ARCHITECTURE, open list:QUALCOMM HEXAGON ARCHITECTURE, open list:IA64 (Itanium) PLATFORM, linux-m68k ARM64 is the only architecture that requires a re-definition of __early_init_dt_declare_initrd(). Now that we added the infrastructure in asm-generic to provide an asm/initrd.h file, properly break up that definition from asm/memory.h and make use of that header in drivers/of/fdt.c where this is used. This significantly cuts the number of objects that need to be rebuilt on ARM64 due to the repercusions of including asm/memory.h in several places. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- arch/arm64/include/asm/initrd.h | 13 +++++++++++++ arch/arm64/include/asm/memory.h | 8 -------- drivers/of/fdt.c | 1 + 3 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 arch/arm64/include/asm/initrd.h diff --git a/arch/arm64/include/asm/initrd.h b/arch/arm64/include/asm/initrd.h new file mode 100644 index 000000000000..0c9572485810 --- /dev/null +++ b/arch/arm64/include/asm/initrd.h @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __ASM_INITRD_H +#define __ASM_INITRD_H + +#ifdef CONFIG_BLK_DEV_INITRD +#define __early_init_dt_declare_initrd(__start, __end) \ + do { \ + initrd_start = (__start); \ + initrd_end = (__end); \ + } while (0) +#endif + +#endif /* __ASM_INITRD_H */ diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h index b96442960aea..dc3ca21ba240 100644 --- a/arch/arm64/include/asm/memory.h +++ b/arch/arm64/include/asm/memory.h @@ -168,14 +168,6 @@ #define IOREMAP_MAX_ORDER (PMD_SHIFT) #endif -#ifdef CONFIG_BLK_DEV_INITRD -#define __early_init_dt_declare_initrd(__start, __end) \ - do { \ - initrd_start = (__start); \ - initrd_end = (__end); \ - } while (0) -#endif - #ifndef __ASSEMBLY__ #include <linux/bitops.h> diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c index 800ad252cf9c..4e4711af907b 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c @@ -28,6 +28,7 @@ #include <asm/setup.h> /* for COMMAND_LINE_SIZE */ #include <asm/page.h> +#include <asm/initrd.h> #include "of_private.h" -- 2.17.1 ^ permalink raw reply related [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD 2018-10-24 19:32 ` Florian Fainelli ` (8 preceding siblings ...) (?) @ 2018-10-24 19:55 ` Rob Herring -1 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-24 19:55 UTC (permalink / raw) To: Florian Fainelli Cc: linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev, Openrisc On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > Hi all, > > While investigating why ARM64 required a ton of objects to be rebuilt > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > because we define __early_init_dt_declare_initrd() differently and we do > that in arch/arm64/include/asm/memory.h which gets included by a fair > amount of other header files, and translation units as well. I scratch my head sometimes as to why some config options rebuild so much stuff. One down, ? to go. :) > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > systems that generate two kernels: one with the initramfs and one > without. buildroot is one of these build systems, OpenWrt is also > another one that does this. > > This patch series proposes adding an empty initrd.h to satisfy the need > for drivers/of/fdt.c to unconditionally include that file, and moves the > custom __early_init_dt_declare_initrd() definition away from > asm/memory.h > > This cuts the number of objects rebuilds from 1920 down to 26, so a > factor 73 approximately. > > Apologies for the long CC list, please let me know how you would go > about merging that and if another approach would be preferable, e.g: > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > something like that. There may be a better way as of 4.20 because bootmem is now gone and only memblock is used. This should unify what each arch needs to do with initrd early. We need the physical address early for memblock reserving. Then later on we need the virtual address to access the initrd. Perhaps we should just change initrd_start and initrd_end to physical addresses (or add 2 new variables would be less invasive and allow for different translation than __va()). The sanity checks and memblock reserve could also perhaps be moved to a common location. Alternatively, given arm64 is the only oddball, I'd be fine with an "if (IS_ENABLED(CONFIG_ARM64))" condition in the default __early_init_dt_declare_initrd as long as we have a path to removing it like the above option. Rob ^ permalink raw reply [flat|nested] 168+ messages in thread
* [OpenRISC] [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 19:55 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-24 19:55 UTC (permalink / raw) To: openrisc On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > Hi all, > > While investigating why ARM64 required a ton of objects to be rebuilt > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > because we define __early_init_dt_declare_initrd() differently and we do > that in arch/arm64/include/asm/memory.h which gets included by a fair > amount of other header files, and translation units as well. I scratch my head sometimes as to why some config options rebuild so much stuff. One down, ? to go. :) > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > systems that generate two kernels: one with the initramfs and one > without. buildroot is one of these build systems, OpenWrt is also > another one that does this. > > This patch series proposes adding an empty initrd.h to satisfy the need > for drivers/of/fdt.c to unconditionally include that file, and moves the > custom __early_init_dt_declare_initrd() definition away from > asm/memory.h > > This cuts the number of objects rebuilds from 1920 down to 26, so a > factor 73 approximately. > > Apologies for the long CC list, please let me know how you would go > about merging that and if another approach would be preferable, e.g: > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > something like that. There may be a better way as of 4.20 because bootmem is now gone and only memblock is used. This should unify what each arch needs to do with initrd early. We need the physical address early for memblock reserving. Then later on we need the virtual address to access the initrd. Perhaps we should just change initrd_start and initrd_end to physical addresses (or add 2 new variables would be less invasive and allow for different translation than __va()). The sanity checks and memblock reserve could also perhaps be moved to a common location. Alternatively, given arm64 is the only oddball, I'd be fine with an "if (IS_ENABLED(CONFIG_ARM64))" condition in the default __early_init_dt_declare_initrd as long as we have a path to removing it like the above option. Rob ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 19:55 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-24 19:55 UTC (permalink / raw) To: linux-arm-kernel On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > Hi all, > > While investigating why ARM64 required a ton of objects to be rebuilt > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > because we define __early_init_dt_declare_initrd() differently and we do > that in arch/arm64/include/asm/memory.h which gets included by a fair > amount of other header files, and translation units as well. I scratch my head sometimes as to why some config options rebuild so much stuff. One down, ? to go. :) > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > systems that generate two kernels: one with the initramfs and one > without. buildroot is one of these build systems, OpenWrt is also > another one that does this. > > This patch series proposes adding an empty initrd.h to satisfy the need > for drivers/of/fdt.c to unconditionally include that file, and moves the > custom __early_init_dt_declare_initrd() definition away from > asm/memory.h > > This cuts the number of objects rebuilds from 1920 down to 26, so a > factor 73 approximately. > > Apologies for the long CC list, please let me know how you would go > about merging that and if another approach would be preferable, e.g: > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > something like that. There may be a better way as of 4.20 because bootmem is now gone and only memblock is used. This should unify what each arch needs to do with initrd early. We need the physical address early for memblock reserving. Then later on we need the virtual address to access the initrd. Perhaps we should just change initrd_start and initrd_end to physical addresses (or add 2 new variables would be less invasive and allow for different translation than __va()). The sanity checks and memblock reserve could also perhaps be moved to a common location. Alternatively, given arm64 is the only oddball, I'd be fine with an "if (IS_ENABLED(CONFIG_ARM64))" condition in the default __early_init_dt_declare_initrd as long as we have a path to removing it like the above option. Rob ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 19:55 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-24 19:55 UTC (permalink / raw) To: linux-snps-arc On Wed, Oct 24, 2018@2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > Hi all, > > While investigating why ARM64 required a ton of objects to be rebuilt > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > because we define __early_init_dt_declare_initrd() differently and we do > that in arch/arm64/include/asm/memory.h which gets included by a fair > amount of other header files, and translation units as well. I scratch my head sometimes as to why some config options rebuild so much stuff. One down, ? to go. :) > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > systems that generate two kernels: one with the initramfs and one > without. buildroot is one of these build systems, OpenWrt is also > another one that does this. > > This patch series proposes adding an empty initrd.h to satisfy the need > for drivers/of/fdt.c to unconditionally include that file, and moves the > custom __early_init_dt_declare_initrd() definition away from > asm/memory.h > > This cuts the number of objects rebuilds from 1920 down to 26, so a > factor 73 approximately. > > Apologies for the long CC list, please let me know how you would go > about merging that and if another approach would be preferable, e.g: > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > something like that. There may be a better way as of 4.20 because bootmem is now gone and only memblock is used. This should unify what each arch needs to do with initrd early. We need the physical address early for memblock reserving. Then later on we need the virtual address to access the initrd. Perhaps we should just change initrd_start and initrd_end to physical addresses (or add 2 new variables would be less invasive and allow for different translation than __va()). The sanity checks and memblock reserve could also perhaps be moved to a common location. Alternatively, given arm64 is the only oddball, I'd be fine with an "if (IS_ENABLED(CONFIG_ARM64))" condition in the default __early_init_dt_declare_initrd as long as we have a path to removing it like the above option. Rob ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 19:55 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-24 19:55 UTC (permalink / raw) To: Florian Fainelli Cc: Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, linux-s390, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, Marc Zyngier, linux-um, linux-m68k, Openrisc, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-parisc, Greg Kroah-Hartman, linux-kernel, linux-alpha, Olof Johansson, nios2-dev, linuxppc-dev On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > Hi all, > > While investigating why ARM64 required a ton of objects to be rebuilt > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > because we define __early_init_dt_declare_initrd() differently and we do > that in arch/arm64/include/asm/memory.h which gets included by a fair > amount of other header files, and translation units as well. I scratch my head sometimes as to why some config options rebuild so much stuff. One down, ? to go. :) > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > systems that generate two kernels: one with the initramfs and one > without. buildroot is one of these build systems, OpenWrt is also > another one that does this. > > This patch series proposes adding an empty initrd.h to satisfy the need > for drivers/of/fdt.c to unconditionally include that file, and moves the > custom __early_init_dt_declare_initrd() definition away from > asm/memory.h > > This cuts the number of objects rebuilds from 1920 down to 26, so a > factor 73 approximately. > > Apologies for the long CC list, please let me know how you would go > about merging that and if another approach would be preferable, e.g: > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > something like that. There may be a better way as of 4.20 because bootmem is now gone and only memblock is used. This should unify what each arch needs to do with initrd early. We need the physical address early for memblock reserving. Then later on we need the virtual address to access the initrd. Perhaps we should just change initrd_start and initrd_end to physical addresses (or add 2 new variables would be less invasive and allow for different translation than __va()). The sanity checks and memblock reserve could also perhaps be moved to a common location. Alternatively, given arm64 is the only oddball, I'd be fine with an "if (IS_ENABLED(CONFIG_ARM64))" condition in the default __early_init_dt_declare_initrd as long as we have a path to removing it like the above option. Rob ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 19:55 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-24 19:55 UTC (permalink / raw) To: Florian Fainelli Cc: Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, linux-s390, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, Marc Zyngier, linux-um, linux-m68k, Openrisc, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-parisc, Greg Kroah-Hartman, linux-kernel, linux-alpha, Olof Johansson, nios2-dev, linuxppc-dev On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > Hi all, > > While investigating why ARM64 required a ton of objects to be rebuilt > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > because we define __early_init_dt_declare_initrd() differently and we do > that in arch/arm64/include/asm/memory.h which gets included by a fair > amount of other header files, and translation units as well. I scratch my head sometimes as to why some config options rebuild so much stuff. One down, ? to go. :) > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > systems that generate two kernels: one with the initramfs and one > without. buildroot is one of these build systems, OpenWrt is also > another one that does this. > > This patch series proposes adding an empty initrd.h to satisfy the need > for drivers/of/fdt.c to unconditionally include that file, and moves the > custom __early_init_dt_declare_initrd() definition away from > asm/memory.h > > This cuts the number of objects rebuilds from 1920 down to 26, so a > factor 73 approximately. > > Apologies for the long CC list, please let me know how you would go > about merging that and if another approach would be preferable, e.g: > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > something like that. There may be a better way as of 4.20 because bootmem is now gone and only memblock is used. This should unify what each arch needs to do with initrd early. We need the physical address early for memblock reserving. Then later on we need the virtual address to access the initrd. Perhaps we should just change initrd_start and initrd_end to physical addresses (or add 2 new variables would be less invasive and allow for different translation than __va()). The sanity checks and memblock reserve could also perhaps be moved to a common location. Alternatively, given arm64 is the only oddball, I'd be fine with an "if (IS_ENABLED(CONFIG_ARM64))" condition in the default __early_init_dt_declare_initrd as long as we have a path to removing it like the above option. Rob _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 19:55 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-24 19:55 UTC (permalink / raw) To: linux-riscv On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > Hi all, > > While investigating why ARM64 required a ton of objects to be rebuilt > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > because we define __early_init_dt_declare_initrd() differently and we do > that in arch/arm64/include/asm/memory.h which gets included by a fair > amount of other header files, and translation units as well. I scratch my head sometimes as to why some config options rebuild so much stuff. One down, ? to go. :) > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > systems that generate two kernels: one with the initramfs and one > without. buildroot is one of these build systems, OpenWrt is also > another one that does this. > > This patch series proposes adding an empty initrd.h to satisfy the need > for drivers/of/fdt.c to unconditionally include that file, and moves the > custom __early_init_dt_declare_initrd() definition away from > asm/memory.h > > This cuts the number of objects rebuilds from 1920 down to 26, so a > factor 73 approximately. > > Apologies for the long CC list, please let me know how you would go > about merging that and if another approach would be preferable, e.g: > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > something like that. There may be a better way as of 4.20 because bootmem is now gone and only memblock is used. This should unify what each arch needs to do with initrd early. We need the physical address early for memblock reserving. Then later on we need the virtual address to access the initrd. Perhaps we should just change initrd_start and initrd_end to physical addresses (or add 2 new variables would be less invasive and allow for different translation than __va()). The sanity checks and memblock reserve could also perhaps be moved to a common location. Alternatively, given arm64 is the only oddball, I'd be fine with an "if (IS_ENABLED(CONFIG_ARM64))" condition in the default __early_init_dt_declare_initrd as long as we have a path to removing it like the above option. Rob ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 19:55 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-24 19:55 UTC (permalink / raw) To: Florian Fainelli Cc: linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev, Openrisc On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > Hi all, > > While investigating why ARM64 required a ton of objects to be rebuilt > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > because we define __early_init_dt_declare_initrd() differently and we do > that in arch/arm64/include/asm/memory.h which gets included by a fair > amount of other header files, and translation units as well. I scratch my head sometimes as to why some config options rebuild so much stuff. One down, ? to go. :) > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > systems that generate two kernels: one with the initramfs and one > without. buildroot is one of these build systems, OpenWrt is also > another one that does this. > > This patch series proposes adding an empty initrd.h to satisfy the need > for drivers/of/fdt.c to unconditionally include that file, and moves the > custom __early_init_dt_declare_initrd() definition away from > asm/memory.h > > This cuts the number of objects rebuilds from 1920 down to 26, so a > factor 73 approximately. > > Apologies for the long CC list, please let me know how you would go > about merging that and if another approach would be preferable, e.g: > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > something like that. There may be a better way as of 4.20 because bootmem is now gone and only memblock is used. This should unify what each arch needs to do with initrd early. We need the physical address early for memblock reserving. Then later on we need the virtual address to access the initrd. Perhaps we should just change initrd_start and initrd_end to physical addresses (or add 2 new variables would be less invasive and allow for different translation than __va()). The sanity checks and memblock reserve could also perhaps be moved to a common location. Alternatively, given arm64 is the only oddball, I'd be fine with an "if (IS_ENABLED(CONFIG_ARM64))" condition in the default __early_init_dt_declare_initrd as long as we have a path to removing it like the above option. Rob ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 19:55 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-24 19:55 UTC (permalink / raw) To: Florian Fainelli Cc: linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev, Openrisc, linux-parisc, linuxppc-dev, linux-riscv, linux-s390, SH-Linux, sparclinux, linux-um, linux-xtensa, devicetree, open list:GENERIC INCLUDE/ASM HEADER FILES On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > Hi all, > > While investigating why ARM64 required a ton of objects to be rebuilt > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > because we define __early_init_dt_declare_initrd() differently and we do > that in arch/arm64/include/asm/memory.h which gets included by a fair > amount of other header files, and translation units as well. I scratch my head sometimes as to why some config options rebuild so much stuff. One down, ? to go. :) > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > systems that generate two kernels: one with the initramfs and one > without. buildroot is one of these build systems, OpenWrt is also > another one that does this. > > This patch series proposes adding an empty initrd.h to satisfy the need > for drivers/of/fdt.c to unconditionally include that file, and moves the > custom __early_init_dt_declare_initrd() definition away from > asm/memory.h > > This cuts the number of objects rebuilds from 1920 down to 26, so a > factor 73 approximately. > > Apologies for the long CC list, please let me know how you would go > about merging that and if another approach would be preferable, e.g: > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > something like that. There may be a better way as of 4.20 because bootmem is now gone and only memblock is used. This should unify what each arch needs to do with initrd early. We need the physical address early for memblock reserving. Then later on we need the virtual address to access the initrd. Perhaps we should just change initrd_start and initrd_end to physical addresses (or add 2 new variables would be less invasive and allow for different translation than __va()). The sanity checks and memblock reserve could also perhaps be moved to a common location. Alternatively, given arm64 is the only oddball, I'd be fine with an "if (IS_ENABLED(CONFIG_ARM64))" condition in the default __early_init_dt_declare_initrd as long as we have a path to removing it like the above option. Rob ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 19:55 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-24 19:55 UTC (permalink / raw) To: Florian Fainelli Cc: linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev, Openrisc, linux-parisc, linuxppc-dev, linux-riscv, linux-s390, SH-Linux, sparclinux, linux-um, linux-xtensa, devicetree, open list:GENERIC INCLUDE/ASM HEADER FILES On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > Hi all, > > While investigating why ARM64 required a ton of objects to be rebuilt > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > because we define __early_init_dt_declare_initrd() differently and we do > that in arch/arm64/include/asm/memory.h which gets included by a fair > amount of other header files, and translation units as well. I scratch my head sometimes as to why some config options rebuild so much stuff. One down, ? to go. :) > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > systems that generate two kernels: one with the initramfs and one > without. buildroot is one of these build systems, OpenWrt is also > another one that does this. > > This patch series proposes adding an empty initrd.h to satisfy the need > for drivers/of/fdt.c to unconditionally include that file, and moves the > custom __early_init_dt_declare_initrd() definition away from > asm/memory.h > > This cuts the number of objects rebuilds from 1920 down to 26, so a > factor 73 approximately. > > Apologies for the long CC list, please let me know how you would go > about merging that and if another approach would be preferable, e.g: > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > something like that. There may be a better way as of 4.20 because bootmem is now gone and only memblock is used. This should unify what each arch needs to do with initrd early. We need the physical address early for memblock reserving. Then later on we need the virtual address to access the initrd. Perhaps we should just change initrd_start and initrd_end to physical addresses (or add 2 new variables would be less invasive and allow for different translation than __va()). The sanity checks and memblock reserve could also perhaps be moved to a common location. Alternatively, given arm64 is the only oddball, I'd be fine with an "if (IS_ENABLED(CONFIG_ARM64))" condition in the default __early_init_dt_declare_initrd as long as we have a path to removing it like the above option. Rob ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 19:55 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-24 19:55 UTC (permalink / raw) To: Florian Fainelli Cc: linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev, Openrisc On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > Hi all, > > While investigating why ARM64 required a ton of objects to be rebuilt > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > because we define __early_init_dt_declare_initrd() differently and we do > that in arch/arm64/include/asm/memory.h which gets included by a fair > amount of other header files, and translation units as well. I scratch my head sometimes as to why some config options rebuild so much stuff. One down, ? to go. :) > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > systems that generate two kernels: one with the initramfs and one > without. buildroot is one of these build systems, OpenWrt is also > another one that does this. > > This patch series proposes adding an empty initrd.h to satisfy the need > for drivers/of/fdt.c to unconditionally include that file, and moves the > custom __early_init_dt_declare_initrd() definition away from > asm/memory.h > > This cuts the number of objects rebuilds from 1920 down to 26, so a > factor 73 approximately. > > Apologies for the long CC list, please let me know how you would go > about merging that and if another approach would be preferable, e.g: > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > something like that. There may be a better way as of 4.20 because bootmem is now gone and only memblock is used. This should unify what each arch needs to do with initrd early. We need the physical address early for memblock reserving. Then later on we need the virtual address to access the initrd. Perhaps we should just change initrd_start and initrd_end to physical addresses (or add 2 new variables would be less invasive and allow for different translation than __va()). The sanity checks and memblock reserve could also perhaps be moved to a common location. Alternatively, given arm64 is the only oddball, I'd be fine with an "if (IS_ENABLED(CONFIG_ARM64))" condition in the default __early_init_dt_declare_initrd as long as we have a path to removing it like the above option. Rob ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD 2018-10-24 19:55 ` Rob Herring ` (8 preceding siblings ...) (?) @ 2018-10-24 20:01 ` Florian Fainelli -1 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 20:01 UTC (permalink / raw) To: Rob Herring Cc: linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev, Openrisc On 10/24/18 12:55 PM, Rob Herring wrote: > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >> >> Hi all, >> >> While investigating why ARM64 required a ton of objects to be rebuilt >> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was >> because we define __early_init_dt_declare_initrd() differently and we do >> that in arch/arm64/include/asm/memory.h which gets included by a fair >> amount of other header files, and translation units as well. > > I scratch my head sometimes as to why some config options rebuild so > much stuff. One down, ? to go. :) > This one was by far the most invasive one due to its include chain, but yes, there would be many more that could be optimized. >> Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build >> systems that generate two kernels: one with the initramfs and one >> without. buildroot is one of these build systems, OpenWrt is also >> another one that does this. >> >> This patch series proposes adding an empty initrd.h to satisfy the need >> for drivers/of/fdt.c to unconditionally include that file, and moves the >> custom __early_init_dt_declare_initrd() definition away from >> asm/memory.h >> >> This cuts the number of objects rebuilds from 1920 down to 26, so a >> factor 73 approximately. >> >> Apologies for the long CC list, please let me know how you would go >> about merging that and if another approach would be preferable, e.g: >> introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or >> something like that. > > There may be a better way as of 4.20 because bootmem is now gone and > only memblock is used. This should unify what each arch needs to do > with initrd early. We need the physical address early for memblock > reserving. Then later on we need the virtual address to access the > initrd. Perhaps we should just change initrd_start and initrd_end to > physical addresses (or add 2 new variables would be less invasive and > allow for different translation than __va()). The sanity checks and > memblock reserve could also perhaps be moved to a common location. > > Alternatively, given arm64 is the only oddball, I'd be fine with an > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > __early_init_dt_declare_initrd as long as we have a path to removing > it like the above option. OK, let me cook a patch doing that and meanwhile I will look at how much work is involved to implement the above option you outlined, which also sounds entirely reasonable. Thanks! -- Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* [OpenRISC] [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 20:01 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 20:01 UTC (permalink / raw) To: openrisc On 10/24/18 12:55 PM, Rob Herring wrote: > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >> >> Hi all, >> >> While investigating why ARM64 required a ton of objects to be rebuilt >> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was >> because we define __early_init_dt_declare_initrd() differently and we do >> that in arch/arm64/include/asm/memory.h which gets included by a fair >> amount of other header files, and translation units as well. > > I scratch my head sometimes as to why some config options rebuild so > much stuff. One down, ? to go. :) > This one was by far the most invasive one due to its include chain, but yes, there would be many more that could be optimized. >> Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build >> systems that generate two kernels: one with the initramfs and one >> without. buildroot is one of these build systems, OpenWrt is also >> another one that does this. >> >> This patch series proposes adding an empty initrd.h to satisfy the need >> for drivers/of/fdt.c to unconditionally include that file, and moves the >> custom __early_init_dt_declare_initrd() definition away from >> asm/memory.h >> >> This cuts the number of objects rebuilds from 1920 down to 26, so a >> factor 73 approximately. >> >> Apologies for the long CC list, please let me know how you would go >> about merging that and if another approach would be preferable, e.g: >> introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or >> something like that. > > There may be a better way as of 4.20 because bootmem is now gone and > only memblock is used. This should unify what each arch needs to do > with initrd early. We need the physical address early for memblock > reserving. Then later on we need the virtual address to access the > initrd. Perhaps we should just change initrd_start and initrd_end to > physical addresses (or add 2 new variables would be less invasive and > allow for different translation than __va()). The sanity checks and > memblock reserve could also perhaps be moved to a common location. > > Alternatively, given arm64 is the only oddball, I'd be fine with an > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > __early_init_dt_declare_initrd as long as we have a path to removing > it like the above option. OK, let me cook a patch doing that and meanwhile I will look at how much work is involved to implement the above option you outlined, which also sounds entirely reasonable. Thanks! -- Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 20:01 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 20:01 UTC (permalink / raw) To: linux-arm-kernel On 10/24/18 12:55 PM, Rob Herring wrote: > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >> >> Hi all, >> >> While investigating why ARM64 required a ton of objects to be rebuilt >> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was >> because we define __early_init_dt_declare_initrd() differently and we do >> that in arch/arm64/include/asm/memory.h which gets included by a fair >> amount of other header files, and translation units as well. > > I scratch my head sometimes as to why some config options rebuild so > much stuff. One down, ? to go. :) > This one was by far the most invasive one due to its include chain, but yes, there would be many more that could be optimized. >> Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build >> systems that generate two kernels: one with the initramfs and one >> without. buildroot is one of these build systems, OpenWrt is also >> another one that does this. >> >> This patch series proposes adding an empty initrd.h to satisfy the need >> for drivers/of/fdt.c to unconditionally include that file, and moves the >> custom __early_init_dt_declare_initrd() definition away from >> asm/memory.h >> >> This cuts the number of objects rebuilds from 1920 down to 26, so a >> factor 73 approximately. >> >> Apologies for the long CC list, please let me know how you would go >> about merging that and if another approach would be preferable, e.g: >> introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or >> something like that. > > There may be a better way as of 4.20 because bootmem is now gone and > only memblock is used. This should unify what each arch needs to do > with initrd early. We need the physical address early for memblock > reserving. Then later on we need the virtual address to access the > initrd. Perhaps we should just change initrd_start and initrd_end to > physical addresses (or add 2 new variables would be less invasive and > allow for different translation than __va()). The sanity checks and > memblock reserve could also perhaps be moved to a common location. > > Alternatively, given arm64 is the only oddball, I'd be fine with an > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > __early_init_dt_declare_initrd as long as we have a path to removing > it like the above option. OK, let me cook a patch doing that and meanwhile I will look at how much work is involved to implement the above option you outlined, which also sounds entirely reasonable. Thanks! -- Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 20:01 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 20:01 UTC (permalink / raw) To: linux-snps-arc On 10/24/18 12:55 PM, Rob Herring wrote: > On Wed, Oct 24, 2018@2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >> >> Hi all, >> >> While investigating why ARM64 required a ton of objects to be rebuilt >> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was >> because we define __early_init_dt_declare_initrd() differently and we do >> that in arch/arm64/include/asm/memory.h which gets included by a fair >> amount of other header files, and translation units as well. > > I scratch my head sometimes as to why some config options rebuild so > much stuff. One down, ? to go. :) > This one was by far the most invasive one due to its include chain, but yes, there would be many more that could be optimized. >> Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build >> systems that generate two kernels: one with the initramfs and one >> without. buildroot is one of these build systems, OpenWrt is also >> another one that does this. >> >> This patch series proposes adding an empty initrd.h to satisfy the need >> for drivers/of/fdt.c to unconditionally include that file, and moves the >> custom __early_init_dt_declare_initrd() definition away from >> asm/memory.h >> >> This cuts the number of objects rebuilds from 1920 down to 26, so a >> factor 73 approximately. >> >> Apologies for the long CC list, please let me know how you would go >> about merging that and if another approach would be preferable, e.g: >> introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or >> something like that. > > There may be a better way as of 4.20 because bootmem is now gone and > only memblock is used. This should unify what each arch needs to do > with initrd early. We need the physical address early for memblock > reserving. Then later on we need the virtual address to access the > initrd. Perhaps we should just change initrd_start and initrd_end to > physical addresses (or add 2 new variables would be less invasive and > allow for different translation than __va()). The sanity checks and > memblock reserve could also perhaps be moved to a common location. > > Alternatively, given arm64 is the only oddball, I'd be fine with an > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > __early_init_dt_declare_initrd as long as we have a path to removing > it like the above option. OK, let me cook a patch doing that and meanwhile I will look at how much work is involved to implement the above option you outlined, which also sounds entirely reasonable. Thanks! -- Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 20:01 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 20:01 UTC (permalink / raw) To: Rob Herring Cc: Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, linux-s390, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, Marc Zyngier, linux-um, linux-m68k, Openrisc, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-parisc, Greg Kroah-Hartman, linux-kernel, linux-alpha, Olof Johansson, nios2-dev, linuxppc-dev On 10/24/18 12:55 PM, Rob Herring wrote: > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >> >> Hi all, >> >> While investigating why ARM64 required a ton of objects to be rebuilt >> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was >> because we define __early_init_dt_declare_initrd() differently and we do >> that in arch/arm64/include/asm/memory.h which gets included by a fair >> amount of other header files, and translation units as well. > > I scratch my head sometimes as to why some config options rebuild so > much stuff. One down, ? to go. :) > This one was by far the most invasive one due to its include chain, but yes, there would be many more that could be optimized. >> Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build >> systems that generate two kernels: one with the initramfs and one >> without. buildroot is one of these build systems, OpenWrt is also >> another one that does this. >> >> This patch series proposes adding an empty initrd.h to satisfy the need >> for drivers/of/fdt.c to unconditionally include that file, and moves the >> custom __early_init_dt_declare_initrd() definition away from >> asm/memory.h >> >> This cuts the number of objects rebuilds from 1920 down to 26, so a >> factor 73 approximately. >> >> Apologies for the long CC list, please let me know how you would go >> about merging that and if another approach would be preferable, e.g: >> introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or >> something like that. > > There may be a better way as of 4.20 because bootmem is now gone and > only memblock is used. This should unify what each arch needs to do > with initrd early. We need the physical address early for memblock > reserving. Then later on we need the virtual address to access the > initrd. Perhaps we should just change initrd_start and initrd_end to > physical addresses (or add 2 new variables would be less invasive and > allow for different translation than __va()). The sanity checks and > memblock reserve could also perhaps be moved to a common location. > > Alternatively, given arm64 is the only oddball, I'd be fine with an > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > __early_init_dt_declare_initrd as long as we have a path to removing > it like the above option. OK, let me cook a patch doing that and meanwhile I will look at how much work is involved to implement the above option you outlined, which also sounds entirely reasonable. Thanks! -- Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 20:01 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 20:01 UTC (permalink / raw) To: Rob Herring Cc: Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, linux-s390, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, Marc Zyngier, linux-um, linux-m68k, Openrisc, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-parisc, Greg Kroah-Hartman, linux-kernel, linux-alpha, Olof Johansson, nios2-dev, linuxppc-dev On 10/24/18 12:55 PM, Rob Herring wrote: > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >> >> Hi all, >> >> While investigating why ARM64 required a ton of objects to be rebuilt >> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was >> because we define __early_init_dt_declare_initrd() differently and we do >> that in arch/arm64/include/asm/memory.h which gets included by a fair >> amount of other header files, and translation units as well. > > I scratch my head sometimes as to why some config options rebuild so > much stuff. One down, ? to go. :) > This one was by far the most invasive one due to its include chain, but yes, there would be many more that could be optimized. >> Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build >> systems that generate two kernels: one with the initramfs and one >> without. buildroot is one of these build systems, OpenWrt is also >> another one that does this. >> >> This patch series proposes adding an empty initrd.h to satisfy the need >> for drivers/of/fdt.c to unconditionally include that file, and moves the >> custom __early_init_dt_declare_initrd() definition away from >> asm/memory.h >> >> This cuts the number of objects rebuilds from 1920 down to 26, so a >> factor 73 approximately. >> >> Apologies for the long CC list, please let me know how you would go >> about merging that and if another approach would be preferable, e.g: >> introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or >> something like that. > > There may be a better way as of 4.20 because bootmem is now gone and > only memblock is used. This should unify what each arch needs to do > with initrd early. We need the physical address early for memblock > reserving. Then later on we need the virtual address to access the > initrd. Perhaps we should just change initrd_start and initrd_end to > physical addresses (or add 2 new variables would be less invasive and > allow for different translation than __va()). The sanity checks and > memblock reserve could also perhaps be moved to a common location. > > Alternatively, given arm64 is the only oddball, I'd be fine with an > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > __early_init_dt_declare_initrd as long as we have a path to removing > it like the above option. OK, let me cook a patch doing that and meanwhile I will look at how much work is involved to implement the above option you outlined, which also sounds entirely reasonable. Thanks! -- Florian _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 20:01 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 20:01 UTC (permalink / raw) To: linux-riscv On 10/24/18 12:55 PM, Rob Herring wrote: > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >> >> Hi all, >> >> While investigating why ARM64 required a ton of objects to be rebuilt >> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was >> because we define __early_init_dt_declare_initrd() differently and we do >> that in arch/arm64/include/asm/memory.h which gets included by a fair >> amount of other header files, and translation units as well. > > I scratch my head sometimes as to why some config options rebuild so > much stuff. One down, ? to go. :) > This one was by far the most invasive one due to its include chain, but yes, there would be many more that could be optimized. >> Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build >> systems that generate two kernels: one with the initramfs and one >> without. buildroot is one of these build systems, OpenWrt is also >> another one that does this. >> >> This patch series proposes adding an empty initrd.h to satisfy the need >> for drivers/of/fdt.c to unconditionally include that file, and moves the >> custom __early_init_dt_declare_initrd() definition away from >> asm/memory.h >> >> This cuts the number of objects rebuilds from 1920 down to 26, so a >> factor 73 approximately. >> >> Apologies for the long CC list, please let me know how you would go >> about merging that and if another approach would be preferable, e.g: >> introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or >> something like that. > > There may be a better way as of 4.20 because bootmem is now gone and > only memblock is used. This should unify what each arch needs to do > with initrd early. We need the physical address early for memblock > reserving. Then later on we need the virtual address to access the > initrd. Perhaps we should just change initrd_start and initrd_end to > physical addresses (or add 2 new variables would be less invasive and > allow for different translation than __va()). The sanity checks and > memblock reserve could also perhaps be moved to a common location. > > Alternatively, given arm64 is the only oddball, I'd be fine with an > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > __early_init_dt_declare_initrd as long as we have a path to removing > it like the above option. OK, let me cook a patch doing that and meanwhile I will look at how much work is involved to implement the above option you outlined, which also sounds entirely reasonable. Thanks! -- Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 20:01 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 20:01 UTC (permalink / raw) To: Rob Herring Cc: linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev, Openrisc On 10/24/18 12:55 PM, Rob Herring wrote: > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >> >> Hi all, >> >> While investigating why ARM64 required a ton of objects to be rebuilt >> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was >> because we define __early_init_dt_declare_initrd() differently and we do >> that in arch/arm64/include/asm/memory.h which gets included by a fair >> amount of other header files, and translation units as well. > > I scratch my head sometimes as to why some config options rebuild so > much stuff. One down, ? to go. :) > This one was by far the most invasive one due to its include chain, but yes, there would be many more that could be optimized. >> Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build >> systems that generate two kernels: one with the initramfs and one >> without. buildroot is one of these build systems, OpenWrt is also >> another one that does this. >> >> This patch series proposes adding an empty initrd.h to satisfy the need >> for drivers/of/fdt.c to unconditionally include that file, and moves the >> custom __early_init_dt_declare_initrd() definition away from >> asm/memory.h >> >> This cuts the number of objects rebuilds from 1920 down to 26, so a >> factor 73 approximately. >> >> Apologies for the long CC list, please let me know how you would go >> about merging that and if another approach would be preferable, e.g: >> introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or >> something like that. > > There may be a better way as of 4.20 because bootmem is now gone and > only memblock is used. This should unify what each arch needs to do > with initrd early. We need the physical address early for memblock > reserving. Then later on we need the virtual address to access the > initrd. Perhaps we should just change initrd_start and initrd_end to > physical addresses (or add 2 new variables would be less invasive and > allow for different translation than __va()). The sanity checks and > memblock reserve could also perhaps be moved to a common location. > > Alternatively, given arm64 is the only oddball, I'd be fine with an > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > __early_init_dt_declare_initrd as long as we have a path to removing > it like the above option. OK, let me cook a patch doing that and meanwhile I will look at how much work is involved to implement the above option you outlined, which also sounds entirely reasonable. Thanks! -- Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 20:01 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 20:01 UTC (permalink / raw) To: Rob Herring Cc: linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev, Openrisc, linux-parisc, linuxppc-dev, linux-riscv, linux-s390, SH-Linux, sparclinux, linux-um, linux-xtensa, devicetree, open list:GENERIC INCLUDE/ASM HEADER FILES On 10/24/18 12:55 PM, Rob Herring wrote: > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >> >> Hi all, >> >> While investigating why ARM64 required a ton of objects to be rebuilt >> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was >> because we define __early_init_dt_declare_initrd() differently and we do >> that in arch/arm64/include/asm/memory.h which gets included by a fair >> amount of other header files, and translation units as well. > > I scratch my head sometimes as to why some config options rebuild so > much stuff. One down, ? to go. :) > This one was by far the most invasive one due to its include chain, but yes, there would be many more that could be optimized. >> Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build >> systems that generate two kernels: one with the initramfs and one >> without. buildroot is one of these build systems, OpenWrt is also >> another one that does this. >> >> This patch series proposes adding an empty initrd.h to satisfy the need >> for drivers/of/fdt.c to unconditionally include that file, and moves the >> custom __early_init_dt_declare_initrd() definition away from >> asm/memory.h >> >> This cuts the number of objects rebuilds from 1920 down to 26, so a >> factor 73 approximately. >> >> Apologies for the long CC list, please let me know how you would go >> about merging that and if another approach would be preferable, e.g: >> introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or >> something like that. > > There may be a better way as of 4.20 because bootmem is now gone and > only memblock is used. This should unify what each arch needs to do > with initrd early. We need the physical address early for memblock > reserving. Then later on we need the virtual address to access the > initrd. Perhaps we should just change initrd_start and initrd_end to > physical addresses (or add 2 new variables would be less invasive and > allow for different translation than __va()). The sanity checks and > memblock reserve could also perhaps be moved to a common location. > > Alternatively, given arm64 is the only oddball, I'd be fine with an > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > __early_init_dt_declare_initrd as long as we have a path to removing > it like the above option. OK, let me cook a patch doing that and meanwhile I will look at how much work is involved to implement the above option you outlined, which also sounds entirely reasonable. Thanks! -- Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 20:01 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 20:01 UTC (permalink / raw) To: Rob Herring Cc: linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev, Openrisc, linux-parisc, linuxppc-dev, linux-riscv, linux-s390, SH-Linux, sparclinux, linux-um, linux-xtensa, devicetree, open list:GENERIC INCLUDE/ASM HEADER FILES On 10/24/18 12:55 PM, Rob Herring wrote: > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >> >> Hi all, >> >> While investigating why ARM64 required a ton of objects to be rebuilt >> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was >> because we define __early_init_dt_declare_initrd() differently and we do >> that in arch/arm64/include/asm/memory.h which gets included by a fair >> amount of other header files, and translation units as well. > > I scratch my head sometimes as to why some config options rebuild so > much stuff. One down, ? to go. :) > This one was by far the most invasive one due to its include chain, but yes, there would be many more that could be optimized. >> Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build >> systems that generate two kernels: one with the initramfs and one >> without. buildroot is one of these build systems, OpenWrt is also >> another one that does this. >> >> This patch series proposes adding an empty initrd.h to satisfy the need >> for drivers/of/fdt.c to unconditionally include that file, and moves the >> custom __early_init_dt_declare_initrd() definition away from >> asm/memory.h >> >> This cuts the number of objects rebuilds from 1920 down to 26, so a >> factor 73 approximately. >> >> Apologies for the long CC list, please let me know how you would go >> about merging that and if another approach would be preferable, e.g: >> introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or >> something like that. > > There may be a better way as of 4.20 because bootmem is now gone and > only memblock is used. This should unify what each arch needs to do > with initrd early. We need the physical address early for memblock > reserving. Then later on we need the virtual address to access the > initrd. Perhaps we should just change initrd_start and initrd_end to > physical addresses (or add 2 new variables would be less invasive and > allow for different translation than __va()). The sanity checks and > memblock reserve could also perhaps be moved to a common location. > > Alternatively, given arm64 is the only oddball, I'd be fine with an > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > __early_init_dt_declare_initrd as long as we have a path to removing > it like the above option. OK, let me cook a patch doing that and meanwhile I will look at how much work is involved to implement the above option you outlined, which also sounds entirely reasonable. Thanks! -- Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 20:01 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-24 20:01 UTC (permalink / raw) To: Rob Herring Cc: linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev, Openrisc On 10/24/18 12:55 PM, Rob Herring wrote: > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >> >> Hi all, >> >> While investigating why ARM64 required a ton of objects to be rebuilt >> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was >> because we define __early_init_dt_declare_initrd() differently and we do >> that in arch/arm64/include/asm/memory.h which gets included by a fair >> amount of other header files, and translation units as well. > > I scratch my head sometimes as to why some config options rebuild so > much stuff. One down, ? to go. :) > This one was by far the most invasive one due to its include chain, but yes, there would be many more that could be optimized. >> Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build >> systems that generate two kernels: one with the initramfs and one >> without. buildroot is one of these build systems, OpenWrt is also >> another one that does this. >> >> This patch series proposes adding an empty initrd.h to satisfy the need >> for drivers/of/fdt.c to unconditionally include that file, and moves the >> custom __early_init_dt_declare_initrd() definition away from >> asm/memory.h >> >> This cuts the number of objects rebuilds from 1920 down to 26, so a >> factor 73 approximately. >> >> Apologies for the long CC list, please let me know how you would go >> about merging that and if another approach would be preferable, e.g: >> introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or >> something like that. > > There may be a better way as of 4.20 because bootmem is now gone and > only memblock is used. This should unify what each arch needs to do > with initrd early. We need the physical address early for memblock > reserving. Then later on we need the virtual address to access the > initrd. Perhaps we should just change initrd_start and initrd_end to > physical addresses (or add 2 new variables would be less invasive and > allow for different translation than __va()). The sanity checks and > memblock reserve could also perhaps be moved to a common location. > > Alternatively, given arm64 is the only oddball, I'd be fine with an > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > __early_init_dt_declare_initrd as long as we have a path to removing > it like the above option. OK, let me cook a patch doing that and meanwhile I will look at how much work is involved to implement the above option you outlined, which also sounds entirely reasonable. Thanks! -- Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD 2018-10-24 20:01 ` Florian Fainelli ` (8 preceding siblings ...) (?) @ 2018-10-24 21:25 ` Rob Herring -1 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-24 21:25 UTC (permalink / raw) To: Florian Fainelli Cc: linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev, Openrisc On Wed, Oct 24, 2018 at 3:01 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > On 10/24/18 12:55 PM, Rob Herring wrote: > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > >> > >> Hi all, > >> > >> While investigating why ARM64 required a ton of objects to be rebuilt > >> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > >> because we define __early_init_dt_declare_initrd() differently and we do > >> that in arch/arm64/include/asm/memory.h which gets included by a fair > >> amount of other header files, and translation units as well. > > > > I scratch my head sometimes as to why some config options rebuild so > > much stuff. One down, ? to go. :) > > > > This one was by far the most invasive one due to its include chain, but > yes, there would be many more that could be optimized. > > >> Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > >> systems that generate two kernels: one with the initramfs and one > >> without. buildroot is one of these build systems, OpenWrt is also > >> another one that does this. > >> > >> This patch series proposes adding an empty initrd.h to satisfy the need > >> for drivers/of/fdt.c to unconditionally include that file, and moves the > >> custom __early_init_dt_declare_initrd() definition away from > >> asm/memory.h > >> > >> This cuts the number of objects rebuilds from 1920 down to 26, so a > >> factor 73 approximately. > >> > >> Apologies for the long CC list, please let me know how you would go > >> about merging that and if another approach would be preferable, e.g: > >> introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > >> something like that. > > > > There may be a better way as of 4.20 because bootmem is now gone and > > only memblock is used. This should unify what each arch needs to do > > with initrd early. We need the physical address early for memblock > > reserving. Then later on we need the virtual address to access the > > initrd. Perhaps we should just change initrd_start and initrd_end to > > physical addresses (or add 2 new variables would be less invasive and > > allow for different translation than __va()). The sanity checks and > > memblock reserve could also perhaps be moved to a common location. > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > __early_init_dt_declare_initrd as long as we have a path to removing > > it like the above option. > > OK, let me cook a patch doing that and meanwhile I will look at how much > work is involved to implement the above option you outlined, which also > sounds entirely reasonable. BTW, I would suspect that initrd_below_start_ok being 1 is not okay for most arches. I'm not sure how that would work. min_low_pfn is typically based on the start of memory. arm64 is not even setting it. Rob > -- > Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* [OpenRISC] [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 21:25 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-24 21:25 UTC (permalink / raw) To: openrisc On Wed, Oct 24, 2018 at 3:01 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > On 10/24/18 12:55 PM, Rob Herring wrote: > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > >> > >> Hi all, > >> > >> While investigating why ARM64 required a ton of objects to be rebuilt > >> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > >> because we define __early_init_dt_declare_initrd() differently and we do > >> that in arch/arm64/include/asm/memory.h which gets included by a fair > >> amount of other header files, and translation units as well. > > > > I scratch my head sometimes as to why some config options rebuild so > > much stuff. One down, ? to go. :) > > > > This one was by far the most invasive one due to its include chain, but > yes, there would be many more that could be optimized. > > >> Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > >> systems that generate two kernels: one with the initramfs and one > >> without. buildroot is one of these build systems, OpenWrt is also > >> another one that does this. > >> > >> This patch series proposes adding an empty initrd.h to satisfy the need > >> for drivers/of/fdt.c to unconditionally include that file, and moves the > >> custom __early_init_dt_declare_initrd() definition away from > >> asm/memory.h > >> > >> This cuts the number of objects rebuilds from 1920 down to 26, so a > >> factor 73 approximately. > >> > >> Apologies for the long CC list, please let me know how you would go > >> about merging that and if another approach would be preferable, e.g: > >> introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > >> something like that. > > > > There may be a better way as of 4.20 because bootmem is now gone and > > only memblock is used. This should unify what each arch needs to do > > with initrd early. We need the physical address early for memblock > > reserving. Then later on we need the virtual address to access the > > initrd. Perhaps we should just change initrd_start and initrd_end to > > physical addresses (or add 2 new variables would be less invasive and > > allow for different translation than __va()). The sanity checks and > > memblock reserve could also perhaps be moved to a common location. > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > __early_init_dt_declare_initrd as long as we have a path to removing > > it like the above option. > > OK, let me cook a patch doing that and meanwhile I will look at how much > work is involved to implement the above option you outlined, which also > sounds entirely reasonable. BTW, I would suspect that initrd_below_start_ok being 1 is not okay for most arches. I'm not sure how that would work. min_low_pfn is typically based on the start of memory. arm64 is not even setting it. Rob > -- > Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 21:25 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-24 21:25 UTC (permalink / raw) To: linux-arm-kernel On Wed, Oct 24, 2018 at 3:01 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > On 10/24/18 12:55 PM, Rob Herring wrote: > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > >> > >> Hi all, > >> > >> While investigating why ARM64 required a ton of objects to be rebuilt > >> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > >> because we define __early_init_dt_declare_initrd() differently and we do > >> that in arch/arm64/include/asm/memory.h which gets included by a fair > >> amount of other header files, and translation units as well. > > > > I scratch my head sometimes as to why some config options rebuild so > > much stuff. One down, ? to go. :) > > > > This one was by far the most invasive one due to its include chain, but > yes, there would be many more that could be optimized. > > >> Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > >> systems that generate two kernels: one with the initramfs and one > >> without. buildroot is one of these build systems, OpenWrt is also > >> another one that does this. > >> > >> This patch series proposes adding an empty initrd.h to satisfy the need > >> for drivers/of/fdt.c to unconditionally include that file, and moves the > >> custom __early_init_dt_declare_initrd() definition away from > >> asm/memory.h > >> > >> This cuts the number of objects rebuilds from 1920 down to 26, so a > >> factor 73 approximately. > >> > >> Apologies for the long CC list, please let me know how you would go > >> about merging that and if another approach would be preferable, e.g: > >> introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > >> something like that. > > > > There may be a better way as of 4.20 because bootmem is now gone and > > only memblock is used. This should unify what each arch needs to do > > with initrd early. We need the physical address early for memblock > > reserving. Then later on we need the virtual address to access the > > initrd. Perhaps we should just change initrd_start and initrd_end to > > physical addresses (or add 2 new variables would be less invasive and > > allow for different translation than __va()). The sanity checks and > > memblock reserve could also perhaps be moved to a common location. > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > __early_init_dt_declare_initrd as long as we have a path to removing > > it like the above option. > > OK, let me cook a patch doing that and meanwhile I will look at how much > work is involved to implement the above option you outlined, which also > sounds entirely reasonable. BTW, I would suspect that initrd_below_start_ok being 1 is not okay for most arches. I'm not sure how that would work. min_low_pfn is typically based on the start of memory. arm64 is not even setting it. Rob > -- > Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 21:25 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-24 21:25 UTC (permalink / raw) To: linux-snps-arc On Wed, Oct 24, 2018@3:01 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > On 10/24/18 12:55 PM, Rob Herring wrote: > > On Wed, Oct 24, 2018@2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > >> > >> Hi all, > >> > >> While investigating why ARM64 required a ton of objects to be rebuilt > >> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > >> because we define __early_init_dt_declare_initrd() differently and we do > >> that in arch/arm64/include/asm/memory.h which gets included by a fair > >> amount of other header files, and translation units as well. > > > > I scratch my head sometimes as to why some config options rebuild so > > much stuff. One down, ? to go. :) > > > > This one was by far the most invasive one due to its include chain, but > yes, there would be many more that could be optimized. > > >> Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > >> systems that generate two kernels: one with the initramfs and one > >> without. buildroot is one of these build systems, OpenWrt is also > >> another one that does this. > >> > >> This patch series proposes adding an empty initrd.h to satisfy the need > >> for drivers/of/fdt.c to unconditionally include that file, and moves the > >> custom __early_init_dt_declare_initrd() definition away from > >> asm/memory.h > >> > >> This cuts the number of objects rebuilds from 1920 down to 26, so a > >> factor 73 approximately. > >> > >> Apologies for the long CC list, please let me know how you would go > >> about merging that and if another approach would be preferable, e.g: > >> introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > >> something like that. > > > > There may be a better way as of 4.20 because bootmem is now gone and > > only memblock is used. This should unify what each arch needs to do > > with initrd early. We need the physical address early for memblock > > reserving. Then later on we need the virtual address to access the > > initrd. Perhaps we should just change initrd_start and initrd_end to > > physical addresses (or add 2 new variables would be less invasive and > > allow for different translation than __va()). The sanity checks and > > memblock reserve could also perhaps be moved to a common location. > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > __early_init_dt_declare_initrd as long as we have a path to removing > > it like the above option. > > OK, let me cook a patch doing that and meanwhile I will look at how much > work is involved to implement the above option you outlined, which also > sounds entirely reasonable. BTW, I would suspect that initrd_below_start_ok being 1 is not okay for most arches. I'm not sure how that would work. min_low_pfn is typically based on the start of memory. arm64 is not even setting it. Rob > -- > Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 21:25 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-24 21:25 UTC (permalink / raw) To: Florian Fainelli Cc: Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, linux-s390, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, Marc Zyngier, linux-um, linux-m68k, Openrisc, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-parisc, Greg Kroah-Hartman, linux-kernel, linux-alpha, Olof Johansson, nios2-dev, linuxppc-dev On Wed, Oct 24, 2018 at 3:01 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > On 10/24/18 12:55 PM, Rob Herring wrote: > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > >> > >> Hi all, > >> > >> While investigating why ARM64 required a ton of objects to be rebuilt > >> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > >> because we define __early_init_dt_declare_initrd() differently and we do > >> that in arch/arm64/include/asm/memory.h which gets included by a fair > >> amount of other header files, and translation units as well. > > > > I scratch my head sometimes as to why some config options rebuild so > > much stuff. One down, ? to go. :) > > > > This one was by far the most invasive one due to its include chain, but > yes, there would be many more that could be optimized. > > >> Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > >> systems that generate two kernels: one with the initramfs and one > >> without. buildroot is one of these build systems, OpenWrt is also > >> another one that does this. > >> > >> This patch series proposes adding an empty initrd.h to satisfy the need > >> for drivers/of/fdt.c to unconditionally include that file, and moves the > >> custom __early_init_dt_declare_initrd() definition away from > >> asm/memory.h > >> > >> This cuts the number of objects rebuilds from 1920 down to 26, so a > >> factor 73 approximately. > >> > >> Apologies for the long CC list, please let me know how you would go > >> about merging that and if another approach would be preferable, e.g: > >> introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > >> something like that. > > > > There may be a better way as of 4.20 because bootmem is now gone and > > only memblock is used. This should unify what each arch needs to do > > with initrd early. We need the physical address early for memblock > > reserving. Then later on we need the virtual address to access the > > initrd. Perhaps we should just change initrd_start and initrd_end to > > physical addresses (or add 2 new variables would be less invasive and > > allow for different translation than __va()). The sanity checks and > > memblock reserve could also perhaps be moved to a common location. > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > __early_init_dt_declare_initrd as long as we have a path to removing > > it like the above option. > > OK, let me cook a patch doing that and meanwhile I will look at how much > work is involved to implement the above option you outlined, which also > sounds entirely reasonable. BTW, I would suspect that initrd_below_start_ok being 1 is not okay for most arches. I'm not sure how that would work. min_low_pfn is typically based on the start of memory. arm64 is not even setting it. Rob > -- > Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 21:25 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-24 21:25 UTC (permalink / raw) To: Florian Fainelli Cc: Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, linux-s390, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, Marc Zyngier, linux-um, linux-m68k, Openrisc, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-parisc, Greg Kroah-Hartman, linux-kernel, linux-alpha, Olof Johansson, nios2-dev, linuxppc-dev On Wed, Oct 24, 2018 at 3:01 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > On 10/24/18 12:55 PM, Rob Herring wrote: > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > >> > >> Hi all, > >> > >> While investigating why ARM64 required a ton of objects to be rebuilt > >> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > >> because we define __early_init_dt_declare_initrd() differently and we do > >> that in arch/arm64/include/asm/memory.h which gets included by a fair > >> amount of other header files, and translation units as well. > > > > I scratch my head sometimes as to why some config options rebuild so > > much stuff. One down, ? to go. :) > > > > This one was by far the most invasive one due to its include chain, but > yes, there would be many more that could be optimized. > > >> Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > >> systems that generate two kernels: one with the initramfs and one > >> without. buildroot is one of these build systems, OpenWrt is also > >> another one that does this. > >> > >> This patch series proposes adding an empty initrd.h to satisfy the need > >> for drivers/of/fdt.c to unconditionally include that file, and moves the > >> custom __early_init_dt_declare_initrd() definition away from > >> asm/memory.h > >> > >> This cuts the number of objects rebuilds from 1920 down to 26, so a > >> factor 73 approximately. > >> > >> Apologies for the long CC list, please let me know how you would go > >> about merging that and if another approach would be preferable, e.g: > >> introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > >> something like that. > > > > There may be a better way as of 4.20 because bootmem is now gone and > > only memblock is used. This should unify what each arch needs to do > > with initrd early. We need the physical address early for memblock > > reserving. Then later on we need the virtual address to access the > > initrd. Perhaps we should just change initrd_start and initrd_end to > > physical addresses (or add 2 new variables would be less invasive and > > allow for different translation than __va()). The sanity checks and > > memblock reserve could also perhaps be moved to a common location. > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > __early_init_dt_declare_initrd as long as we have a path to removing > > it like the above option. > > OK, let me cook a patch doing that and meanwhile I will look at how much > work is involved to implement the above option you outlined, which also > sounds entirely reasonable. BTW, I would suspect that initrd_below_start_ok being 1 is not okay for most arches. I'm not sure how that would work. min_low_pfn is typically based on the start of memory. arm64 is not even setting it. Rob > -- > Florian _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 21:25 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-24 21:25 UTC (permalink / raw) To: linux-riscv On Wed, Oct 24, 2018 at 3:01 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > On 10/24/18 12:55 PM, Rob Herring wrote: > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > >> > >> Hi all, > >> > >> While investigating why ARM64 required a ton of objects to be rebuilt > >> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > >> because we define __early_init_dt_declare_initrd() differently and we do > >> that in arch/arm64/include/asm/memory.h which gets included by a fair > >> amount of other header files, and translation units as well. > > > > I scratch my head sometimes as to why some config options rebuild so > > much stuff. One down, ? to go. :) > > > > This one was by far the most invasive one due to its include chain, but > yes, there would be many more that could be optimized. > > >> Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > >> systems that generate two kernels: one with the initramfs and one > >> without. buildroot is one of these build systems, OpenWrt is also > >> another one that does this. > >> > >> This patch series proposes adding an empty initrd.h to satisfy the need > >> for drivers/of/fdt.c to unconditionally include that file, and moves the > >> custom __early_init_dt_declare_initrd() definition away from > >> asm/memory.h > >> > >> This cuts the number of objects rebuilds from 1920 down to 26, so a > >> factor 73 approximately. > >> > >> Apologies for the long CC list, please let me know how you would go > >> about merging that and if another approach would be preferable, e.g: > >> introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > >> something like that. > > > > There may be a better way as of 4.20 because bootmem is now gone and > > only memblock is used. This should unify what each arch needs to do > > with initrd early. We need the physical address early for memblock > > reserving. Then later on we need the virtual address to access the > > initrd. Perhaps we should just change initrd_start and initrd_end to > > physical addresses (or add 2 new variables would be less invasive and > > allow for different translation than __va()). The sanity checks and > > memblock reserve could also perhaps be moved to a common location. > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > __early_init_dt_declare_initrd as long as we have a path to removing > > it like the above option. > > OK, let me cook a patch doing that and meanwhile I will look at how much > work is involved to implement the above option you outlined, which also > sounds entirely reasonable. BTW, I would suspect that initrd_below_start_ok being 1 is not okay for most arches. I'm not sure how that would work. min_low_pfn is typically based on the start of memory. arm64 is not even setting it. Rob > -- > Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 21:25 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-24 21:25 UTC (permalink / raw) To: Florian Fainelli Cc: linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev, Openrisc On Wed, Oct 24, 2018 at 3:01 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > On 10/24/18 12:55 PM, Rob Herring wrote: > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > >> > >> Hi all, > >> > >> While investigating why ARM64 required a ton of objects to be rebuilt > >> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > >> because we define __early_init_dt_declare_initrd() differently and we do > >> that in arch/arm64/include/asm/memory.h which gets included by a fair > >> amount of other header files, and translation units as well. > > > > I scratch my head sometimes as to why some config options rebuild so > > much stuff. One down, ? to go. :) > > > > This one was by far the most invasive one due to its include chain, but > yes, there would be many more that could be optimized. > > >> Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > >> systems that generate two kernels: one with the initramfs and one > >> without. buildroot is one of these build systems, OpenWrt is also > >> another one that does this. > >> > >> This patch series proposes adding an empty initrd.h to satisfy the need > >> for drivers/of/fdt.c to unconditionally include that file, and moves the > >> custom __early_init_dt_declare_initrd() definition away from > >> asm/memory.h > >> > >> This cuts the number of objects rebuilds from 1920 down to 26, so a > >> factor 73 approximately. > >> > >> Apologies for the long CC list, please let me know how you would go > >> about merging that and if another approach would be preferable, e.g: > >> introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > >> something like that. > > > > There may be a better way as of 4.20 because bootmem is now gone and > > only memblock is used. This should unify what each arch needs to do > > with initrd early. We need the physical address early for memblock > > reserving. Then later on we need the virtual address to access the > > initrd. Perhaps we should just change initrd_start and initrd_end to > > physical addresses (or add 2 new variables would be less invasive and > > allow for different translation than __va()). The sanity checks and > > memblock reserve could also perhaps be moved to a common location. > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > __early_init_dt_declare_initrd as long as we have a path to removing > > it like the above option. > > OK, let me cook a patch doing that and meanwhile I will look at how much > work is involved to implement the above option you outlined, which also > sounds entirely reasonable. BTW, I would suspect that initrd_below_start_ok being 1 is not okay for most arches. I'm not sure how that would work. min_low_pfn is typically based on the start of memory. arm64 is not even setting it. Rob > -- > Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 21:25 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-24 21:25 UTC (permalink / raw) To: Florian Fainelli Cc: linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev, Openrisc, linux-parisc, linuxppc-dev, linux-riscv, linux-s390, SH-Linux, sparclinux, linux-um, linux-xtensa, devicetree, open list:GENERIC INCLUDE/ASM HEADER FILES On Wed, Oct 24, 2018 at 3:01 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > On 10/24/18 12:55 PM, Rob Herring wrote: > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > >> > >> Hi all, > >> > >> While investigating why ARM64 required a ton of objects to be rebuilt > >> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > >> because we define __early_init_dt_declare_initrd() differently and we do > >> that in arch/arm64/include/asm/memory.h which gets included by a fair > >> amount of other header files, and translation units as well. > > > > I scratch my head sometimes as to why some config options rebuild so > > much stuff. One down, ? to go. :) > > > > This one was by far the most invasive one due to its include chain, but > yes, there would be many more that could be optimized. > > >> Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > >> systems that generate two kernels: one with the initramfs and one > >> without. buildroot is one of these build systems, OpenWrt is also > >> another one that does this. > >> > >> This patch series proposes adding an empty initrd.h to satisfy the need > >> for drivers/of/fdt.c to unconditionally include that file, and moves the > >> custom __early_init_dt_declare_initrd() definition away from > >> asm/memory.h > >> > >> This cuts the number of objects rebuilds from 1920 down to 26, so a > >> factor 73 approximately. > >> > >> Apologies for the long CC list, please let me know how you would go > >> about merging that and if another approach would be preferable, e.g: > >> introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > >> something like that. > > > > There may be a better way as of 4.20 because bootmem is now gone and > > only memblock is used. This should unify what each arch needs to do > > with initrd early. We need the physical address early for memblock > > reserving. Then later on we need the virtual address to access the > > initrd. Perhaps we should just change initrd_start and initrd_end to > > physical addresses (or add 2 new variables would be less invasive and > > allow for different translation than __va()). The sanity checks and > > memblock reserve could also perhaps be moved to a common location. > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > __early_init_dt_declare_initrd as long as we have a path to removing > > it like the above option. > > OK, let me cook a patch doing that and meanwhile I will look at how much > work is involved to implement the above option you outlined, which also > sounds entirely reasonable. BTW, I would suspect that initrd_below_start_ok being 1 is not okay for most arches. I'm not sure how that would work. min_low_pfn is typically based on the start of memory. arm64 is not even setting it. Rob > -- > Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 21:25 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-24 21:25 UTC (permalink / raw) To: Florian Fainelli Cc: linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev, Openrisc, linux-parisc, linuxppc-dev, linux-riscv, linux-s390, SH-Linux, sparclinux, linux-um, linux-xtensa, devicetree, open list:GENERIC INCLUDE/ASM HEADER FILES On Wed, Oct 24, 2018 at 3:01 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > On 10/24/18 12:55 PM, Rob Herring wrote: > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > >> > >> Hi all, > >> > >> While investigating why ARM64 required a ton of objects to be rebuilt > >> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > >> because we define __early_init_dt_declare_initrd() differently and we do > >> that in arch/arm64/include/asm/memory.h which gets included by a fair > >> amount of other header files, and translation units as well. > > > > I scratch my head sometimes as to why some config options rebuild so > > much stuff. One down, ? to go. :) > > > > This one was by far the most invasive one due to its include chain, but > yes, there would be many more that could be optimized. > > >> Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > >> systems that generate two kernels: one with the initramfs and one > >> without. buildroot is one of these build systems, OpenWrt is also > >> another one that does this. > >> > >> This patch series proposes adding an empty initrd.h to satisfy the need > >> for drivers/of/fdt.c to unconditionally include that file, and moves the > >> custom __early_init_dt_declare_initrd() definition away from > >> asm/memory.h > >> > >> This cuts the number of objects rebuilds from 1920 down to 26, so a > >> factor 73 approximately. > >> > >> Apologies for the long CC list, please let me know how you would go > >> about merging that and if another approach would be preferable, e.g: > >> introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > >> something like that. > > > > There may be a better way as of 4.20 because bootmem is now gone and > > only memblock is used. This should unify what each arch needs to do > > with initrd early. We need the physical address early for memblock > > reserving. Then later on we need the virtual address to access the > > initrd. Perhaps we should just change initrd_start and initrd_end to > > physical addresses (or add 2 new variables would be less invasive and > > allow for different translation than __va()). The sanity checks and > > memblock reserve could also perhaps be moved to a common location. > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > __early_init_dt_declare_initrd as long as we have a path to removing > > it like the above option. > > OK, let me cook a patch doing that and meanwhile I will look at how much > work is involved to implement the above option you outlined, which also > sounds entirely reasonable. BTW, I would suspect that initrd_below_start_ok being 1 is not okay for most arches. I'm not sure how that would work. min_low_pfn is typically based on the start of memory. arm64 is not even setting it. Rob > -- > Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-24 21:25 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-24 21:25 UTC (permalink / raw) To: Florian Fainelli Cc: linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev, Openrisc On Wed, Oct 24, 2018 at 3:01 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > On 10/24/18 12:55 PM, Rob Herring wrote: > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > >> > >> Hi all, > >> > >> While investigating why ARM64 required a ton of objects to be rebuilt > >> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > >> because we define __early_init_dt_declare_initrd() differently and we do > >> that in arch/arm64/include/asm/memory.h which gets included by a fair > >> amount of other header files, and translation units as well. > > > > I scratch my head sometimes as to why some config options rebuild so > > much stuff. One down, ? to go. :) > > > > This one was by far the most invasive one due to its include chain, but > yes, there would be many more that could be optimized. > > >> Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > >> systems that generate two kernels: one with the initramfs and one > >> without. buildroot is one of these build systems, OpenWrt is also > >> another one that does this. > >> > >> This patch series proposes adding an empty initrd.h to satisfy the need > >> for drivers/of/fdt.c to unconditionally include that file, and moves the > >> custom __early_init_dt_declare_initrd() definition away from > >> asm/memory.h > >> > >> This cuts the number of objects rebuilds from 1920 down to 26, so a > >> factor 73 approximately. > >> > >> Apologies for the long CC list, please let me know how you would go > >> about merging that and if another approach would be preferable, e.g: > >> introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > >> something like that. > > > > There may be a better way as of 4.20 because bootmem is now gone and > > only memblock is used. This should unify what each arch needs to do > > with initrd early. We need the physical address early for memblock > > reserving. Then later on we need the virtual address to access the > > initrd. Perhaps we should just change initrd_start and initrd_end to > > physical addresses (or add 2 new variables would be less invasive and > > allow for different translation than __va()). The sanity checks and > > memblock reserve could also perhaps be moved to a common location. > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > __early_init_dt_declare_initrd as long as we have a path to removing > > it like the above option. > > OK, let me cook a patch doing that and meanwhile I will look at how much > work is involved to implement the above option you outlined, which also > sounds entirely reasonable. BTW, I would suspect that initrd_below_start_ok being 1 is not okay for most arches. I'm not sure how that would work. min_low_pfn is typically based on the start of memory. arm64 is not even setting it. Rob > -- > Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD 2018-10-24 19:55 ` Rob Herring ` (8 preceding siblings ...) (?) @ 2018-10-25 9:38 ` Mike Rapoport -1 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-25 9:38 UTC (permalink / raw) To: Rob Herring Cc: Florian Fainelli, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > Hi all, > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > because we define __early_init_dt_declare_initrd() differently and we do > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > amount of other header files, and translation units as well. > > I scratch my head sometimes as to why some config options rebuild so > much stuff. One down, ? to go. :) > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > systems that generate two kernels: one with the initramfs and one > > without. buildroot is one of these build systems, OpenWrt is also > > another one that does this. > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > custom __early_init_dt_declare_initrd() definition away from > > asm/memory.h > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > factor 73 approximately. > > > > Apologies for the long CC list, please let me know how you would go > > about merging that and if another approach would be preferable, e.g: > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > something like that. > > There may be a better way as of 4.20 because bootmem is now gone and > only memblock is used. This should unify what each arch needs to do > with initrd early. We need the physical address early for memblock > reserving. Then later on we need the virtual address to access the > initrd. Perhaps we should just change initrd_start and initrd_end to > physical addresses (or add 2 new variables would be less invasive and > allow for different translation than __va()). The sanity checks and > memblock reserve could also perhaps be moved to a common location. > > Alternatively, given arm64 is the only oddball, I'd be fine with an > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > __early_init_dt_declare_initrd as long as we have a path to removing > it like the above option. I think arm64 does not have to redefine __early_init_dt_declare_initrd(). Something like this might be just all we need (completely untested, probably it won't even compile): diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index 9d9582c..e9ca238 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; phys_addr_t arm64_dma_phys_limit __ro_after_init; #ifdef CONFIG_BLK_DEV_INITRD + +static phys_addr_t initrd_start_phys, initrd_end_phys; + static int __init early_initrd(char *p) { unsigned long start, size; @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) if (*endp = ',') { size = memparse(endp + 1, NULL); - initrd_start = start; - initrd_end = start + size; + initrd_start_phys = start; + initrd_end_phys = end; } return 0; } @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) memblock_add(__pa_symbol(_text), (u64)(_end - _text)); } - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && + (initrd_start || initrd_start_phys)) { + /* + * FIXME: ensure proper precendence between + * early_initrd and DT when both are present + */ + if (initrd_start) { + initrd_start_phys = __phys_to_virt(initrd_start); + initrd_end_phys = __phys_to_virt(initrd_end); + } else if (initrd_start_phys) { + initrd_start = __va(initrd_start_phys); + initrd_end = __va(initrd_start_phys); + } + /* * Add back the memory we just removed if it results in the * initrd to become inaccessible via the linear mapping. * Otherwise, this is a no-op */ - u64 base = initrd_start & PAGE_MASK; - u64 size = PAGE_ALIGN(initrd_end) - base; + u64 base = initrd_start_phys & PAGE_MASK; + u64 size = PAGE_ALIGN(initrd_end_phys) - base; /* * We can only add back the initrd memory if we don't end up @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) * pagetables with memblock. */ memblock_reserve(__pa_symbol(_text), _end - _text); -#ifdef CONFIG_BLK_DEV_INITRD +#if 0 if (initrd_start) { memblock_reserve(initrd_start, initrd_end - initrd_start); > Rob > -- Sincerely yours, Mike. ^ permalink raw reply related [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 9:38 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-25 9:38 UTC (permalink / raw) To: Rob Herring Cc: Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, linux-s390, Florian Fainelli, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, Marc Zyngier, linux-um, linux-m68k, Openrisc, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-parisc, Greg Kroah-Hartman, linux-kernel, linux-alpha, Olof Johansson, nios2-dev, linuxppc-dev On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > Hi all, > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > because we define __early_init_dt_declare_initrd() differently and we do > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > amount of other header files, and translation units as well. > > I scratch my head sometimes as to why some config options rebuild so > much stuff. One down, ? to go. :) > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > systems that generate two kernels: one with the initramfs and one > > without. buildroot is one of these build systems, OpenWrt is also > > another one that does this. > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > custom __early_init_dt_declare_initrd() definition away from > > asm/memory.h > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > factor 73 approximately. > > > > Apologies for the long CC list, please let me know how you would go > > about merging that and if another approach would be preferable, e.g: > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > something like that. > > There may be a better way as of 4.20 because bootmem is now gone and > only memblock is used. This should unify what each arch needs to do > with initrd early. We need the physical address early for memblock > reserving. Then later on we need the virtual address to access the > initrd. Perhaps we should just change initrd_start and initrd_end to > physical addresses (or add 2 new variables would be less invasive and > allow for different translation than __va()). The sanity checks and > memblock reserve could also perhaps be moved to a common location. > > Alternatively, given arm64 is the only oddball, I'd be fine with an > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > __early_init_dt_declare_initrd as long as we have a path to removing > it like the above option. I think arm64 does not have to redefine __early_init_dt_declare_initrd(). Something like this might be just all we need (completely untested, probably it won't even compile): diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index 9d9582c..e9ca238 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; phys_addr_t arm64_dma_phys_limit __ro_after_init; #ifdef CONFIG_BLK_DEV_INITRD + +static phys_addr_t initrd_start_phys, initrd_end_phys; + static int __init early_initrd(char *p) { unsigned long start, size; @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) if (*endp == ',') { size = memparse(endp + 1, NULL); - initrd_start = start; - initrd_end = start + size; + initrd_start_phys = start; + initrd_end_phys = end; } return 0; } @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) memblock_add(__pa_symbol(_text), (u64)(_end - _text)); } - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && + (initrd_start || initrd_start_phys)) { + /* + * FIXME: ensure proper precendence between + * early_initrd and DT when both are present + */ + if (initrd_start) { + initrd_start_phys = __phys_to_virt(initrd_start); + initrd_end_phys = __phys_to_virt(initrd_end); + } else if (initrd_start_phys) { + initrd_start = __va(initrd_start_phys); + initrd_end = __va(initrd_start_phys); + } + /* * Add back the memory we just removed if it results in the * initrd to become inaccessible via the linear mapping. * Otherwise, this is a no-op */ - u64 base = initrd_start & PAGE_MASK; - u64 size = PAGE_ALIGN(initrd_end) - base; + u64 base = initrd_start_phys & PAGE_MASK; + u64 size = PAGE_ALIGN(initrd_end_phys) - base; /* * We can only add back the initrd memory if we don't end up @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) * pagetables with memblock. */ memblock_reserve(__pa_symbol(_text), _end - _text); -#ifdef CONFIG_BLK_DEV_INITRD +#if 0 if (initrd_start) { memblock_reserve(initrd_start, initrd_end - initrd_start); > Rob > -- Sincerely yours, Mike. _______________________________________________ linux-um mailing list linux-um@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-um ^ permalink raw reply related [flat|nested] 168+ messages in thread
* [OpenRISC] [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 9:38 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-25 9:38 UTC (permalink / raw) To: openrisc On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > Hi all, > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > because we define __early_init_dt_declare_initrd() differently and we do > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > amount of other header files, and translation units as well. > > I scratch my head sometimes as to why some config options rebuild so > much stuff. One down, ? to go. :) > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > systems that generate two kernels: one with the initramfs and one > > without. buildroot is one of these build systems, OpenWrt is also > > another one that does this. > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > custom __early_init_dt_declare_initrd() definition away from > > asm/memory.h > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > factor 73 approximately. > > > > Apologies for the long CC list, please let me know how you would go > > about merging that and if another approach would be preferable, e.g: > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > something like that. > > There may be a better way as of 4.20 because bootmem is now gone and > only memblock is used. This should unify what each arch needs to do > with initrd early. We need the physical address early for memblock > reserving. Then later on we need the virtual address to access the > initrd. Perhaps we should just change initrd_start and initrd_end to > physical addresses (or add 2 new variables would be less invasive and > allow for different translation than __va()). The sanity checks and > memblock reserve could also perhaps be moved to a common location. > > Alternatively, given arm64 is the only oddball, I'd be fine with an > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > __early_init_dt_declare_initrd as long as we have a path to removing > it like the above option. I think arm64 does not have to redefine __early_init_dt_declare_initrd(). Something like this might be just all we need (completely untested, probably it won't even compile): diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index 9d9582c..e9ca238 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; phys_addr_t arm64_dma_phys_limit __ro_after_init; #ifdef CONFIG_BLK_DEV_INITRD + +static phys_addr_t initrd_start_phys, initrd_end_phys; + static int __init early_initrd(char *p) { unsigned long start, size; @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) if (*endp == ',') { size = memparse(endp + 1, NULL); - initrd_start = start; - initrd_end = start + size; + initrd_start_phys = start; + initrd_end_phys = end; } return 0; } @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) memblock_add(__pa_symbol(_text), (u64)(_end - _text)); } - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && + (initrd_start || initrd_start_phys)) { + /* + * FIXME: ensure proper precendence between + * early_initrd and DT when both are present + */ + if (initrd_start) { + initrd_start_phys = __phys_to_virt(initrd_start); + initrd_end_phys = __phys_to_virt(initrd_end); + } else if (initrd_start_phys) { + initrd_start = __va(initrd_start_phys); + initrd_end = __va(initrd_start_phys); + } + /* * Add back the memory we just removed if it results in the * initrd to become inaccessible via the linear mapping. * Otherwise, this is a no-op */ - u64 base = initrd_start & PAGE_MASK; - u64 size = PAGE_ALIGN(initrd_end) - base; + u64 base = initrd_start_phys & PAGE_MASK; + u64 size = PAGE_ALIGN(initrd_end_phys) - base; /* * We can only add back the initrd memory if we don't end up @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) * pagetables with memblock. */ memblock_reserve(__pa_symbol(_text), _end - _text); -#ifdef CONFIG_BLK_DEV_INITRD +#if 0 if (initrd_start) { memblock_reserve(initrd_start, initrd_end - initrd_start); > Rob > -- Sincerely yours, Mike. ^ permalink raw reply related [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 9:38 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-25 9:38 UTC (permalink / raw) To: linux-arm-kernel On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > Hi all, > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > because we define __early_init_dt_declare_initrd() differently and we do > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > amount of other header files, and translation units as well. > > I scratch my head sometimes as to why some config options rebuild so > much stuff. One down, ? to go. :) > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > systems that generate two kernels: one with the initramfs and one > > without. buildroot is one of these build systems, OpenWrt is also > > another one that does this. > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > custom __early_init_dt_declare_initrd() definition away from > > asm/memory.h > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > factor 73 approximately. > > > > Apologies for the long CC list, please let me know how you would go > > about merging that and if another approach would be preferable, e.g: > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > something like that. > > There may be a better way as of 4.20 because bootmem is now gone and > only memblock is used. This should unify what each arch needs to do > with initrd early. We need the physical address early for memblock > reserving. Then later on we need the virtual address to access the > initrd. Perhaps we should just change initrd_start and initrd_end to > physical addresses (or add 2 new variables would be less invasive and > allow for different translation than __va()). The sanity checks and > memblock reserve could also perhaps be moved to a common location. > > Alternatively, given arm64 is the only oddball, I'd be fine with an > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > __early_init_dt_declare_initrd as long as we have a path to removing > it like the above option. I think arm64 does not have to redefine __early_init_dt_declare_initrd(). Something like this might be just all we need (completely untested, probably it won't even compile): diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index 9d9582c..e9ca238 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; phys_addr_t arm64_dma_phys_limit __ro_after_init; #ifdef CONFIG_BLK_DEV_INITRD + +static phys_addr_t initrd_start_phys, initrd_end_phys; + static int __init early_initrd(char *p) { unsigned long start, size; @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) if (*endp == ',') { size = memparse(endp + 1, NULL); - initrd_start = start; - initrd_end = start + size; + initrd_start_phys = start; + initrd_end_phys = end; } return 0; } @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) memblock_add(__pa_symbol(_text), (u64)(_end - _text)); } - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && + (initrd_start || initrd_start_phys)) { + /* + * FIXME: ensure proper precendence between + * early_initrd and DT when both are present + */ + if (initrd_start) { + initrd_start_phys = __phys_to_virt(initrd_start); + initrd_end_phys = __phys_to_virt(initrd_end); + } else if (initrd_start_phys) { + initrd_start = __va(initrd_start_phys); + initrd_end = __va(initrd_start_phys); + } + /* * Add back the memory we just removed if it results in the * initrd to become inaccessible via the linear mapping. * Otherwise, this is a no-op */ - u64 base = initrd_start & PAGE_MASK; - u64 size = PAGE_ALIGN(initrd_end) - base; + u64 base = initrd_start_phys & PAGE_MASK; + u64 size = PAGE_ALIGN(initrd_end_phys) - base; /* * We can only add back the initrd memory if we don't end up @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) * pagetables with memblock. */ memblock_reserve(__pa_symbol(_text), _end - _text); -#ifdef CONFIG_BLK_DEV_INITRD +#if 0 if (initrd_start) { memblock_reserve(initrd_start, initrd_end - initrd_start); > Rob > -- Sincerely yours, Mike. ^ permalink raw reply related [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 9:38 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-25 9:38 UTC (permalink / raw) To: linux-snps-arc On Wed, Oct 24, 2018@02:55:17PM -0500, Rob Herring wrote: > On Wed, Oct 24, 2018@2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > Hi all, > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > because we define __early_init_dt_declare_initrd() differently and we do > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > amount of other header files, and translation units as well. > > I scratch my head sometimes as to why some config options rebuild so > much stuff. One down, ? to go. :) > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > systems that generate two kernels: one with the initramfs and one > > without. buildroot is one of these build systems, OpenWrt is also > > another one that does this. > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > custom __early_init_dt_declare_initrd() definition away from > > asm/memory.h > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > factor 73 approximately. > > > > Apologies for the long CC list, please let me know how you would go > > about merging that and if another approach would be preferable, e.g: > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > something like that. > > There may be a better way as of 4.20 because bootmem is now gone and > only memblock is used. This should unify what each arch needs to do > with initrd early. We need the physical address early for memblock > reserving. Then later on we need the virtual address to access the > initrd. Perhaps we should just change initrd_start and initrd_end to > physical addresses (or add 2 new variables would be less invasive and > allow for different translation than __va()). The sanity checks and > memblock reserve could also perhaps be moved to a common location. > > Alternatively, given arm64 is the only oddball, I'd be fine with an > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > __early_init_dt_declare_initrd as long as we have a path to removing > it like the above option. I think arm64 does not have to redefine __early_init_dt_declare_initrd(). Something like this might be just all we need (completely untested, probably it won't even compile): diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index 9d9582c..e9ca238 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; phys_addr_t arm64_dma_phys_limit __ro_after_init; #ifdef CONFIG_BLK_DEV_INITRD + +static phys_addr_t initrd_start_phys, initrd_end_phys; + static int __init early_initrd(char *p) { unsigned long start, size; @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) if (*endp == ',') { size = memparse(endp + 1, NULL); - initrd_start = start; - initrd_end = start + size; + initrd_start_phys = start; + initrd_end_phys = end; } return 0; } @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) memblock_add(__pa_symbol(_text), (u64)(_end - _text)); } - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && + (initrd_start || initrd_start_phys)) { + /* + * FIXME: ensure proper precendence between + * early_initrd and DT when both are present + */ + if (initrd_start) { + initrd_start_phys = __phys_to_virt(initrd_start); + initrd_end_phys = __phys_to_virt(initrd_end); + } else if (initrd_start_phys) { + initrd_start = __va(initrd_start_phys); + initrd_end = __va(initrd_start_phys); + } + /* * Add back the memory we just removed if it results in the * initrd to become inaccessible via the linear mapping. * Otherwise, this is a no-op */ - u64 base = initrd_start & PAGE_MASK; - u64 size = PAGE_ALIGN(initrd_end) - base; + u64 base = initrd_start_phys & PAGE_MASK; + u64 size = PAGE_ALIGN(initrd_end_phys) - base; /* * We can only add back the initrd memory if we don't end up @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) * pagetables with memblock. */ memblock_reserve(__pa_symbol(_text), _end - _text); -#ifdef CONFIG_BLK_DEV_INITRD +#if 0 if (initrd_start) { memblock_reserve(initrd_start, initrd_end - initrd_start); > Rob > -- Sincerely yours, Mike. ^ permalink raw reply related [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 9:38 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-25 9:38 UTC (permalink / raw) To: Rob Herring Cc: Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, linux-s390, Florian Fainelli, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, Marc Zyngier, linux-um, linux-m68k, Openrisc, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-parisc, Greg Kroah-Hartman, linux-kernel, linux-alpha, Olof Johansson, nios2-dev, linuxppc-dev On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > Hi all, > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > because we define __early_init_dt_declare_initrd() differently and we do > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > amount of other header files, and translation units as well. > > I scratch my head sometimes as to why some config options rebuild so > much stuff. One down, ? to go. :) > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > systems that generate two kernels: one with the initramfs and one > > without. buildroot is one of these build systems, OpenWrt is also > > another one that does this. > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > custom __early_init_dt_declare_initrd() definition away from > > asm/memory.h > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > factor 73 approximately. > > > > Apologies for the long CC list, please let me know how you would go > > about merging that and if another approach would be preferable, e.g: > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > something like that. > > There may be a better way as of 4.20 because bootmem is now gone and > only memblock is used. This should unify what each arch needs to do > with initrd early. We need the physical address early for memblock > reserving. Then later on we need the virtual address to access the > initrd. Perhaps we should just change initrd_start and initrd_end to > physical addresses (or add 2 new variables would be less invasive and > allow for different translation than __va()). The sanity checks and > memblock reserve could also perhaps be moved to a common location. > > Alternatively, given arm64 is the only oddball, I'd be fine with an > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > __early_init_dt_declare_initrd as long as we have a path to removing > it like the above option. I think arm64 does not have to redefine __early_init_dt_declare_initrd(). Something like this might be just all we need (completely untested, probably it won't even compile): diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index 9d9582c..e9ca238 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; phys_addr_t arm64_dma_phys_limit __ro_after_init; #ifdef CONFIG_BLK_DEV_INITRD + +static phys_addr_t initrd_start_phys, initrd_end_phys; + static int __init early_initrd(char *p) { unsigned long start, size; @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) if (*endp == ',') { size = memparse(endp + 1, NULL); - initrd_start = start; - initrd_end = start + size; + initrd_start_phys = start; + initrd_end_phys = end; } return 0; } @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) memblock_add(__pa_symbol(_text), (u64)(_end - _text)); } - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && + (initrd_start || initrd_start_phys)) { + /* + * FIXME: ensure proper precendence between + * early_initrd and DT when both are present + */ + if (initrd_start) { + initrd_start_phys = __phys_to_virt(initrd_start); + initrd_end_phys = __phys_to_virt(initrd_end); + } else if (initrd_start_phys) { + initrd_start = __va(initrd_start_phys); + initrd_end = __va(initrd_start_phys); + } + /* * Add back the memory we just removed if it results in the * initrd to become inaccessible via the linear mapping. * Otherwise, this is a no-op */ - u64 base = initrd_start & PAGE_MASK; - u64 size = PAGE_ALIGN(initrd_end) - base; + u64 base = initrd_start_phys & PAGE_MASK; + u64 size = PAGE_ALIGN(initrd_end_phys) - base; /* * We can only add back the initrd memory if we don't end up @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) * pagetables with memblock. */ memblock_reserve(__pa_symbol(_text), _end - _text); -#ifdef CONFIG_BLK_DEV_INITRD +#if 0 if (initrd_start) { memblock_reserve(initrd_start, initrd_end - initrd_start); > Rob > -- Sincerely yours, Mike. ^ permalink raw reply related [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 9:38 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-25 9:38 UTC (permalink / raw) To: Rob Herring Cc: Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, linux-s390, Florian Fainelli, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, Marc Zyngier, linux-um, linux-m68k, Openrisc, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-parisc, Greg Kroah-Hartman, linux-kernel, linux-alpha, Olof Johansson, nios2-dev, linuxppc-dev On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > Hi all, > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > because we define __early_init_dt_declare_initrd() differently and we do > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > amount of other header files, and translation units as well. > > I scratch my head sometimes as to why some config options rebuild so > much stuff. One down, ? to go. :) > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > systems that generate two kernels: one with the initramfs and one > > without. buildroot is one of these build systems, OpenWrt is also > > another one that does this. > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > custom __early_init_dt_declare_initrd() definition away from > > asm/memory.h > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > factor 73 approximately. > > > > Apologies for the long CC list, please let me know how you would go > > about merging that and if another approach would be preferable, e.g: > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > something like that. > > There may be a better way as of 4.20 because bootmem is now gone and > only memblock is used. This should unify what each arch needs to do > with initrd early. We need the physical address early for memblock > reserving. Then later on we need the virtual address to access the > initrd. Perhaps we should just change initrd_start and initrd_end to > physical addresses (or add 2 new variables would be less invasive and > allow for different translation than __va()). The sanity checks and > memblock reserve could also perhaps be moved to a common location. > > Alternatively, given arm64 is the only oddball, I'd be fine with an > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > __early_init_dt_declare_initrd as long as we have a path to removing > it like the above option. I think arm64 does not have to redefine __early_init_dt_declare_initrd(). Something like this might be just all we need (completely untested, probably it won't even compile): diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index 9d9582c..e9ca238 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; phys_addr_t arm64_dma_phys_limit __ro_after_init; #ifdef CONFIG_BLK_DEV_INITRD + +static phys_addr_t initrd_start_phys, initrd_end_phys; + static int __init early_initrd(char *p) { unsigned long start, size; @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) if (*endp == ',') { size = memparse(endp + 1, NULL); - initrd_start = start; - initrd_end = start + size; + initrd_start_phys = start; + initrd_end_phys = end; } return 0; } @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) memblock_add(__pa_symbol(_text), (u64)(_end - _text)); } - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && + (initrd_start || initrd_start_phys)) { + /* + * FIXME: ensure proper precendence between + * early_initrd and DT when both are present + */ + if (initrd_start) { + initrd_start_phys = __phys_to_virt(initrd_start); + initrd_end_phys = __phys_to_virt(initrd_end); + } else if (initrd_start_phys) { + initrd_start = __va(initrd_start_phys); + initrd_end = __va(initrd_start_phys); + } + /* * Add back the memory we just removed if it results in the * initrd to become inaccessible via the linear mapping. * Otherwise, this is a no-op */ - u64 base = initrd_start & PAGE_MASK; - u64 size = PAGE_ALIGN(initrd_end) - base; + u64 base = initrd_start_phys & PAGE_MASK; + u64 size = PAGE_ALIGN(initrd_end_phys) - base; /* * We can only add back the initrd memory if we don't end up @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) * pagetables with memblock. */ memblock_reserve(__pa_symbol(_text), _end - _text); -#ifdef CONFIG_BLK_DEV_INITRD +#if 0 if (initrd_start) { memblock_reserve(initrd_start, initrd_end - initrd_start); > Rob > -- Sincerely yours, Mike. _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply related [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 9:38 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-25 9:38 UTC (permalink / raw) To: linux-riscv On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > Hi all, > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > because we define __early_init_dt_declare_initrd() differently and we do > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > amount of other header files, and translation units as well. > > I scratch my head sometimes as to why some config options rebuild so > much stuff. One down, ? to go. :) > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > systems that generate two kernels: one with the initramfs and one > > without. buildroot is one of these build systems, OpenWrt is also > > another one that does this. > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > custom __early_init_dt_declare_initrd() definition away from > > asm/memory.h > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > factor 73 approximately. > > > > Apologies for the long CC list, please let me know how you would go > > about merging that and if another approach would be preferable, e.g: > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > something like that. > > There may be a better way as of 4.20 because bootmem is now gone and > only memblock is used. This should unify what each arch needs to do > with initrd early. We need the physical address early for memblock > reserving. Then later on we need the virtual address to access the > initrd. Perhaps we should just change initrd_start and initrd_end to > physical addresses (or add 2 new variables would be less invasive and > allow for different translation than __va()). The sanity checks and > memblock reserve could also perhaps be moved to a common location. > > Alternatively, given arm64 is the only oddball, I'd be fine with an > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > __early_init_dt_declare_initrd as long as we have a path to removing > it like the above option. I think arm64 does not have to redefine __early_init_dt_declare_initrd(). Something like this might be just all we need (completely untested, probably it won't even compile): diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index 9d9582c..e9ca238 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; phys_addr_t arm64_dma_phys_limit __ro_after_init; #ifdef CONFIG_BLK_DEV_INITRD + +static phys_addr_t initrd_start_phys, initrd_end_phys; + static int __init early_initrd(char *p) { unsigned long start, size; @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) if (*endp == ',') { size = memparse(endp + 1, NULL); - initrd_start = start; - initrd_end = start + size; + initrd_start_phys = start; + initrd_end_phys = end; } return 0; } @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) memblock_add(__pa_symbol(_text), (u64)(_end - _text)); } - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && + (initrd_start || initrd_start_phys)) { + /* + * FIXME: ensure proper precendence between + * early_initrd and DT when both are present + */ + if (initrd_start) { + initrd_start_phys = __phys_to_virt(initrd_start); + initrd_end_phys = __phys_to_virt(initrd_end); + } else if (initrd_start_phys) { + initrd_start = __va(initrd_start_phys); + initrd_end = __va(initrd_start_phys); + } + /* * Add back the memory we just removed if it results in the * initrd to become inaccessible via the linear mapping. * Otherwise, this is a no-op */ - u64 base = initrd_start & PAGE_MASK; - u64 size = PAGE_ALIGN(initrd_end) - base; + u64 base = initrd_start_phys & PAGE_MASK; + u64 size = PAGE_ALIGN(initrd_end_phys) - base; /* * We can only add back the initrd memory if we don't end up @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) * pagetables with memblock. */ memblock_reserve(__pa_symbol(_text), _end - _text); -#ifdef CONFIG_BLK_DEV_INITRD +#if 0 if (initrd_start) { memblock_reserve(initrd_start, initrd_end - initrd_start); > Rob > -- Sincerely yours, Mike. ^ permalink raw reply related [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 9:38 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-25 9:38 UTC (permalink / raw) To: Rob Herring Cc: Florian Fainelli, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev, Openrisc, linux-parisc, linuxppc-dev, linux-riscv, linux-s390, SH-Linux, sparclinux, linux-um, linux-xtensa, devicetree, open list:GENERIC INCLUDE/ASM HEADER FILES On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > Hi all, > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > because we define __early_init_dt_declare_initrd() differently and we do > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > amount of other header files, and translation units as well. > > I scratch my head sometimes as to why some config options rebuild so > much stuff. One down, ? to go. :) > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > systems that generate two kernels: one with the initramfs and one > > without. buildroot is one of these build systems, OpenWrt is also > > another one that does this. > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > custom __early_init_dt_declare_initrd() definition away from > > asm/memory.h > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > factor 73 approximately. > > > > Apologies for the long CC list, please let me know how you would go > > about merging that and if another approach would be preferable, e.g: > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > something like that. > > There may be a better way as of 4.20 because bootmem is now gone and > only memblock is used. This should unify what each arch needs to do > with initrd early. We need the physical address early for memblock > reserving. Then later on we need the virtual address to access the > initrd. Perhaps we should just change initrd_start and initrd_end to > physical addresses (or add 2 new variables would be less invasive and > allow for different translation than __va()). The sanity checks and > memblock reserve could also perhaps be moved to a common location. > > Alternatively, given arm64 is the only oddball, I'd be fine with an > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > __early_init_dt_declare_initrd as long as we have a path to removing > it like the above option. I think arm64 does not have to redefine __early_init_dt_declare_initrd(). Something like this might be just all we need (completely untested, probably it won't even compile): diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index 9d9582c..e9ca238 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; phys_addr_t arm64_dma_phys_limit __ro_after_init; #ifdef CONFIG_BLK_DEV_INITRD + +static phys_addr_t initrd_start_phys, initrd_end_phys; + static int __init early_initrd(char *p) { unsigned long start, size; @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) if (*endp == ',') { size = memparse(endp + 1, NULL); - initrd_start = start; - initrd_end = start + size; + initrd_start_phys = start; + initrd_end_phys = end; } return 0; } @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) memblock_add(__pa_symbol(_text), (u64)(_end - _text)); } - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && + (initrd_start || initrd_start_phys)) { + /* + * FIXME: ensure proper precendence between + * early_initrd and DT when both are present + */ + if (initrd_start) { + initrd_start_phys = __phys_to_virt(initrd_start); + initrd_end_phys = __phys_to_virt(initrd_end); + } else if (initrd_start_phys) { + initrd_start = __va(initrd_start_phys); + initrd_end = __va(initrd_start_phys); + } + /* * Add back the memory we just removed if it results in the * initrd to become inaccessible via the linear mapping. * Otherwise, this is a no-op */ - u64 base = initrd_start & PAGE_MASK; - u64 size = PAGE_ALIGN(initrd_end) - base; + u64 base = initrd_start_phys & PAGE_MASK; + u64 size = PAGE_ALIGN(initrd_end_phys) - base; /* * We can only add back the initrd memory if we don't end up @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) * pagetables with memblock. */ memblock_reserve(__pa_symbol(_text), _end - _text); -#ifdef CONFIG_BLK_DEV_INITRD +#if 0 if (initrd_start) { memblock_reserve(initrd_start, initrd_end - initrd_start); > Rob > -- Sincerely yours, Mike. ^ permalink raw reply related [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 9:38 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-25 9:38 UTC (permalink / raw) To: Rob Herring Cc: Florian Fainelli, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev, Openrisc, linux-parisc, linuxppc-dev, linux-riscv, linux-s390, SH-Linux, sparclinux, linux-um, linux-xtensa, devicetree, open list:GENERIC INCLUDE/ASM HEADER FILES On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > Hi all, > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > because we define __early_init_dt_declare_initrd() differently and we do > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > amount of other header files, and translation units as well. > > I scratch my head sometimes as to why some config options rebuild so > much stuff. One down, ? to go. :) > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > systems that generate two kernels: one with the initramfs and one > > without. buildroot is one of these build systems, OpenWrt is also > > another one that does this. > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > custom __early_init_dt_declare_initrd() definition away from > > asm/memory.h > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > factor 73 approximately. > > > > Apologies for the long CC list, please let me know how you would go > > about merging that and if another approach would be preferable, e.g: > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > something like that. > > There may be a better way as of 4.20 because bootmem is now gone and > only memblock is used. This should unify what each arch needs to do > with initrd early. We need the physical address early for memblock > reserving. Then later on we need the virtual address to access the > initrd. Perhaps we should just change initrd_start and initrd_end to > physical addresses (or add 2 new variables would be less invasive and > allow for different translation than __va()). The sanity checks and > memblock reserve could also perhaps be moved to a common location. > > Alternatively, given arm64 is the only oddball, I'd be fine with an > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > __early_init_dt_declare_initrd as long as we have a path to removing > it like the above option. I think arm64 does not have to redefine __early_init_dt_declare_initrd(). Something like this might be just all we need (completely untested, probably it won't even compile): diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index 9d9582c..e9ca238 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; phys_addr_t arm64_dma_phys_limit __ro_after_init; #ifdef CONFIG_BLK_DEV_INITRD + +static phys_addr_t initrd_start_phys, initrd_end_phys; + static int __init early_initrd(char *p) { unsigned long start, size; @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) if (*endp == ',') { size = memparse(endp + 1, NULL); - initrd_start = start; - initrd_end = start + size; + initrd_start_phys = start; + initrd_end_phys = end; } return 0; } @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) memblock_add(__pa_symbol(_text), (u64)(_end - _text)); } - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && + (initrd_start || initrd_start_phys)) { + /* + * FIXME: ensure proper precendence between + * early_initrd and DT when both are present + */ + if (initrd_start) { + initrd_start_phys = __phys_to_virt(initrd_start); + initrd_end_phys = __phys_to_virt(initrd_end); + } else if (initrd_start_phys) { + initrd_start = __va(initrd_start_phys); + initrd_end = __va(initrd_start_phys); + } + /* * Add back the memory we just removed if it results in the * initrd to become inaccessible via the linear mapping. * Otherwise, this is a no-op */ - u64 base = initrd_start & PAGE_MASK; - u64 size = PAGE_ALIGN(initrd_end) - base; + u64 base = initrd_start_phys & PAGE_MASK; + u64 size = PAGE_ALIGN(initrd_end_phys) - base; /* * We can only add back the initrd memory if we don't end up @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) * pagetables with memblock. */ memblock_reserve(__pa_symbol(_text), _end - _text); -#ifdef CONFIG_BLK_DEV_INITRD +#if 0 if (initrd_start) { memblock_reserve(initrd_start, initrd_end - initrd_start); > Rob > -- Sincerely yours, Mike. ^ permalink raw reply related [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 9:38 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-25 9:38 UTC (permalink / raw) To: Rob Herring Cc: Florian Fainelli, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > Hi all, > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > because we define __early_init_dt_declare_initrd() differently and we do > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > amount of other header files, and translation units as well. > > I scratch my head sometimes as to why some config options rebuild so > much stuff. One down, ? to go. :) > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > systems that generate two kernels: one with the initramfs and one > > without. buildroot is one of these build systems, OpenWrt is also > > another one that does this. > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > custom __early_init_dt_declare_initrd() definition away from > > asm/memory.h > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > factor 73 approximately. > > > > Apologies for the long CC list, please let me know how you would go > > about merging that and if another approach would be preferable, e.g: > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > something like that. > > There may be a better way as of 4.20 because bootmem is now gone and > only memblock is used. This should unify what each arch needs to do > with initrd early. We need the physical address early for memblock > reserving. Then later on we need the virtual address to access the > initrd. Perhaps we should just change initrd_start and initrd_end to > physical addresses (or add 2 new variables would be less invasive and > allow for different translation than __va()). The sanity checks and > memblock reserve could also perhaps be moved to a common location. > > Alternatively, given arm64 is the only oddball, I'd be fine with an > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > __early_init_dt_declare_initrd as long as we have a path to removing > it like the above option. I think arm64 does not have to redefine __early_init_dt_declare_initrd(). Something like this might be just all we need (completely untested, probably it won't even compile): diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index 9d9582c..e9ca238 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; phys_addr_t arm64_dma_phys_limit __ro_after_init; #ifdef CONFIG_BLK_DEV_INITRD + +static phys_addr_t initrd_start_phys, initrd_end_phys; + static int __init early_initrd(char *p) { unsigned long start, size; @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) if (*endp == ',') { size = memparse(endp + 1, NULL); - initrd_start = start; - initrd_end = start + size; + initrd_start_phys = start; + initrd_end_phys = end; } return 0; } @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) memblock_add(__pa_symbol(_text), (u64)(_end - _text)); } - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && + (initrd_start || initrd_start_phys)) { + /* + * FIXME: ensure proper precendence between + * early_initrd and DT when both are present + */ + if (initrd_start) { + initrd_start_phys = __phys_to_virt(initrd_start); + initrd_end_phys = __phys_to_virt(initrd_end); + } else if (initrd_start_phys) { + initrd_start = __va(initrd_start_phys); + initrd_end = __va(initrd_start_phys); + } + /* * Add back the memory we just removed if it results in the * initrd to become inaccessible via the linear mapping. * Otherwise, this is a no-op */ - u64 base = initrd_start & PAGE_MASK; - u64 size = PAGE_ALIGN(initrd_end) - base; + u64 base = initrd_start_phys & PAGE_MASK; + u64 size = PAGE_ALIGN(initrd_end_phys) - base; /* * We can only add back the initrd memory if we don't end up @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) * pagetables with memblock. */ memblock_reserve(__pa_symbol(_text), _end - _text); -#ifdef CONFIG_BLK_DEV_INITRD +#if 0 if (initrd_start) { memblock_reserve(initrd_start, initrd_end - initrd_start); > Rob > -- Sincerely yours, Mike. ^ permalink raw reply related [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD 2018-10-25 9:38 ` Mike Rapoport ` (7 preceding siblings ...) (?) @ 2018-10-25 9:51 ` Russell King - ARM Linux -1 siblings, 0 replies; 168+ messages in thread From: Russell King - ARM Linux @ 2018-10-25 9:51 UTC (permalink / raw) To: Mike Rapoport Cc: Rob Herring, Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, linux-s390, Florian Fainelli, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, Marc Zyngier, linux-um, linux-m68k On Thu, Oct 25, 2018 at 10:38:34AM +0100, Mike Rapoport wrote: > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > Hi all, > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > because we define __early_init_dt_declare_initrd() differently and we do > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > amount of other header files, and translation units as well. > > > > I scratch my head sometimes as to why some config options rebuild so > > much stuff. One down, ? to go. :) > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > systems that generate two kernels: one with the initramfs and one > > > without. buildroot is one of these build systems, OpenWrt is also > > > another one that does this. > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > custom __early_init_dt_declare_initrd() definition away from > > > asm/memory.h > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > factor 73 approximately. > > > > > > Apologies for the long CC list, please let me know how you would go > > > about merging that and if another approach would be preferable, e.g: > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > something like that. > > > > There may be a better way as of 4.20 because bootmem is now gone and > > only memblock is used. This should unify what each arch needs to do > > with initrd early. We need the physical address early for memblock > > reserving. Then later on we need the virtual address to access the > > initrd. Perhaps we should just change initrd_start and initrd_end to > > physical addresses (or add 2 new variables would be less invasive and > > allow for different translation than __va()). The sanity checks and > > memblock reserve could also perhaps be moved to a common location. > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > __early_init_dt_declare_initrd as long as we have a path to removing > > it like the above option. > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > Something like this might be just all we need (completely untested, > probably it won't even compile): The alternative solution would be to replace initrd_start/initrd_end with physical address versions of these everywhere - that's what we're passed from DT, it's what 32-bit ARM would prefer, and seemingly what 64-bit ARM would also like as well. Grepping for initrd_start in arch/*/mm shows that there's lots of architectures that have virtual/physical conversions on these, and a number that have obviously been derived from 32-bit ARM's approach (with maintaining a phys_initrd_start variable to simplify things). -- RMK's Patch system: http://www.armlinux.org.uk/developer/patches/ FTTC broadband for 0.8mile line in suburbia: sync at 12.1Mbps down 622kbps up According to speedtest.net: 11.9Mbps down 500kbps up ^ permalink raw reply [flat|nested] 168+ messages in thread
* [OpenRISC] [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 9:51 ` Russell King - ARM Linux 0 siblings, 0 replies; 168+ messages in thread From: Russell King - ARM Linux @ 2018-10-25 9:51 UTC (permalink / raw) To: openrisc On Thu, Oct 25, 2018 at 10:38:34AM +0100, Mike Rapoport wrote: > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > Hi all, > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > because we define __early_init_dt_declare_initrd() differently and we do > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > amount of other header files, and translation units as well. > > > > I scratch my head sometimes as to why some config options rebuild so > > much stuff. One down, ? to go. :) > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > systems that generate two kernels: one with the initramfs and one > > > without. buildroot is one of these build systems, OpenWrt is also > > > another one that does this. > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > custom __early_init_dt_declare_initrd() definition away from > > > asm/memory.h > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > factor 73 approximately. > > > > > > Apologies for the long CC list, please let me know how you would go > > > about merging that and if another approach would be preferable, e.g: > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > something like that. > > > > There may be a better way as of 4.20 because bootmem is now gone and > > only memblock is used. This should unify what each arch needs to do > > with initrd early. We need the physical address early for memblock > > reserving. Then later on we need the virtual address to access the > > initrd. Perhaps we should just change initrd_start and initrd_end to > > physical addresses (or add 2 new variables would be less invasive and > > allow for different translation than __va()). The sanity checks and > > memblock reserve could also perhaps be moved to a common location. > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > __early_init_dt_declare_initrd as long as we have a path to removing > > it like the above option. > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > Something like this might be just all we need (completely untested, > probably it won't even compile): The alternative solution would be to replace initrd_start/initrd_end with physical address versions of these everywhere - that's what we're passed from DT, it's what 32-bit ARM would prefer, and seemingly what 64-bit ARM would also like as well. Grepping for initrd_start in arch/*/mm shows that there's lots of architectures that have virtual/physical conversions on these, and a number that have obviously been derived from 32-bit ARM's approach (with maintaining a phys_initrd_start variable to simplify things). -- RMK's Patch system: http://www.armlinux.org.uk/developer/patches/ FTTC broadband for 0.8mile line in suburbia: sync at 12.1Mbps down 622kbps up According to speedtest.net: 11.9Mbps down 500kbps up ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 9:51 ` Russell King - ARM Linux 0 siblings, 0 replies; 168+ messages in thread From: Russell King - ARM Linux @ 2018-10-25 9:51 UTC (permalink / raw) To: linux-arm-kernel On Thu, Oct 25, 2018 at 10:38:34AM +0100, Mike Rapoport wrote: > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > Hi all, > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > because we define __early_init_dt_declare_initrd() differently and we do > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > amount of other header files, and translation units as well. > > > > I scratch my head sometimes as to why some config options rebuild so > > much stuff. One down, ? to go. :) > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > systems that generate two kernels: one with the initramfs and one > > > without. buildroot is one of these build systems, OpenWrt is also > > > another one that does this. > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > custom __early_init_dt_declare_initrd() definition away from > > > asm/memory.h > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > factor 73 approximately. > > > > > > Apologies for the long CC list, please let me know how you would go > > > about merging that and if another approach would be preferable, e.g: > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > something like that. > > > > There may be a better way as of 4.20 because bootmem is now gone and > > only memblock is used. This should unify what each arch needs to do > > with initrd early. We need the physical address early for memblock > > reserving. Then later on we need the virtual address to access the > > initrd. Perhaps we should just change initrd_start and initrd_end to > > physical addresses (or add 2 new variables would be less invasive and > > allow for different translation than __va()). The sanity checks and > > memblock reserve could also perhaps be moved to a common location. > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > __early_init_dt_declare_initrd as long as we have a path to removing > > it like the above option. > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > Something like this might be just all we need (completely untested, > probably it won't even compile): The alternative solution would be to replace initrd_start/initrd_end with physical address versions of these everywhere - that's what we're passed from DT, it's what 32-bit ARM would prefer, and seemingly what 64-bit ARM would also like as well. Grepping for initrd_start in arch/*/mm shows that there's lots of architectures that have virtual/physical conversions on these, and a number that have obviously been derived from 32-bit ARM's approach (with maintaining a phys_initrd_start variable to simplify things). -- RMK's Patch system: http://www.armlinux.org.uk/developer/patches/ FTTC broadband for 0.8mile line in suburbia: sync at 12.1Mbps down 622kbps up According to speedtest.net: 11.9Mbps down 500kbps up ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 9:51 ` Russell King - ARM Linux 0 siblings, 0 replies; 168+ messages in thread From: Russell King - ARM Linux @ 2018-10-25 9:51 UTC (permalink / raw) To: linux-snps-arc On Thu, Oct 25, 2018@10:38:34AM +0100, Mike Rapoport wrote: > On Wed, Oct 24, 2018@02:55:17PM -0500, Rob Herring wrote: > > On Wed, Oct 24, 2018@2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > Hi all, > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > because we define __early_init_dt_declare_initrd() differently and we do > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > amount of other header files, and translation units as well. > > > > I scratch my head sometimes as to why some config options rebuild so > > much stuff. One down, ? to go. :) > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > systems that generate two kernels: one with the initramfs and one > > > without. buildroot is one of these build systems, OpenWrt is also > > > another one that does this. > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > custom __early_init_dt_declare_initrd() definition away from > > > asm/memory.h > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > factor 73 approximately. > > > > > > Apologies for the long CC list, please let me know how you would go > > > about merging that and if another approach would be preferable, e.g: > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > something like that. > > > > There may be a better way as of 4.20 because bootmem is now gone and > > only memblock is used. This should unify what each arch needs to do > > with initrd early. We need the physical address early for memblock > > reserving. Then later on we need the virtual address to access the > > initrd. Perhaps we should just change initrd_start and initrd_end to > > physical addresses (or add 2 new variables would be less invasive and > > allow for different translation than __va()). The sanity checks and > > memblock reserve could also perhaps be moved to a common location. > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > __early_init_dt_declare_initrd as long as we have a path to removing > > it like the above option. > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > Something like this might be just all we need (completely untested, > probably it won't even compile): The alternative solution would be to replace initrd_start/initrd_end with physical address versions of these everywhere - that's what we're passed from DT, it's what 32-bit ARM would prefer, and seemingly what 64-bit ARM would also like as well. Grepping for initrd_start in arch/*/mm shows that there's lots of architectures that have virtual/physical conversions on these, and a number that have obviously been derived from 32-bit ARM's approach (with maintaining a phys_initrd_start variable to simplify things). -- RMK's Patch system: http://www.armlinux.org.uk/developer/patches/ FTTC broadband for 0.8mile line in suburbia: sync at 12.1Mbps down 622kbps up According to speedtest.net: 11.9Mbps down 500kbps up ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 9:51 ` Russell King - ARM Linux 0 siblings, 0 replies; 168+ messages in thread From: Russell King - ARM Linux @ 2018-10-25 9:51 UTC (permalink / raw) To: Mike Rapoport Cc: Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, Rob Herring, Florian Fainelli, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, linux-s390, Marc Zyngier, linux-um, linux-m68k, Openrisc, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-parisc, Greg Kroah-Hartman, linux-kernel, linux-alpha, Olof Johansson, nios2-dev, linuxppc-dev On Thu, Oct 25, 2018 at 10:38:34AM +0100, Mike Rapoport wrote: > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > Hi all, > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > because we define __early_init_dt_declare_initrd() differently and we do > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > amount of other header files, and translation units as well. > > > > I scratch my head sometimes as to why some config options rebuild so > > much stuff. One down, ? to go. :) > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > systems that generate two kernels: one with the initramfs and one > > > without. buildroot is one of these build systems, OpenWrt is also > > > another one that does this. > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > custom __early_init_dt_declare_initrd() definition away from > > > asm/memory.h > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > factor 73 approximately. > > > > > > Apologies for the long CC list, please let me know how you would go > > > about merging that and if another approach would be preferable, e.g: > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > something like that. > > > > There may be a better way as of 4.20 because bootmem is now gone and > > only memblock is used. This should unify what each arch needs to do > > with initrd early. We need the physical address early for memblock > > reserving. Then later on we need the virtual address to access the > > initrd. Perhaps we should just change initrd_start and initrd_end to > > physical addresses (or add 2 new variables would be less invasive and > > allow for different translation than __va()). The sanity checks and > > memblock reserve could also perhaps be moved to a common location. > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > __early_init_dt_declare_initrd as long as we have a path to removing > > it like the above option. > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > Something like this might be just all we need (completely untested, > probably it won't even compile): The alternative solution would be to replace initrd_start/initrd_end with physical address versions of these everywhere - that's what we're passed from DT, it's what 32-bit ARM would prefer, and seemingly what 64-bit ARM would also like as well. Grepping for initrd_start in arch/*/mm shows that there's lots of architectures that have virtual/physical conversions on these, and a number that have obviously been derived from 32-bit ARM's approach (with maintaining a phys_initrd_start variable to simplify things). -- RMK's Patch system: http://www.armlinux.org.uk/developer/patches/ FTTC broadband for 0.8mile line in suburbia: sync at 12.1Mbps down 622kbps up According to speedtest.net: 11.9Mbps down 500kbps up ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 9:51 ` Russell King - ARM Linux 0 siblings, 0 replies; 168+ messages in thread From: Russell King - ARM Linux @ 2018-10-25 9:51 UTC (permalink / raw) To: Mike Rapoport Cc: Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, Rob Herring, Florian Fainelli, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, linux-s390, Marc Zyngier, linux-um, linux-m68k, Openrisc, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-parisc, Greg Kroah-Hartman, linux-kernel, linux-alpha, Olof Johansson, nios2-dev, linuxppc-dev On Thu, Oct 25, 2018 at 10:38:34AM +0100, Mike Rapoport wrote: > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > Hi all, > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > because we define __early_init_dt_declare_initrd() differently and we do > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > amount of other header files, and translation units as well. > > > > I scratch my head sometimes as to why some config options rebuild so > > much stuff. One down, ? to go. :) > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > systems that generate two kernels: one with the initramfs and one > > > without. buildroot is one of these build systems, OpenWrt is also > > > another one that does this. > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > custom __early_init_dt_declare_initrd() definition away from > > > asm/memory.h > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > factor 73 approximately. > > > > > > Apologies for the long CC list, please let me know how you would go > > > about merging that and if another approach would be preferable, e.g: > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > something like that. > > > > There may be a better way as of 4.20 because bootmem is now gone and > > only memblock is used. This should unify what each arch needs to do > > with initrd early. We need the physical address early for memblock > > reserving. Then later on we need the virtual address to access the > > initrd. Perhaps we should just change initrd_start and initrd_end to > > physical addresses (or add 2 new variables would be less invasive and > > allow for different translation than __va()). The sanity checks and > > memblock reserve could also perhaps be moved to a common location. > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > __early_init_dt_declare_initrd as long as we have a path to removing > > it like the above option. > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > Something like this might be just all we need (completely untested, > probably it won't even compile): The alternative solution would be to replace initrd_start/initrd_end with physical address versions of these everywhere - that's what we're passed from DT, it's what 32-bit ARM would prefer, and seemingly what 64-bit ARM would also like as well. Grepping for initrd_start in arch/*/mm shows that there's lots of architectures that have virtual/physical conversions on these, and a number that have obviously been derived from 32-bit ARM's approach (with maintaining a phys_initrd_start variable to simplify things). -- RMK's Patch system: http://www.armlinux.org.uk/developer/patches/ FTTC broadband for 0.8mile line in suburbia: sync at 12.1Mbps down 622kbps up According to speedtest.net: 11.9Mbps down 500kbps up _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 9:51 ` Russell King - ARM Linux 0 siblings, 0 replies; 168+ messages in thread From: Russell King - ARM Linux @ 2018-10-25 9:51 UTC (permalink / raw) To: linux-riscv On Thu, Oct 25, 2018 at 10:38:34AM +0100, Mike Rapoport wrote: > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > Hi all, > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > because we define __early_init_dt_declare_initrd() differently and we do > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > amount of other header files, and translation units as well. > > > > I scratch my head sometimes as to why some config options rebuild so > > much stuff. One down, ? to go. :) > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > systems that generate two kernels: one with the initramfs and one > > > without. buildroot is one of these build systems, OpenWrt is also > > > another one that does this. > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > custom __early_init_dt_declare_initrd() definition away from > > > asm/memory.h > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > factor 73 approximately. > > > > > > Apologies for the long CC list, please let me know how you would go > > > about merging that and if another approach would be preferable, e.g: > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > something like that. > > > > There may be a better way as of 4.20 because bootmem is now gone and > > only memblock is used. This should unify what each arch needs to do > > with initrd early. We need the physical address early for memblock > > reserving. Then later on we need the virtual address to access the > > initrd. Perhaps we should just change initrd_start and initrd_end to > > physical addresses (or add 2 new variables would be less invasive and > > allow for different translation than __va()). The sanity checks and > > memblock reserve could also perhaps be moved to a common location. > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > __early_init_dt_declare_initrd as long as we have a path to removing > > it like the above option. > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > Something like this might be just all we need (completely untested, > probably it won't even compile): The alternative solution would be to replace initrd_start/initrd_end with physical address versions of these everywhere - that's what we're passed from DT, it's what 32-bit ARM would prefer, and seemingly what 64-bit ARM would also like as well. Grepping for initrd_start in arch/*/mm shows that there's lots of architectures that have virtual/physical conversions on these, and a number that have obviously been derived from 32-bit ARM's approach (with maintaining a phys_initrd_start variable to simplify things). -- RMK's Patch system: http://www.armlinux.org.uk/developer/patches/ FTTC broadband for 0.8mile line in suburbia: sync at 12.1Mbps down 622kbps up According to speedtest.net: 11.9Mbps down 500kbps up ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 9:51 ` Russell King - ARM Linux 0 siblings, 0 replies; 168+ messages in thread From: Russell King - ARM Linux @ 2018-10-25 9:51 UTC (permalink / raw) To: Mike Rapoport Cc: Rob Herring, Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, linux-s390, Florian Fainelli, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, Marc Zyngier, linux-um, linux-m68k, Openrisc, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-parisc, Greg Kroah-Hartman, linux-kernel, linux-alpha, Olof Johansson, nios2-dev, linuxppc-dev On Thu, Oct 25, 2018 at 10:38:34AM +0100, Mike Rapoport wrote: > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > Hi all, > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > because we define __early_init_dt_declare_initrd() differently and we do > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > amount of other header files, and translation units as well. > > > > I scratch my head sometimes as to why some config options rebuild so > > much stuff. One down, ? to go. :) > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > systems that generate two kernels: one with the initramfs and one > > > without. buildroot is one of these build systems, OpenWrt is also > > > another one that does this. > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > custom __early_init_dt_declare_initrd() definition away from > > > asm/memory.h > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > factor 73 approximately. > > > > > > Apologies for the long CC list, please let me know how you would go > > > about merging that and if another approach would be preferable, e.g: > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > something like that. > > > > There may be a better way as of 4.20 because bootmem is now gone and > > only memblock is used. This should unify what each arch needs to do > > with initrd early. We need the physical address early for memblock > > reserving. Then later on we need the virtual address to access the > > initrd. Perhaps we should just change initrd_start and initrd_end to > > physical addresses (or add 2 new variables would be less invasive and > > allow for different translation than __va()). The sanity checks and > > memblock reserve could also perhaps be moved to a common location. > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > __early_init_dt_declare_initrd as long as we have a path to removing > > it like the above option. > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > Something like this might be just all we need (completely untested, > probably it won't even compile): The alternative solution would be to replace initrd_start/initrd_end with physical address versions of these everywhere - that's what we're passed from DT, it's what 32-bit ARM would prefer, and seemingly what 64-bit ARM would also like as well. Grepping for initrd_start in arch/*/mm shows that there's lots of architectures that have virtual/physical conversions on these, and a number that have obviously been derived from 32-bit ARM's approach (with maintaining a phys_initrd_start variable to simplify things). -- RMK's Patch system: http://www.armlinux.org.uk/developer/patches/ FTTC broadband for 0.8mile line in suburbia: sync at 12.1Mbps down 622kbps up According to speedtest.net: 11.9Mbps down 500kbps up ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 9:51 ` Russell King - ARM Linux 0 siblings, 0 replies; 168+ messages in thread From: Russell King - ARM Linux @ 2018-10-25 9:51 UTC (permalink / raw) To: Mike Rapoport Cc: Rob Herring, Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, linux-s390, Florian Fainelli, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, Marc Zyngier, linux-um, linux-m68k, Openrisc, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-parisc, Greg Kroah-Hartman, linux-kernel, linux-alpha, Olof Johansson, nios2-dev, linuxppc-dev On Thu, Oct 25, 2018 at 10:38:34AM +0100, Mike Rapoport wrote: > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > Hi all, > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > because we define __early_init_dt_declare_initrd() differently and we do > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > amount of other header files, and translation units as well. > > > > I scratch my head sometimes as to why some config options rebuild so > > much stuff. One down, ? to go. :) > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > systems that generate two kernels: one with the initramfs and one > > > without. buildroot is one of these build systems, OpenWrt is also > > > another one that does this. > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > custom __early_init_dt_declare_initrd() definition away from > > > asm/memory.h > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > factor 73 approximately. > > > > > > Apologies for the long CC list, please let me know how you would go > > > about merging that and if another approach would be preferable, e.g: > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > something like that. > > > > There may be a better way as of 4.20 because bootmem is now gone and > > only memblock is used. This should unify what each arch needs to do > > with initrd early. We need the physical address early for memblock > > reserving. Then later on we need the virtual address to access the > > initrd. Perhaps we should just change initrd_start and initrd_end to > > physical addresses (or add 2 new variables would be less invasive and > > allow for different translation than __va()). The sanity checks and > > memblock reserve could also perhaps be moved to a common location. > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > __early_init_dt_declare_initrd as long as we have a path to removing > > it like the above option. > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > Something like this might be just all we need (completely untested, > probably it won't even compile): The alternative solution would be to replace initrd_start/initrd_end with physical address versions of these everywhere - that's what we're passed from DT, it's what 32-bit ARM would prefer, and seemingly what 64-bit ARM would also like as well. Grepping for initrd_start in arch/*/mm shows that there's lots of architectures that have virtual/physical conversions on these, and a number that have obviously been derived from 32-bit ARM's approach (with maintaining a phys_initrd_start variable to simplify things). -- RMK's Patch system: http://www.armlinux.org.uk/developer/patches/ FTTC broadband for 0.8mile line in suburbia: sync at 12.1Mbps down 622kbps up According to speedtest.net: 11.9Mbps down 500kbps up ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 9:51 ` Russell King - ARM Linux 0 siblings, 0 replies; 168+ messages in thread From: Russell King - ARM Linux @ 2018-10-25 9:51 UTC (permalink / raw) To: Mike Rapoport Cc: Rob Herring, Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, linux-s390, Florian Fainelli, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, Marc Zyngier, linux-um, linux-m68k On Thu, Oct 25, 2018 at 10:38:34AM +0100, Mike Rapoport wrote: > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > Hi all, > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > because we define __early_init_dt_declare_initrd() differently and we do > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > amount of other header files, and translation units as well. > > > > I scratch my head sometimes as to why some config options rebuild so > > much stuff. One down, ? to go. :) > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > systems that generate two kernels: one with the initramfs and one > > > without. buildroot is one of these build systems, OpenWrt is also > > > another one that does this. > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > custom __early_init_dt_declare_initrd() definition away from > > > asm/memory.h > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > factor 73 approximately. > > > > > > Apologies for the long CC list, please let me know how you would go > > > about merging that and if another approach would be preferable, e.g: > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > something like that. > > > > There may be a better way as of 4.20 because bootmem is now gone and > > only memblock is used. This should unify what each arch needs to do > > with initrd early. We need the physical address early for memblock > > reserving. Then later on we need the virtual address to access the > > initrd. Perhaps we should just change initrd_start and initrd_end to > > physical addresses (or add 2 new variables would be less invasive and > > allow for different translation than __va()). The sanity checks and > > memblock reserve could also perhaps be moved to a common location. > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > __early_init_dt_declare_initrd as long as we have a path to removing > > it like the above option. > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > Something like this might be just all we need (completely untested, > probably it won't even compile): The alternative solution would be to replace initrd_start/initrd_end with physical address versions of these everywhere - that's what we're passed from DT, it's what 32-bit ARM would prefer, and seemingly what 64-bit ARM would also like as well. Grepping for initrd_start in arch/*/mm shows that there's lots of architectures that have virtual/physical conversions on these, and a number that have obviously been derived from 32-bit ARM's approach (with maintaining a phys_initrd_start variable to simplify things). -- RMK's Patch system: http://www.armlinux.org.uk/developer/patches/ FTTC broadband for 0.8mile line in suburbia: sync at 12.1Mbps down 622kbps up According to speedtest.net: 11.9Mbps down 500kbps up ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD 2018-10-25 9:38 ` Mike Rapoport ` (7 preceding siblings ...) (?) @ 2018-10-25 13:15 ` Rob Herring -1 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-25 13:15 UTC (permalink / raw) To: rppt, Ard Biesheuvel Cc: Florian Fainelli, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev +Ard On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > Hi all, > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > because we define __early_init_dt_declare_initrd() differently and we do > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > amount of other header files, and translation units as well. > > > > I scratch my head sometimes as to why some config options rebuild so > > much stuff. One down, ? to go. :) > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > systems that generate two kernels: one with the initramfs and one > > > without. buildroot is one of these build systems, OpenWrt is also > > > another one that does this. > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > custom __early_init_dt_declare_initrd() definition away from > > > asm/memory.h > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > factor 73 approximately. > > > > > > Apologies for the long CC list, please let me know how you would go > > > about merging that and if another approach would be preferable, e.g: > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > something like that. > > > > There may be a better way as of 4.20 because bootmem is now gone and > > only memblock is used. This should unify what each arch needs to do > > with initrd early. We need the physical address early for memblock > > reserving. Then later on we need the virtual address to access the > > initrd. Perhaps we should just change initrd_start and initrd_end to > > physical addresses (or add 2 new variables would be less invasive and > > allow for different translation than __va()). The sanity checks and > > memblock reserve could also perhaps be moved to a common location. > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > __early_init_dt_declare_initrd as long as we have a path to removing > > it like the above option. > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > Something like this might be just all we need (completely untested, > probably it won't even compile): > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > index 9d9582c..e9ca238 100644 > --- a/arch/arm64/mm/init.c > +++ b/arch/arm64/mm/init.c > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > #ifdef CONFIG_BLK_DEV_INITRD > + > +static phys_addr_t initrd_start_phys, initrd_end_phys; > + > static int __init early_initrd(char *p) > { > unsigned long start, size; > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > if (*endp = ',') { > size = memparse(endp + 1, NULL); > > - initrd_start = start; > - initrd_end = start + size; > + initrd_start_phys = start; > + initrd_end_phys = end; > } > return 0; > } > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > } > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > + (initrd_start || initrd_start_phys)) { > + /* > + * FIXME: ensure proper precendence between > + * early_initrd and DT when both are present Command line takes precedence, so just reverse the order. > + */ > + if (initrd_start) { > + initrd_start_phys = __phys_to_virt(initrd_start); > + initrd_end_phys = __phys_to_virt(initrd_end); AIUI, the original issue was doing the P2V translation was happening too early and the VA could be wrong if the linear range is adjusted. So I don't think this would work. I suppose you could convert the VA back to a PA before any adjustments and then back to a VA again after. But that's kind of hacky. 2 wrongs making a right. > + } else if (initrd_start_phys) { > + initrd_start = __va(initrd_start_phys); > + initrd_end = __va(initrd_start_phys); > + } > + > /* > * Add back the memory we just removed if it results in the > * initrd to become inaccessible via the linear mapping. > * Otherwise, this is a no-op > */ > - u64 base = initrd_start & PAGE_MASK; > - u64 size = PAGE_ALIGN(initrd_end) - base; > + u64 base = initrd_start_phys & PAGE_MASK; > + u64 size = PAGE_ALIGN(initrd_end_phys) - base; > > /* > * We can only add back the initrd memory if we don't end up > @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) > * pagetables with memblock. > */ > memblock_reserve(__pa_symbol(_text), _end - _text); > -#ifdef CONFIG_BLK_DEV_INITRD > +#if 0 > if (initrd_start) { > memblock_reserve(initrd_start, initrd_end - initrd_start); > > > > Rob > > > > -- > Sincerely yours, > Mike. > ^ permalink raw reply [flat|nested] 168+ messages in thread
* [OpenRISC] [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 13:15 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-25 13:15 UTC (permalink / raw) To: openrisc +Ard On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > Hi all, > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > because we define __early_init_dt_declare_initrd() differently and we do > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > amount of other header files, and translation units as well. > > > > I scratch my head sometimes as to why some config options rebuild so > > much stuff. One down, ? to go. :) > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > systems that generate two kernels: one with the initramfs and one > > > without. buildroot is one of these build systems, OpenWrt is also > > > another one that does this. > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > custom __early_init_dt_declare_initrd() definition away from > > > asm/memory.h > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > factor 73 approximately. > > > > > > Apologies for the long CC list, please let me know how you would go > > > about merging that and if another approach would be preferable, e.g: > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > something like that. > > > > There may be a better way as of 4.20 because bootmem is now gone and > > only memblock is used. This should unify what each arch needs to do > > with initrd early. We need the physical address early for memblock > > reserving. Then later on we need the virtual address to access the > > initrd. Perhaps we should just change initrd_start and initrd_end to > > physical addresses (or add 2 new variables would be less invasive and > > allow for different translation than __va()). The sanity checks and > > memblock reserve could also perhaps be moved to a common location. > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > __early_init_dt_declare_initrd as long as we have a path to removing > > it like the above option. > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > Something like this might be just all we need (completely untested, > probably it won't even compile): > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > index 9d9582c..e9ca238 100644 > --- a/arch/arm64/mm/init.c > +++ b/arch/arm64/mm/init.c > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > #ifdef CONFIG_BLK_DEV_INITRD > + > +static phys_addr_t initrd_start_phys, initrd_end_phys; > + > static int __init early_initrd(char *p) > { > unsigned long start, size; > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > if (*endp == ',') { > size = memparse(endp + 1, NULL); > > - initrd_start = start; > - initrd_end = start + size; > + initrd_start_phys = start; > + initrd_end_phys = end; > } > return 0; > } > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > } > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > + (initrd_start || initrd_start_phys)) { > + /* > + * FIXME: ensure proper precendence between > + * early_initrd and DT when both are present Command line takes precedence, so just reverse the order. > + */ > + if (initrd_start) { > + initrd_start_phys = __phys_to_virt(initrd_start); > + initrd_end_phys = __phys_to_virt(initrd_end); AIUI, the original issue was doing the P2V translation was happening too early and the VA could be wrong if the linear range is adjusted. So I don't think this would work. I suppose you could convert the VA back to a PA before any adjustments and then back to a VA again after. But that's kind of hacky. 2 wrongs making a right. > + } else if (initrd_start_phys) { > + initrd_start = __va(initrd_start_phys); > + initrd_end = __va(initrd_start_phys); > + } > + > /* > * Add back the memory we just removed if it results in the > * initrd to become inaccessible via the linear mapping. > * Otherwise, this is a no-op > */ > - u64 base = initrd_start & PAGE_MASK; > - u64 size = PAGE_ALIGN(initrd_end) - base; > + u64 base = initrd_start_phys & PAGE_MASK; > + u64 size = PAGE_ALIGN(initrd_end_phys) - base; > > /* > * We can only add back the initrd memory if we don't end up > @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) > * pagetables with memblock. > */ > memblock_reserve(__pa_symbol(_text), _end - _text); > -#ifdef CONFIG_BLK_DEV_INITRD > +#if 0 > if (initrd_start) { > memblock_reserve(initrd_start, initrd_end - initrd_start); > > > > Rob > > > > -- > Sincerely yours, > Mike. > ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 13:15 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-25 13:15 UTC (permalink / raw) To: linux-arm-kernel +Ard On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > Hi all, > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > because we define __early_init_dt_declare_initrd() differently and we do > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > amount of other header files, and translation units as well. > > > > I scratch my head sometimes as to why some config options rebuild so > > much stuff. One down, ? to go. :) > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > systems that generate two kernels: one with the initramfs and one > > > without. buildroot is one of these build systems, OpenWrt is also > > > another one that does this. > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > custom __early_init_dt_declare_initrd() definition away from > > > asm/memory.h > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > factor 73 approximately. > > > > > > Apologies for the long CC list, please let me know how you would go > > > about merging that and if another approach would be preferable, e.g: > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > something like that. > > > > There may be a better way as of 4.20 because bootmem is now gone and > > only memblock is used. This should unify what each arch needs to do > > with initrd early. We need the physical address early for memblock > > reserving. Then later on we need the virtual address to access the > > initrd. Perhaps we should just change initrd_start and initrd_end to > > physical addresses (or add 2 new variables would be less invasive and > > allow for different translation than __va()). The sanity checks and > > memblock reserve could also perhaps be moved to a common location. > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > __early_init_dt_declare_initrd as long as we have a path to removing > > it like the above option. > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > Something like this might be just all we need (completely untested, > probably it won't even compile): > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > index 9d9582c..e9ca238 100644 > --- a/arch/arm64/mm/init.c > +++ b/arch/arm64/mm/init.c > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > #ifdef CONFIG_BLK_DEV_INITRD > + > +static phys_addr_t initrd_start_phys, initrd_end_phys; > + > static int __init early_initrd(char *p) > { > unsigned long start, size; > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > if (*endp == ',') { > size = memparse(endp + 1, NULL); > > - initrd_start = start; > - initrd_end = start + size; > + initrd_start_phys = start; > + initrd_end_phys = end; > } > return 0; > } > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > } > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > + (initrd_start || initrd_start_phys)) { > + /* > + * FIXME: ensure proper precendence between > + * early_initrd and DT when both are present Command line takes precedence, so just reverse the order. > + */ > + if (initrd_start) { > + initrd_start_phys = __phys_to_virt(initrd_start); > + initrd_end_phys = __phys_to_virt(initrd_end); AIUI, the original issue was doing the P2V translation was happening too early and the VA could be wrong if the linear range is adjusted. So I don't think this would work. I suppose you could convert the VA back to a PA before any adjustments and then back to a VA again after. But that's kind of hacky. 2 wrongs making a right. > + } else if (initrd_start_phys) { > + initrd_start = __va(initrd_start_phys); > + initrd_end = __va(initrd_start_phys); > + } > + > /* > * Add back the memory we just removed if it results in the > * initrd to become inaccessible via the linear mapping. > * Otherwise, this is a no-op > */ > - u64 base = initrd_start & PAGE_MASK; > - u64 size = PAGE_ALIGN(initrd_end) - base; > + u64 base = initrd_start_phys & PAGE_MASK; > + u64 size = PAGE_ALIGN(initrd_end_phys) - base; > > /* > * We can only add back the initrd memory if we don't end up > @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) > * pagetables with memblock. > */ > memblock_reserve(__pa_symbol(_text), _end - _text); > -#ifdef CONFIG_BLK_DEV_INITRD > +#if 0 > if (initrd_start) { > memblock_reserve(initrd_start, initrd_end - initrd_start); > > > > Rob > > > > -- > Sincerely yours, > Mike. > ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 13:15 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-25 13:15 UTC (permalink / raw) To: linux-snps-arc +Ard On Thu, Oct 25, 2018@4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > On Wed, Oct 24, 2018@02:55:17PM -0500, Rob Herring wrote: > > On Wed, Oct 24, 2018@2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > Hi all, > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > because we define __early_init_dt_declare_initrd() differently and we do > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > amount of other header files, and translation units as well. > > > > I scratch my head sometimes as to why some config options rebuild so > > much stuff. One down, ? to go. :) > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > systems that generate two kernels: one with the initramfs and one > > > without. buildroot is one of these build systems, OpenWrt is also > > > another one that does this. > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > custom __early_init_dt_declare_initrd() definition away from > > > asm/memory.h > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > factor 73 approximately. > > > > > > Apologies for the long CC list, please let me know how you would go > > > about merging that and if another approach would be preferable, e.g: > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > something like that. > > > > There may be a better way as of 4.20 because bootmem is now gone and > > only memblock is used. This should unify what each arch needs to do > > with initrd early. We need the physical address early for memblock > > reserving. Then later on we need the virtual address to access the > > initrd. Perhaps we should just change initrd_start and initrd_end to > > physical addresses (or add 2 new variables would be less invasive and > > allow for different translation than __va()). The sanity checks and > > memblock reserve could also perhaps be moved to a common location. > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > __early_init_dt_declare_initrd as long as we have a path to removing > > it like the above option. > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > Something like this might be just all we need (completely untested, > probably it won't even compile): > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > index 9d9582c..e9ca238 100644 > --- a/arch/arm64/mm/init.c > +++ b/arch/arm64/mm/init.c > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > #ifdef CONFIG_BLK_DEV_INITRD > + > +static phys_addr_t initrd_start_phys, initrd_end_phys; > + > static int __init early_initrd(char *p) > { > unsigned long start, size; > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > if (*endp == ',') { > size = memparse(endp + 1, NULL); > > - initrd_start = start; > - initrd_end = start + size; > + initrd_start_phys = start; > + initrd_end_phys = end; > } > return 0; > } > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > } > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > + (initrd_start || initrd_start_phys)) { > + /* > + * FIXME: ensure proper precendence between > + * early_initrd and DT when both are present Command line takes precedence, so just reverse the order. > + */ > + if (initrd_start) { > + initrd_start_phys = __phys_to_virt(initrd_start); > + initrd_end_phys = __phys_to_virt(initrd_end); AIUI, the original issue was doing the P2V translation was happening too early and the VA could be wrong if the linear range is adjusted. So I don't think this would work. I suppose you could convert the VA back to a PA before any adjustments and then back to a VA again after. But that's kind of hacky. 2 wrongs making a right. > + } else if (initrd_start_phys) { > + initrd_start = __va(initrd_start_phys); > + initrd_end = __va(initrd_start_phys); > + } > + > /* > * Add back the memory we just removed if it results in the > * initrd to become inaccessible via the linear mapping. > * Otherwise, this is a no-op > */ > - u64 base = initrd_start & PAGE_MASK; > - u64 size = PAGE_ALIGN(initrd_end) - base; > + u64 base = initrd_start_phys & PAGE_MASK; > + u64 size = PAGE_ALIGN(initrd_end_phys) - base; > > /* > * We can only add back the initrd memory if we don't end up > @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) > * pagetables with memblock. > */ > memblock_reserve(__pa_symbol(_text), _end - _text); > -#ifdef CONFIG_BLK_DEV_INITRD > +#if 0 > if (initrd_start) { > memblock_reserve(initrd_start, initrd_end - initrd_start); > > > > Rob > > > > -- > Sincerely yours, > Mike. > ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 13:15 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-25 13:15 UTC (permalink / raw) To: rppt, Ard Biesheuvel Cc: Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, linux-s390, Florian Fainelli, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, Marc Zyngier, linux-um, linux-m68k, Openrisc, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-parisc, Greg Kroah-Hartman, linux-kernel, linux-alpha, Olof Johansson, nios2-dev, linuxppc-dev +Ard On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > Hi all, > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > because we define __early_init_dt_declare_initrd() differently and we do > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > amount of other header files, and translation units as well. > > > > I scratch my head sometimes as to why some config options rebuild so > > much stuff. One down, ? to go. :) > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > systems that generate two kernels: one with the initramfs and one > > > without. buildroot is one of these build systems, OpenWrt is also > > > another one that does this. > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > custom __early_init_dt_declare_initrd() definition away from > > > asm/memory.h > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > factor 73 approximately. > > > > > > Apologies for the long CC list, please let me know how you would go > > > about merging that and if another approach would be preferable, e.g: > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > something like that. > > > > There may be a better way as of 4.20 because bootmem is now gone and > > only memblock is used. This should unify what each arch needs to do > > with initrd early. We need the physical address early for memblock > > reserving. Then later on we need the virtual address to access the > > initrd. Perhaps we should just change initrd_start and initrd_end to > > physical addresses (or add 2 new variables would be less invasive and > > allow for different translation than __va()). The sanity checks and > > memblock reserve could also perhaps be moved to a common location. > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > __early_init_dt_declare_initrd as long as we have a path to removing > > it like the above option. > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > Something like this might be just all we need (completely untested, > probably it won't even compile): > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > index 9d9582c..e9ca238 100644 > --- a/arch/arm64/mm/init.c > +++ b/arch/arm64/mm/init.c > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > #ifdef CONFIG_BLK_DEV_INITRD > + > +static phys_addr_t initrd_start_phys, initrd_end_phys; > + > static int __init early_initrd(char *p) > { > unsigned long start, size; > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > if (*endp == ',') { > size = memparse(endp + 1, NULL); > > - initrd_start = start; > - initrd_end = start + size; > + initrd_start_phys = start; > + initrd_end_phys = end; > } > return 0; > } > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > } > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > + (initrd_start || initrd_start_phys)) { > + /* > + * FIXME: ensure proper precendence between > + * early_initrd and DT when both are present Command line takes precedence, so just reverse the order. > + */ > + if (initrd_start) { > + initrd_start_phys = __phys_to_virt(initrd_start); > + initrd_end_phys = __phys_to_virt(initrd_end); AIUI, the original issue was doing the P2V translation was happening too early and the VA could be wrong if the linear range is adjusted. So I don't think this would work. I suppose you could convert the VA back to a PA before any adjustments and then back to a VA again after. But that's kind of hacky. 2 wrongs making a right. > + } else if (initrd_start_phys) { > + initrd_start = __va(initrd_start_phys); > + initrd_end = __va(initrd_start_phys); > + } > + > /* > * Add back the memory we just removed if it results in the > * initrd to become inaccessible via the linear mapping. > * Otherwise, this is a no-op > */ > - u64 base = initrd_start & PAGE_MASK; > - u64 size = PAGE_ALIGN(initrd_end) - base; > + u64 base = initrd_start_phys & PAGE_MASK; > + u64 size = PAGE_ALIGN(initrd_end_phys) - base; > > /* > * We can only add back the initrd memory if we don't end up > @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) > * pagetables with memblock. > */ > memblock_reserve(__pa_symbol(_text), _end - _text); > -#ifdef CONFIG_BLK_DEV_INITRD > +#if 0 > if (initrd_start) { > memblock_reserve(initrd_start, initrd_end - initrd_start); > > > > Rob > > > > -- > Sincerely yours, > Mike. > ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 13:15 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-25 13:15 UTC (permalink / raw) To: rppt, Ard Biesheuvel Cc: Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, linux-s390, Florian Fainelli, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, Marc Zyngier, linux-um, linux-m68k, Openrisc, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-parisc, Greg Kroah-Hartman, linux-kernel, linux-alpha, Olof Johansson, nios2-dev, linuxppc-dev +Ard On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > Hi all, > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > because we define __early_init_dt_declare_initrd() differently and we do > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > amount of other header files, and translation units as well. > > > > I scratch my head sometimes as to why some config options rebuild so > > much stuff. One down, ? to go. :) > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > systems that generate two kernels: one with the initramfs and one > > > without. buildroot is one of these build systems, OpenWrt is also > > > another one that does this. > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > custom __early_init_dt_declare_initrd() definition away from > > > asm/memory.h > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > factor 73 approximately. > > > > > > Apologies for the long CC list, please let me know how you would go > > > about merging that and if another approach would be preferable, e.g: > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > something like that. > > > > There may be a better way as of 4.20 because bootmem is now gone and > > only memblock is used. This should unify what each arch needs to do > > with initrd early. We need the physical address early for memblock > > reserving. Then later on we need the virtual address to access the > > initrd. Perhaps we should just change initrd_start and initrd_end to > > physical addresses (or add 2 new variables would be less invasive and > > allow for different translation than __va()). The sanity checks and > > memblock reserve could also perhaps be moved to a common location. > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > __early_init_dt_declare_initrd as long as we have a path to removing > > it like the above option. > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > Something like this might be just all we need (completely untested, > probably it won't even compile): > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > index 9d9582c..e9ca238 100644 > --- a/arch/arm64/mm/init.c > +++ b/arch/arm64/mm/init.c > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > #ifdef CONFIG_BLK_DEV_INITRD > + > +static phys_addr_t initrd_start_phys, initrd_end_phys; > + > static int __init early_initrd(char *p) > { > unsigned long start, size; > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > if (*endp == ',') { > size = memparse(endp + 1, NULL); > > - initrd_start = start; > - initrd_end = start + size; > + initrd_start_phys = start; > + initrd_end_phys = end; > } > return 0; > } > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > } > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > + (initrd_start || initrd_start_phys)) { > + /* > + * FIXME: ensure proper precendence between > + * early_initrd and DT when both are present Command line takes precedence, so just reverse the order. > + */ > + if (initrd_start) { > + initrd_start_phys = __phys_to_virt(initrd_start); > + initrd_end_phys = __phys_to_virt(initrd_end); AIUI, the original issue was doing the P2V translation was happening too early and the VA could be wrong if the linear range is adjusted. So I don't think this would work. I suppose you could convert the VA back to a PA before any adjustments and then back to a VA again after. But that's kind of hacky. 2 wrongs making a right. > + } else if (initrd_start_phys) { > + initrd_start = __va(initrd_start_phys); > + initrd_end = __va(initrd_start_phys); > + } > + > /* > * Add back the memory we just removed if it results in the > * initrd to become inaccessible via the linear mapping. > * Otherwise, this is a no-op > */ > - u64 base = initrd_start & PAGE_MASK; > - u64 size = PAGE_ALIGN(initrd_end) - base; > + u64 base = initrd_start_phys & PAGE_MASK; > + u64 size = PAGE_ALIGN(initrd_end_phys) - base; > > /* > * We can only add back the initrd memory if we don't end up > @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) > * pagetables with memblock. > */ > memblock_reserve(__pa_symbol(_text), _end - _text); > -#ifdef CONFIG_BLK_DEV_INITRD > +#if 0 > if (initrd_start) { > memblock_reserve(initrd_start, initrd_end - initrd_start); > > > > Rob > > > > -- > Sincerely yours, > Mike. > _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 13:15 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-25 13:15 UTC (permalink / raw) To: linux-riscv +Ard On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > Hi all, > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > because we define __early_init_dt_declare_initrd() differently and we do > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > amount of other header files, and translation units as well. > > > > I scratch my head sometimes as to why some config options rebuild so > > much stuff. One down, ? to go. :) > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > systems that generate two kernels: one with the initramfs and one > > > without. buildroot is one of these build systems, OpenWrt is also > > > another one that does this. > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > custom __early_init_dt_declare_initrd() definition away from > > > asm/memory.h > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > factor 73 approximately. > > > > > > Apologies for the long CC list, please let me know how you would go > > > about merging that and if another approach would be preferable, e.g: > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > something like that. > > > > There may be a better way as of 4.20 because bootmem is now gone and > > only memblock is used. This should unify what each arch needs to do > > with initrd early. We need the physical address early for memblock > > reserving. Then later on we need the virtual address to access the > > initrd. Perhaps we should just change initrd_start and initrd_end to > > physical addresses (or add 2 new variables would be less invasive and > > allow for different translation than __va()). The sanity checks and > > memblock reserve could also perhaps be moved to a common location. > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > __early_init_dt_declare_initrd as long as we have a path to removing > > it like the above option. > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > Something like this might be just all we need (completely untested, > probably it won't even compile): > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > index 9d9582c..e9ca238 100644 > --- a/arch/arm64/mm/init.c > +++ b/arch/arm64/mm/init.c > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > #ifdef CONFIG_BLK_DEV_INITRD > + > +static phys_addr_t initrd_start_phys, initrd_end_phys; > + > static int __init early_initrd(char *p) > { > unsigned long start, size; > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > if (*endp == ',') { > size = memparse(endp + 1, NULL); > > - initrd_start = start; > - initrd_end = start + size; > + initrd_start_phys = start; > + initrd_end_phys = end; > } > return 0; > } > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > } > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > + (initrd_start || initrd_start_phys)) { > + /* > + * FIXME: ensure proper precendence between > + * early_initrd and DT when both are present Command line takes precedence, so just reverse the order. > + */ > + if (initrd_start) { > + initrd_start_phys = __phys_to_virt(initrd_start); > + initrd_end_phys = __phys_to_virt(initrd_end); AIUI, the original issue was doing the P2V translation was happening too early and the VA could be wrong if the linear range is adjusted. So I don't think this would work. I suppose you could convert the VA back to a PA before any adjustments and then back to a VA again after. But that's kind of hacky. 2 wrongs making a right. > + } else if (initrd_start_phys) { > + initrd_start = __va(initrd_start_phys); > + initrd_end = __va(initrd_start_phys); > + } > + > /* > * Add back the memory we just removed if it results in the > * initrd to become inaccessible via the linear mapping. > * Otherwise, this is a no-op > */ > - u64 base = initrd_start & PAGE_MASK; > - u64 size = PAGE_ALIGN(initrd_end) - base; > + u64 base = initrd_start_phys & PAGE_MASK; > + u64 size = PAGE_ALIGN(initrd_end_phys) - base; > > /* > * We can only add back the initrd memory if we don't end up > @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) > * pagetables with memblock. > */ > memblock_reserve(__pa_symbol(_text), _end - _text); > -#ifdef CONFIG_BLK_DEV_INITRD > +#if 0 > if (initrd_start) { > memblock_reserve(initrd_start, initrd_end - initrd_start); > > > > Rob > > > > -- > Sincerely yours, > Mike. > ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 13:15 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-25 13:15 UTC (permalink / raw) To: rppt, Ard Biesheuvel Cc: Florian Fainelli, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev, Openrisc, linux-parisc, linuxppc-dev, linux-riscv, linux-s390, SH-Linux, sparclinux, linux-um, linux-xtensa, devicetree, open list:GENERIC INCLUDE/ASM HEADER FILES +Ard On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > Hi all, > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > because we define __early_init_dt_declare_initrd() differently and we do > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > amount of other header files, and translation units as well. > > > > I scratch my head sometimes as to why some config options rebuild so > > much stuff. One down, ? to go. :) > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > systems that generate two kernels: one with the initramfs and one > > > without. buildroot is one of these build systems, OpenWrt is also > > > another one that does this. > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > custom __early_init_dt_declare_initrd() definition away from > > > asm/memory.h > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > factor 73 approximately. > > > > > > Apologies for the long CC list, please let me know how you would go > > > about merging that and if another approach would be preferable, e.g: > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > something like that. > > > > There may be a better way as of 4.20 because bootmem is now gone and > > only memblock is used. This should unify what each arch needs to do > > with initrd early. We need the physical address early for memblock > > reserving. Then later on we need the virtual address to access the > > initrd. Perhaps we should just change initrd_start and initrd_end to > > physical addresses (or add 2 new variables would be less invasive and > > allow for different translation than __va()). The sanity checks and > > memblock reserve could also perhaps be moved to a common location. > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > __early_init_dt_declare_initrd as long as we have a path to removing > > it like the above option. > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > Something like this might be just all we need (completely untested, > probably it won't even compile): > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > index 9d9582c..e9ca238 100644 > --- a/arch/arm64/mm/init.c > +++ b/arch/arm64/mm/init.c > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > #ifdef CONFIG_BLK_DEV_INITRD > + > +static phys_addr_t initrd_start_phys, initrd_end_phys; > + > static int __init early_initrd(char *p) > { > unsigned long start, size; > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > if (*endp == ',') { > size = memparse(endp + 1, NULL); > > - initrd_start = start; > - initrd_end = start + size; > + initrd_start_phys = start; > + initrd_end_phys = end; > } > return 0; > } > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > } > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > + (initrd_start || initrd_start_phys)) { > + /* > + * FIXME: ensure proper precendence between > + * early_initrd and DT when both are present Command line takes precedence, so just reverse the order. > + */ > + if (initrd_start) { > + initrd_start_phys = __phys_to_virt(initrd_start); > + initrd_end_phys = __phys_to_virt(initrd_end); AIUI, the original issue was doing the P2V translation was happening too early and the VA could be wrong if the linear range is adjusted. So I don't think this would work. I suppose you could convert the VA back to a PA before any adjustments and then back to a VA again after. But that's kind of hacky. 2 wrongs making a right. > + } else if (initrd_start_phys) { > + initrd_start = __va(initrd_start_phys); > + initrd_end = __va(initrd_start_phys); > + } > + > /* > * Add back the memory we just removed if it results in the > * initrd to become inaccessible via the linear mapping. > * Otherwise, this is a no-op > */ > - u64 base = initrd_start & PAGE_MASK; > - u64 size = PAGE_ALIGN(initrd_end) - base; > + u64 base = initrd_start_phys & PAGE_MASK; > + u64 size = PAGE_ALIGN(initrd_end_phys) - base; > > /* > * We can only add back the initrd memory if we don't end up > @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) > * pagetables with memblock. > */ > memblock_reserve(__pa_symbol(_text), _end - _text); > -#ifdef CONFIG_BLK_DEV_INITRD > +#if 0 > if (initrd_start) { > memblock_reserve(initrd_start, initrd_end - initrd_start); > > > > Rob > > > > -- > Sincerely yours, > Mike. > ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 13:15 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-25 13:15 UTC (permalink / raw) To: rppt, Ard Biesheuvel Cc: Florian Fainelli, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev, Openrisc, linux-parisc, linuxppc-dev, linux-riscv, linux-s390, SH-Linux, sparclinux, linux-um, linux-xtensa, devicetree, open list:GENERIC INCLUDE/ASM HEADER FILES +Ard On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > Hi all, > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > because we define __early_init_dt_declare_initrd() differently and we do > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > amount of other header files, and translation units as well. > > > > I scratch my head sometimes as to why some config options rebuild so > > much stuff. One down, ? to go. :) > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > systems that generate two kernels: one with the initramfs and one > > > without. buildroot is one of these build systems, OpenWrt is also > > > another one that does this. > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > custom __early_init_dt_declare_initrd() definition away from > > > asm/memory.h > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > factor 73 approximately. > > > > > > Apologies for the long CC list, please let me know how you would go > > > about merging that and if another approach would be preferable, e.g: > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > something like that. > > > > There may be a better way as of 4.20 because bootmem is now gone and > > only memblock is used. This should unify what each arch needs to do > > with initrd early. We need the physical address early for memblock > > reserving. Then later on we need the virtual address to access the > > initrd. Perhaps we should just change initrd_start and initrd_end to > > physical addresses (or add 2 new variables would be less invasive and > > allow for different translation than __va()). The sanity checks and > > memblock reserve could also perhaps be moved to a common location. > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > __early_init_dt_declare_initrd as long as we have a path to removing > > it like the above option. > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > Something like this might be just all we need (completely untested, > probably it won't even compile): > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > index 9d9582c..e9ca238 100644 > --- a/arch/arm64/mm/init.c > +++ b/arch/arm64/mm/init.c > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > #ifdef CONFIG_BLK_DEV_INITRD > + > +static phys_addr_t initrd_start_phys, initrd_end_phys; > + > static int __init early_initrd(char *p) > { > unsigned long start, size; > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > if (*endp == ',') { > size = memparse(endp + 1, NULL); > > - initrd_start = start; > - initrd_end = start + size; > + initrd_start_phys = start; > + initrd_end_phys = end; > } > return 0; > } > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > } > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > + (initrd_start || initrd_start_phys)) { > + /* > + * FIXME: ensure proper precendence between > + * early_initrd and DT when both are present Command line takes precedence, so just reverse the order. > + */ > + if (initrd_start) { > + initrd_start_phys = __phys_to_virt(initrd_start); > + initrd_end_phys = __phys_to_virt(initrd_end); AIUI, the original issue was doing the P2V translation was happening too early and the VA could be wrong if the linear range is adjusted. So I don't think this would work. I suppose you could convert the VA back to a PA before any adjustments and then back to a VA again after. But that's kind of hacky. 2 wrongs making a right. > + } else if (initrd_start_phys) { > + initrd_start = __va(initrd_start_phys); > + initrd_end = __va(initrd_start_phys); > + } > + > /* > * Add back the memory we just removed if it results in the > * initrd to become inaccessible via the linear mapping. > * Otherwise, this is a no-op > */ > - u64 base = initrd_start & PAGE_MASK; > - u64 size = PAGE_ALIGN(initrd_end) - base; > + u64 base = initrd_start_phys & PAGE_MASK; > + u64 size = PAGE_ALIGN(initrd_end_phys) - base; > > /* > * We can only add back the initrd memory if we don't end up > @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) > * pagetables with memblock. > */ > memblock_reserve(__pa_symbol(_text), _end - _text); > -#ifdef CONFIG_BLK_DEV_INITRD > +#if 0 > if (initrd_start) { > memblock_reserve(initrd_start, initrd_end - initrd_start); > > > > Rob > > > > -- > Sincerely yours, > Mike. > ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 13:15 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-25 13:15 UTC (permalink / raw) To: rppt, Ard Biesheuvel Cc: Florian Fainelli, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev +Ard On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > Hi all, > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > because we define __early_init_dt_declare_initrd() differently and we do > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > amount of other header files, and translation units as well. > > > > I scratch my head sometimes as to why some config options rebuild so > > much stuff. One down, ? to go. :) > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > systems that generate two kernels: one with the initramfs and one > > > without. buildroot is one of these build systems, OpenWrt is also > > > another one that does this. > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > custom __early_init_dt_declare_initrd() definition away from > > > asm/memory.h > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > factor 73 approximately. > > > > > > Apologies for the long CC list, please let me know how you would go > > > about merging that and if another approach would be preferable, e.g: > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > something like that. > > > > There may be a better way as of 4.20 because bootmem is now gone and > > only memblock is used. This should unify what each arch needs to do > > with initrd early. We need the physical address early for memblock > > reserving. Then later on we need the virtual address to access the > > initrd. Perhaps we should just change initrd_start and initrd_end to > > physical addresses (or add 2 new variables would be less invasive and > > allow for different translation than __va()). The sanity checks and > > memblock reserve could also perhaps be moved to a common location. > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > __early_init_dt_declare_initrd as long as we have a path to removing > > it like the above option. > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > Something like this might be just all we need (completely untested, > probably it won't even compile): > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > index 9d9582c..e9ca238 100644 > --- a/arch/arm64/mm/init.c > +++ b/arch/arm64/mm/init.c > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > #ifdef CONFIG_BLK_DEV_INITRD > + > +static phys_addr_t initrd_start_phys, initrd_end_phys; > + > static int __init early_initrd(char *p) > { > unsigned long start, size; > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > if (*endp == ',') { > size = memparse(endp + 1, NULL); > > - initrd_start = start; > - initrd_end = start + size; > + initrd_start_phys = start; > + initrd_end_phys = end; > } > return 0; > } > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > } > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > + (initrd_start || initrd_start_phys)) { > + /* > + * FIXME: ensure proper precendence between > + * early_initrd and DT when both are present Command line takes precedence, so just reverse the order. > + */ > + if (initrd_start) { > + initrd_start_phys = __phys_to_virt(initrd_start); > + initrd_end_phys = __phys_to_virt(initrd_end); AIUI, the original issue was doing the P2V translation was happening too early and the VA could be wrong if the linear range is adjusted. So I don't think this would work. I suppose you could convert the VA back to a PA before any adjustments and then back to a VA again after. But that's kind of hacky. 2 wrongs making a right. > + } else if (initrd_start_phys) { > + initrd_start = __va(initrd_start_phys); > + initrd_end = __va(initrd_start_phys); > + } > + > /* > * Add back the memory we just removed if it results in the > * initrd to become inaccessible via the linear mapping. > * Otherwise, this is a no-op > */ > - u64 base = initrd_start & PAGE_MASK; > - u64 size = PAGE_ALIGN(initrd_end) - base; > + u64 base = initrd_start_phys & PAGE_MASK; > + u64 size = PAGE_ALIGN(initrd_end_phys) - base; > > /* > * We can only add back the initrd memory if we don't end up > @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) > * pagetables with memblock. > */ > memblock_reserve(__pa_symbol(_text), _end - _text); > -#ifdef CONFIG_BLK_DEV_INITRD > +#if 0 > if (initrd_start) { > memblock_reserve(initrd_start, initrd_end - initrd_start); > > > > Rob > > > > -- > Sincerely yours, > Mike. > ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD 2018-10-25 13:15 ` Rob Herring ` (9 preceding siblings ...) (?) @ 2018-10-25 17:29 ` Mike Rapoport -1 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-25 17:29 UTC (permalink / raw) To: Rob Herring Cc: Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, linux-s390, Florian Fainelli, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, Marc Zyngier, linux-um, linux-m68k, Openrisc, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > +Ard > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > Hi all, > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > amount of other header files, and translation units as well. > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > much stuff. One down, ? to go. :) > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > systems that generate two kernels: one with the initramfs and one > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > another one that does this. > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > custom __early_init_dt_declare_initrd() definition away from > > > > asm/memory.h > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > factor 73 approximately. > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > about merging that and if another approach would be preferable, e.g: > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > something like that. > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > only memblock is used. This should unify what each arch needs to do > > > with initrd early. We need the physical address early for memblock > > > reserving. Then later on we need the virtual address to access the > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > physical addresses (or add 2 new variables would be less invasive and > > > allow for different translation than __va()). The sanity checks and > > > memblock reserve could also perhaps be moved to a common location. > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > it like the above option. > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > Something like this might be just all we need (completely untested, > > probably it won't even compile): > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > index 9d9582c..e9ca238 100644 > > --- a/arch/arm64/mm/init.c > > +++ b/arch/arm64/mm/init.c > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > #ifdef CONFIG_BLK_DEV_INITRD > > + > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > + > > static int __init early_initrd(char *p) > > { > > unsigned long start, size; > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > if (*endp = ',') { > > size = memparse(endp + 1, NULL); > > > > - initrd_start = start; > > - initrd_end = start + size; > > + initrd_start_phys = start; > > + initrd_end_phys = end; > > } > > return 0; > > } > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > } > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > + (initrd_start || initrd_start_phys)) { > > + /* > > + * FIXME: ensure proper precendence between > > + * early_initrd and DT when both are present > > Command line takes precedence, so just reverse the order. > > > + */ > > + if (initrd_start) { > > + initrd_start_phys = __phys_to_virt(initrd_start); > > + initrd_end_phys = __phys_to_virt(initrd_end); > > AIUI, the original issue was doing the P2V translation was happening > too early and the VA could be wrong if the linear range is adjusted. > So I don't think this would work. Probably things have changed since then, but in the current code there is initrd_start = __phys_to_virt(initrd_start); and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe it's safe to use __phys_to_virt() here as well. > I suppose you could convert the VA back to a PA before any adjustments > and then back to a VA again after. But that's kind of hacky. 2 wrongs > making a right. > > > + } else if (initrd_start_phys) { > > + initrd_start = __va(initrd_start_phys); > > + initrd_end = __va(initrd_start_phys); > > + } > > + > > /* > > * Add back the memory we just removed if it results in the > > * initrd to become inaccessible via the linear mapping. > > * Otherwise, this is a no-op > > */ > > - u64 base = initrd_start & PAGE_MASK; > > - u64 size = PAGE_ALIGN(initrd_end) - base; > > + u64 base = initrd_start_phys & PAGE_MASK; > > + u64 size = PAGE_ALIGN(initrd_end_phys) - base; > > > > /* > > * We can only add back the initrd memory if we don't end up > > @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) > > * pagetables with memblock. > > */ > > memblock_reserve(__pa_symbol(_text), _end - _text); > > -#ifdef CONFIG_BLK_DEV_INITRD > > +#if 0 > > if (initrd_start) { > > memblock_reserve(initrd_start, initrd_end - initrd_start); > > > > > > > Rob > > > > > > > -- > > Sincerely yours, > > Mike. > > > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 17:29 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-25 17:29 UTC (permalink / raw) To: Rob Herring Cc: Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, linux-s390, Florian Fainelli, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, Marc Zyngier, linux-um, linux-m68k, Openrisc, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-parisc, Ard Biesheuvel, Greg Kroah-Hartman, linux-kernel, linux-alpha, Olof Johansson, nios2-dev, linuxppc-dev On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > +Ard > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > Hi all, > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > amount of other header files, and translation units as well. > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > much stuff. One down, ? to go. :) > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > systems that generate two kernels: one with the initramfs and one > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > another one that does this. > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > custom __early_init_dt_declare_initrd() definition away from > > > > asm/memory.h > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > factor 73 approximately. > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > about merging that and if another approach would be preferable, e.g: > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > something like that. > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > only memblock is used. This should unify what each arch needs to do > > > with initrd early. We need the physical address early for memblock > > > reserving. Then later on we need the virtual address to access the > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > physical addresses (or add 2 new variables would be less invasive and > > > allow for different translation than __va()). The sanity checks and > > > memblock reserve could also perhaps be moved to a common location. > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > it like the above option. > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > Something like this might be just all we need (completely untested, > > probably it won't even compile): > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > index 9d9582c..e9ca238 100644 > > --- a/arch/arm64/mm/init.c > > +++ b/arch/arm64/mm/init.c > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > #ifdef CONFIG_BLK_DEV_INITRD > > + > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > + > > static int __init early_initrd(char *p) > > { > > unsigned long start, size; > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > if (*endp == ',') { > > size = memparse(endp + 1, NULL); > > > > - initrd_start = start; > > - initrd_end = start + size; > > + initrd_start_phys = start; > > + initrd_end_phys = end; > > } > > return 0; > > } > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > } > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > + (initrd_start || initrd_start_phys)) { > > + /* > > + * FIXME: ensure proper precendence between > > + * early_initrd and DT when both are present > > Command line takes precedence, so just reverse the order. > > > + */ > > + if (initrd_start) { > > + initrd_start_phys = __phys_to_virt(initrd_start); > > + initrd_end_phys = __phys_to_virt(initrd_end); > > AIUI, the original issue was doing the P2V translation was happening > too early and the VA could be wrong if the linear range is adjusted. > So I don't think this would work. Probably things have changed since then, but in the current code there is initrd_start = __phys_to_virt(initrd_start); and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe it's safe to use __phys_to_virt() here as well. > I suppose you could convert the VA back to a PA before any adjustments > and then back to a VA again after. But that's kind of hacky. 2 wrongs > making a right. > > > + } else if (initrd_start_phys) { > > + initrd_start = __va(initrd_start_phys); > > + initrd_end = __va(initrd_start_phys); > > + } > > + > > /* > > * Add back the memory we just removed if it results in the > > * initrd to become inaccessible via the linear mapping. > > * Otherwise, this is a no-op > > */ > > - u64 base = initrd_start & PAGE_MASK; > > - u64 size = PAGE_ALIGN(initrd_end) - base; > > + u64 base = initrd_start_phys & PAGE_MASK; > > + u64 size = PAGE_ALIGN(initrd_end_phys) - base; > > > > /* > > * We can only add back the initrd memory if we don't end up > > @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) > > * pagetables with memblock. > > */ > > memblock_reserve(__pa_symbol(_text), _end - _text); > > -#ifdef CONFIG_BLK_DEV_INITRD > > +#if 0 > > if (initrd_start) { > > memblock_reserve(initrd_start, initrd_end - initrd_start); > > > > > > > Rob > > > > > > > -- > > Sincerely yours, > > Mike. > > > -- Sincerely yours, Mike. _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 168+ messages in thread
* [OpenRISC] [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 17:29 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-25 17:29 UTC (permalink / raw) To: openrisc On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > +Ard > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > Hi all, > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > amount of other header files, and translation units as well. > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > much stuff. One down, ? to go. :) > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > systems that generate two kernels: one with the initramfs and one > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > another one that does this. > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > custom __early_init_dt_declare_initrd() definition away from > > > > asm/memory.h > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > factor 73 approximately. > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > about merging that and if another approach would be preferable, e.g: > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > something like that. > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > only memblock is used. This should unify what each arch needs to do > > > with initrd early. We need the physical address early for memblock > > > reserving. Then later on we need the virtual address to access the > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > physical addresses (or add 2 new variables would be less invasive and > > > allow for different translation than __va()). The sanity checks and > > > memblock reserve could also perhaps be moved to a common location. > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > it like the above option. > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > Something like this might be just all we need (completely untested, > > probably it won't even compile): > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > index 9d9582c..e9ca238 100644 > > --- a/arch/arm64/mm/init.c > > +++ b/arch/arm64/mm/init.c > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > #ifdef CONFIG_BLK_DEV_INITRD > > + > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > + > > static int __init early_initrd(char *p) > > { > > unsigned long start, size; > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > if (*endp == ',') { > > size = memparse(endp + 1, NULL); > > > > - initrd_start = start; > > - initrd_end = start + size; > > + initrd_start_phys = start; > > + initrd_end_phys = end; > > } > > return 0; > > } > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > } > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > + (initrd_start || initrd_start_phys)) { > > + /* > > + * FIXME: ensure proper precendence between > > + * early_initrd and DT when both are present > > Command line takes precedence, so just reverse the order. > > > + */ > > + if (initrd_start) { > > + initrd_start_phys = __phys_to_virt(initrd_start); > > + initrd_end_phys = __phys_to_virt(initrd_end); > > AIUI, the original issue was doing the P2V translation was happening > too early and the VA could be wrong if the linear range is adjusted. > So I don't think this would work. Probably things have changed since then, but in the current code there is initrd_start = __phys_to_virt(initrd_start); and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe it's safe to use __phys_to_virt() here as well. > I suppose you could convert the VA back to a PA before any adjustments > and then back to a VA again after. But that's kind of hacky. 2 wrongs > making a right. > > > + } else if (initrd_start_phys) { > > + initrd_start = __va(initrd_start_phys); > > + initrd_end = __va(initrd_start_phys); > > + } > > + > > /* > > * Add back the memory we just removed if it results in the > > * initrd to become inaccessible via the linear mapping. > > * Otherwise, this is a no-op > > */ > > - u64 base = initrd_start & PAGE_MASK; > > - u64 size = PAGE_ALIGN(initrd_end) - base; > > + u64 base = initrd_start_phys & PAGE_MASK; > > + u64 size = PAGE_ALIGN(initrd_end_phys) - base; > > > > /* > > * We can only add back the initrd memory if we don't end up > > @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) > > * pagetables with memblock. > > */ > > memblock_reserve(__pa_symbol(_text), _end - _text); > > -#ifdef CONFIG_BLK_DEV_INITRD > > +#if 0 > > if (initrd_start) { > > memblock_reserve(initrd_start, initrd_end - initrd_start); > > > > > > > Rob > > > > > > > -- > > Sincerely yours, > > Mike. > > > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 17:29 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-25 17:29 UTC (permalink / raw) To: linux-arm-kernel On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > +Ard > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > Hi all, > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > amount of other header files, and translation units as well. > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > much stuff. One down, ? to go. :) > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > systems that generate two kernels: one with the initramfs and one > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > another one that does this. > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > custom __early_init_dt_declare_initrd() definition away from > > > > asm/memory.h > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > factor 73 approximately. > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > about merging that and if another approach would be preferable, e.g: > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > something like that. > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > only memblock is used. This should unify what each arch needs to do > > > with initrd early. We need the physical address early for memblock > > > reserving. Then later on we need the virtual address to access the > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > physical addresses (or add 2 new variables would be less invasive and > > > allow for different translation than __va()). The sanity checks and > > > memblock reserve could also perhaps be moved to a common location. > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > it like the above option. > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > Something like this might be just all we need (completely untested, > > probably it won't even compile): > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > index 9d9582c..e9ca238 100644 > > --- a/arch/arm64/mm/init.c > > +++ b/arch/arm64/mm/init.c > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > #ifdef CONFIG_BLK_DEV_INITRD > > + > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > + > > static int __init early_initrd(char *p) > > { > > unsigned long start, size; > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > if (*endp == ',') { > > size = memparse(endp + 1, NULL); > > > > - initrd_start = start; > > - initrd_end = start + size; > > + initrd_start_phys = start; > > + initrd_end_phys = end; > > } > > return 0; > > } > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > } > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > + (initrd_start || initrd_start_phys)) { > > + /* > > + * FIXME: ensure proper precendence between > > + * early_initrd and DT when both are present > > Command line takes precedence, so just reverse the order. > > > + */ > > + if (initrd_start) { > > + initrd_start_phys = __phys_to_virt(initrd_start); > > + initrd_end_phys = __phys_to_virt(initrd_end); > > AIUI, the original issue was doing the P2V translation was happening > too early and the VA could be wrong if the linear range is adjusted. > So I don't think this would work. Probably things have changed since then, but in the current code there is initrd_start = __phys_to_virt(initrd_start); and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe it's safe to use __phys_to_virt() here as well. > I suppose you could convert the VA back to a PA before any adjustments > and then back to a VA again after. But that's kind of hacky. 2 wrongs > making a right. > > > + } else if (initrd_start_phys) { > > + initrd_start = __va(initrd_start_phys); > > + initrd_end = __va(initrd_start_phys); > > + } > > + > > /* > > * Add back the memory we just removed if it results in the > > * initrd to become inaccessible via the linear mapping. > > * Otherwise, this is a no-op > > */ > > - u64 base = initrd_start & PAGE_MASK; > > - u64 size = PAGE_ALIGN(initrd_end) - base; > > + u64 base = initrd_start_phys & PAGE_MASK; > > + u64 size = PAGE_ALIGN(initrd_end_phys) - base; > > > > /* > > * We can only add back the initrd memory if we don't end up > > @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) > > * pagetables with memblock. > > */ > > memblock_reserve(__pa_symbol(_text), _end - _text); > > -#ifdef CONFIG_BLK_DEV_INITRD > > +#if 0 > > if (initrd_start) { > > memblock_reserve(initrd_start, initrd_end - initrd_start); > > > > > > > Rob > > > > > > > -- > > Sincerely yours, > > Mike. > > > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 17:29 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-25 17:29 UTC (permalink / raw) To: linux-snps-arc On Thu, Oct 25, 2018@08:15:15AM -0500, Rob Herring wrote: > +Ard > > On Thu, Oct 25, 2018@4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > On Wed, Oct 24, 2018@02:55:17PM -0500, Rob Herring wrote: > > > On Wed, Oct 24, 2018@2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > Hi all, > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > amount of other header files, and translation units as well. > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > much stuff. One down, ? to go. :) > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > systems that generate two kernels: one with the initramfs and one > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > another one that does this. > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > custom __early_init_dt_declare_initrd() definition away from > > > > asm/memory.h > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > factor 73 approximately. > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > about merging that and if another approach would be preferable, e.g: > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > something like that. > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > only memblock is used. This should unify what each arch needs to do > > > with initrd early. We need the physical address early for memblock > > > reserving. Then later on we need the virtual address to access the > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > physical addresses (or add 2 new variables would be less invasive and > > > allow for different translation than __va()). The sanity checks and > > > memblock reserve could also perhaps be moved to a common location. > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > it like the above option. > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > Something like this might be just all we need (completely untested, > > probably it won't even compile): > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > index 9d9582c..e9ca238 100644 > > --- a/arch/arm64/mm/init.c > > +++ b/arch/arm64/mm/init.c > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > #ifdef CONFIG_BLK_DEV_INITRD > > + > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > + > > static int __init early_initrd(char *p) > > { > > unsigned long start, size; > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > if (*endp == ',') { > > size = memparse(endp + 1, NULL); > > > > - initrd_start = start; > > - initrd_end = start + size; > > + initrd_start_phys = start; > > + initrd_end_phys = end; > > } > > return 0; > > } > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > } > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > + (initrd_start || initrd_start_phys)) { > > + /* > > + * FIXME: ensure proper precendence between > > + * early_initrd and DT when both are present > > Command line takes precedence, so just reverse the order. > > > + */ > > + if (initrd_start) { > > + initrd_start_phys = __phys_to_virt(initrd_start); > > + initrd_end_phys = __phys_to_virt(initrd_end); > > AIUI, the original issue was doing the P2V translation was happening > too early and the VA could be wrong if the linear range is adjusted. > So I don't think this would work. Probably things have changed since then, but in the current code there is initrd_start = __phys_to_virt(initrd_start); and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe it's safe to use __phys_to_virt() here as well. > I suppose you could convert the VA back to a PA before any adjustments > and then back to a VA again after. But that's kind of hacky. 2 wrongs > making a right. > > > + } else if (initrd_start_phys) { > > + initrd_start = __va(initrd_start_phys); > > + initrd_end = __va(initrd_start_phys); > > + } > > + > > /* > > * Add back the memory we just removed if it results in the > > * initrd to become inaccessible via the linear mapping. > > * Otherwise, this is a no-op > > */ > > - u64 base = initrd_start & PAGE_MASK; > > - u64 size = PAGE_ALIGN(initrd_end) - base; > > + u64 base = initrd_start_phys & PAGE_MASK; > > + u64 size = PAGE_ALIGN(initrd_end_phys) - base; > > > > /* > > * We can only add back the initrd memory if we don't end up > > @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) > > * pagetables with memblock. > > */ > > memblock_reserve(__pa_symbol(_text), _end - _text); > > -#ifdef CONFIG_BLK_DEV_INITRD > > +#if 0 > > if (initrd_start) { > > memblock_reserve(initrd_start, initrd_end - initrd_start); > > > > > > > Rob > > > > > > > -- > > Sincerely yours, > > Mike. > > > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 17:29 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-25 17:29 UTC (permalink / raw) To: Rob Herring Cc: Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, linux-s390, Florian Fainelli, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, Marc Zyngier, linux-um, linux-m68k, Openrisc, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-parisc, Ard Biesheuvel, Greg Kroah-Hartman, linux-kernel, linux-alpha, Olof Johansson, nios2-dev, linuxppc-dev On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > +Ard > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > Hi all, > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > amount of other header files, and translation units as well. > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > much stuff. One down, ? to go. :) > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > systems that generate two kernels: one with the initramfs and one > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > another one that does this. > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > custom __early_init_dt_declare_initrd() definition away from > > > > asm/memory.h > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > factor 73 approximately. > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > about merging that and if another approach would be preferable, e.g: > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > something like that. > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > only memblock is used. This should unify what each arch needs to do > > > with initrd early. We need the physical address early for memblock > > > reserving. Then later on we need the virtual address to access the > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > physical addresses (or add 2 new variables would be less invasive and > > > allow for different translation than __va()). The sanity checks and > > > memblock reserve could also perhaps be moved to a common location. > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > it like the above option. > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > Something like this might be just all we need (completely untested, > > probably it won't even compile): > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > index 9d9582c..e9ca238 100644 > > --- a/arch/arm64/mm/init.c > > +++ b/arch/arm64/mm/init.c > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > #ifdef CONFIG_BLK_DEV_INITRD > > + > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > + > > static int __init early_initrd(char *p) > > { > > unsigned long start, size; > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > if (*endp == ',') { > > size = memparse(endp + 1, NULL); > > > > - initrd_start = start; > > - initrd_end = start + size; > > + initrd_start_phys = start; > > + initrd_end_phys = end; > > } > > return 0; > > } > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > } > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > + (initrd_start || initrd_start_phys)) { > > + /* > > + * FIXME: ensure proper precendence between > > + * early_initrd and DT when both are present > > Command line takes precedence, so just reverse the order. > > > + */ > > + if (initrd_start) { > > + initrd_start_phys = __phys_to_virt(initrd_start); > > + initrd_end_phys = __phys_to_virt(initrd_end); > > AIUI, the original issue was doing the P2V translation was happening > too early and the VA could be wrong if the linear range is adjusted. > So I don't think this would work. Probably things have changed since then, but in the current code there is initrd_start = __phys_to_virt(initrd_start); and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe it's safe to use __phys_to_virt() here as well. > I suppose you could convert the VA back to a PA before any adjustments > and then back to a VA again after. But that's kind of hacky. 2 wrongs > making a right. > > > + } else if (initrd_start_phys) { > > + initrd_start = __va(initrd_start_phys); > > + initrd_end = __va(initrd_start_phys); > > + } > > + > > /* > > * Add back the memory we just removed if it results in the > > * initrd to become inaccessible via the linear mapping. > > * Otherwise, this is a no-op > > */ > > - u64 base = initrd_start & PAGE_MASK; > > - u64 size = PAGE_ALIGN(initrd_end) - base; > > + u64 base = initrd_start_phys & PAGE_MASK; > > + u64 size = PAGE_ALIGN(initrd_end_phys) - base; > > > > /* > > * We can only add back the initrd memory if we don't end up > > @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) > > * pagetables with memblock. > > */ > > memblock_reserve(__pa_symbol(_text), _end - _text); > > -#ifdef CONFIG_BLK_DEV_INITRD > > +#if 0 > > if (initrd_start) { > > memblock_reserve(initrd_start, initrd_end - initrd_start); > > > > > > > Rob > > > > > > > -- > > Sincerely yours, > > Mike. > > > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 17:29 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-25 17:29 UTC (permalink / raw) To: Rob Herring Cc: Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, linux-s390, Florian Fainelli, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, Marc Zyngier, linux-um, linux-m68k, Openrisc, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-parisc, Ard Biesheuvel, Greg Kroah-Hartman, linux-kernel, linux-alpha, Olof Johansson, nios2-dev, linuxppc-dev On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > +Ard > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > Hi all, > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > amount of other header files, and translation units as well. > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > much stuff. One down, ? to go. :) > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > systems that generate two kernels: one with the initramfs and one > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > another one that does this. > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > custom __early_init_dt_declare_initrd() definition away from > > > > asm/memory.h > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > factor 73 approximately. > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > about merging that and if another approach would be preferable, e.g: > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > something like that. > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > only memblock is used. This should unify what each arch needs to do > > > with initrd early. We need the physical address early for memblock > > > reserving. Then later on we need the virtual address to access the > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > physical addresses (or add 2 new variables would be less invasive and > > > allow for different translation than __va()). The sanity checks and > > > memblock reserve could also perhaps be moved to a common location. > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > it like the above option. > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > Something like this might be just all we need (completely untested, > > probably it won't even compile): > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > index 9d9582c..e9ca238 100644 > > --- a/arch/arm64/mm/init.c > > +++ b/arch/arm64/mm/init.c > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > #ifdef CONFIG_BLK_DEV_INITRD > > + > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > + > > static int __init early_initrd(char *p) > > { > > unsigned long start, size; > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > if (*endp == ',') { > > size = memparse(endp + 1, NULL); > > > > - initrd_start = start; > > - initrd_end = start + size; > > + initrd_start_phys = start; > > + initrd_end_phys = end; > > } > > return 0; > > } > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > } > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > + (initrd_start || initrd_start_phys)) { > > + /* > > + * FIXME: ensure proper precendence between > > + * early_initrd and DT when both are present > > Command line takes precedence, so just reverse the order. > > > + */ > > + if (initrd_start) { > > + initrd_start_phys = __phys_to_virt(initrd_start); > > + initrd_end_phys = __phys_to_virt(initrd_end); > > AIUI, the original issue was doing the P2V translation was happening > too early and the VA could be wrong if the linear range is adjusted. > So I don't think this would work. Probably things have changed since then, but in the current code there is initrd_start = __phys_to_virt(initrd_start); and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe it's safe to use __phys_to_virt() here as well. > I suppose you could convert the VA back to a PA before any adjustments > and then back to a VA again after. But that's kind of hacky. 2 wrongs > making a right. > > > + } else if (initrd_start_phys) { > > + initrd_start = __va(initrd_start_phys); > > + initrd_end = __va(initrd_start_phys); > > + } > > + > > /* > > * Add back the memory we just removed if it results in the > > * initrd to become inaccessible via the linear mapping. > > * Otherwise, this is a no-op > > */ > > - u64 base = initrd_start & PAGE_MASK; > > - u64 size = PAGE_ALIGN(initrd_end) - base; > > + u64 base = initrd_start_phys & PAGE_MASK; > > + u64 size = PAGE_ALIGN(initrd_end_phys) - base; > > > > /* > > * We can only add back the initrd memory if we don't end up > > @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) > > * pagetables with memblock. > > */ > > memblock_reserve(__pa_symbol(_text), _end - _text); > > -#ifdef CONFIG_BLK_DEV_INITRD > > +#if 0 > > if (initrd_start) { > > memblock_reserve(initrd_start, initrd_end - initrd_start); > > > > > > > Rob > > > > > > > -- > > Sincerely yours, > > Mike. > > > -- Sincerely yours, Mike. _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 17:29 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-25 17:29 UTC (permalink / raw) To: linux-riscv On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > +Ard > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > Hi all, > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > amount of other header files, and translation units as well. > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > much stuff. One down, ? to go. :) > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > systems that generate two kernels: one with the initramfs and one > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > another one that does this. > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > custom __early_init_dt_declare_initrd() definition away from > > > > asm/memory.h > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > factor 73 approximately. > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > about merging that and if another approach would be preferable, e.g: > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > something like that. > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > only memblock is used. This should unify what each arch needs to do > > > with initrd early. We need the physical address early for memblock > > > reserving. Then later on we need the virtual address to access the > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > physical addresses (or add 2 new variables would be less invasive and > > > allow for different translation than __va()). The sanity checks and > > > memblock reserve could also perhaps be moved to a common location. > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > it like the above option. > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > Something like this might be just all we need (completely untested, > > probably it won't even compile): > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > index 9d9582c..e9ca238 100644 > > --- a/arch/arm64/mm/init.c > > +++ b/arch/arm64/mm/init.c > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > #ifdef CONFIG_BLK_DEV_INITRD > > + > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > + > > static int __init early_initrd(char *p) > > { > > unsigned long start, size; > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > if (*endp == ',') { > > size = memparse(endp + 1, NULL); > > > > - initrd_start = start; > > - initrd_end = start + size; > > + initrd_start_phys = start; > > + initrd_end_phys = end; > > } > > return 0; > > } > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > } > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > + (initrd_start || initrd_start_phys)) { > > + /* > > + * FIXME: ensure proper precendence between > > + * early_initrd and DT when both are present > > Command line takes precedence, so just reverse the order. > > > + */ > > + if (initrd_start) { > > + initrd_start_phys = __phys_to_virt(initrd_start); > > + initrd_end_phys = __phys_to_virt(initrd_end); > > AIUI, the original issue was doing the P2V translation was happening > too early and the VA could be wrong if the linear range is adjusted. > So I don't think this would work. Probably things have changed since then, but in the current code there is initrd_start = __phys_to_virt(initrd_start); and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe it's safe to use __phys_to_virt() here as well. > I suppose you could convert the VA back to a PA before any adjustments > and then back to a VA again after. But that's kind of hacky. 2 wrongs > making a right. > > > + } else if (initrd_start_phys) { > > + initrd_start = __va(initrd_start_phys); > > + initrd_end = __va(initrd_start_phys); > > + } > > + > > /* > > * Add back the memory we just removed if it results in the > > * initrd to become inaccessible via the linear mapping. > > * Otherwise, this is a no-op > > */ > > - u64 base = initrd_start & PAGE_MASK; > > - u64 size = PAGE_ALIGN(initrd_end) - base; > > + u64 base = initrd_start_phys & PAGE_MASK; > > + u64 size = PAGE_ALIGN(initrd_end_phys) - base; > > > > /* > > * We can only add back the initrd memory if we don't end up > > @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) > > * pagetables with memblock. > > */ > > memblock_reserve(__pa_symbol(_text), _end - _text); > > -#ifdef CONFIG_BLK_DEV_INITRD > > +#if 0 > > if (initrd_start) { > > memblock_reserve(initrd_start, initrd_end - initrd_start); > > > > > > > Rob > > > > > > > -- > > Sincerely yours, > > Mike. > > > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 17:29 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-25 17:29 UTC (permalink / raw) To: Rob Herring Cc: Ard Biesheuvel, Florian Fainelli, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev, Openrisc, linux-parisc, linuxppc-dev, linux-riscv, linux-s390, SH-Linux, sparclinux, linux-um, linux-xtensa, devicetree, open list:GENERIC INCLUDE/ASM HEADER FILES On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > +Ard > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > Hi all, > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > amount of other header files, and translation units as well. > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > much stuff. One down, ? to go. :) > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > systems that generate two kernels: one with the initramfs and one > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > another one that does this. > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > custom __early_init_dt_declare_initrd() definition away from > > > > asm/memory.h > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > factor 73 approximately. > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > about merging that and if another approach would be preferable, e.g: > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > something like that. > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > only memblock is used. This should unify what each arch needs to do > > > with initrd early. We need the physical address early for memblock > > > reserving. Then later on we need the virtual address to access the > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > physical addresses (or add 2 new variables would be less invasive and > > > allow for different translation than __va()). The sanity checks and > > > memblock reserve could also perhaps be moved to a common location. > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > it like the above option. > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > Something like this might be just all we need (completely untested, > > probably it won't even compile): > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > index 9d9582c..e9ca238 100644 > > --- a/arch/arm64/mm/init.c > > +++ b/arch/arm64/mm/init.c > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > #ifdef CONFIG_BLK_DEV_INITRD > > + > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > + > > static int __init early_initrd(char *p) > > { > > unsigned long start, size; > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > if (*endp == ',') { > > size = memparse(endp + 1, NULL); > > > > - initrd_start = start; > > - initrd_end = start + size; > > + initrd_start_phys = start; > > + initrd_end_phys = end; > > } > > return 0; > > } > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > } > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > + (initrd_start || initrd_start_phys)) { > > + /* > > + * FIXME: ensure proper precendence between > > + * early_initrd and DT when both are present > > Command line takes precedence, so just reverse the order. > > > + */ > > + if (initrd_start) { > > + initrd_start_phys = __phys_to_virt(initrd_start); > > + initrd_end_phys = __phys_to_virt(initrd_end); > > AIUI, the original issue was doing the P2V translation was happening > too early and the VA could be wrong if the linear range is adjusted. > So I don't think this would work. Probably things have changed since then, but in the current code there is initrd_start = __phys_to_virt(initrd_start); and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe it's safe to use __phys_to_virt() here as well. > I suppose you could convert the VA back to a PA before any adjustments > and then back to a VA again after. But that's kind of hacky. 2 wrongs > making a right. > > > + } else if (initrd_start_phys) { > > + initrd_start = __va(initrd_start_phys); > > + initrd_end = __va(initrd_start_phys); > > + } > > + > > /* > > * Add back the memory we just removed if it results in the > > * initrd to become inaccessible via the linear mapping. > > * Otherwise, this is a no-op > > */ > > - u64 base = initrd_start & PAGE_MASK; > > - u64 size = PAGE_ALIGN(initrd_end) - base; > > + u64 base = initrd_start_phys & PAGE_MASK; > > + u64 size = PAGE_ALIGN(initrd_end_phys) - base; > > > > /* > > * We can only add back the initrd memory if we don't end up > > @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) > > * pagetables with memblock. > > */ > > memblock_reserve(__pa_symbol(_text), _end - _text); > > -#ifdef CONFIG_BLK_DEV_INITRD > > +#if 0 > > if (initrd_start) { > > memblock_reserve(initrd_start, initrd_end - initrd_start); > > > > > > > Rob > > > > > > > -- > > Sincerely yours, > > Mike. > > > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 17:29 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-25 17:29 UTC (permalink / raw) To: Rob Herring Cc: Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, linux-s390, Florian Fainelli, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, Marc Zyngier, linux-um, linux-m68k, Openrisc, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > +Ard > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > Hi all, > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > amount of other header files, and translation units as well. > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > much stuff. One down, ? to go. :) > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > systems that generate two kernels: one with the initramfs and one > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > another one that does this. > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > custom __early_init_dt_declare_initrd() definition away from > > > > asm/memory.h > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > factor 73 approximately. > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > about merging that and if another approach would be preferable, e.g: > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > something like that. > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > only memblock is used. This should unify what each arch needs to do > > > with initrd early. We need the physical address early for memblock > > > reserving. Then later on we need the virtual address to access the > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > physical addresses (or add 2 new variables would be less invasive and > > > allow for different translation than __va()). The sanity checks and > > > memblock reserve could also perhaps be moved to a common location. > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > it like the above option. > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > Something like this might be just all we need (completely untested, > > probably it won't even compile): > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > index 9d9582c..e9ca238 100644 > > --- a/arch/arm64/mm/init.c > > +++ b/arch/arm64/mm/init.c > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > #ifdef CONFIG_BLK_DEV_INITRD > > + > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > + > > static int __init early_initrd(char *p) > > { > > unsigned long start, size; > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > if (*endp == ',') { > > size = memparse(endp + 1, NULL); > > > > - initrd_start = start; > > - initrd_end = start + size; > > + initrd_start_phys = start; > > + initrd_end_phys = end; > > } > > return 0; > > } > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > } > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > + (initrd_start || initrd_start_phys)) { > > + /* > > + * FIXME: ensure proper precendence between > > + * early_initrd and DT when both are present > > Command line takes precedence, so just reverse the order. > > > + */ > > + if (initrd_start) { > > + initrd_start_phys = __phys_to_virt(initrd_start); > > + initrd_end_phys = __phys_to_virt(initrd_end); > > AIUI, the original issue was doing the P2V translation was happening > too early and the VA could be wrong if the linear range is adjusted. > So I don't think this would work. Probably things have changed since then, but in the current code there is initrd_start = __phys_to_virt(initrd_start); and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe it's safe to use __phys_to_virt() here as well. > I suppose you could convert the VA back to a PA before any adjustments > and then back to a VA again after. But that's kind of hacky. 2 wrongs > making a right. > > > + } else if (initrd_start_phys) { > > + initrd_start = __va(initrd_start_phys); > > + initrd_end = __va(initrd_start_phys); > > + } > > + > > /* > > * Add back the memory we just removed if it results in the > > * initrd to become inaccessible via the linear mapping. > > * Otherwise, this is a no-op > > */ > > - u64 base = initrd_start & PAGE_MASK; > > - u64 size = PAGE_ALIGN(initrd_end) - base; > > + u64 base = initrd_start_phys & PAGE_MASK; > > + u64 size = PAGE_ALIGN(initrd_end_phys) - base; > > > > /* > > * We can only add back the initrd memory if we don't end up > > @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) > > * pagetables with memblock. > > */ > > memblock_reserve(__pa_symbol(_text), _end - _text); > > -#ifdef CONFIG_BLK_DEV_INITRD > > +#if 0 > > if (initrd_start) { > > memblock_reserve(initrd_start, initrd_end - initrd_start); > > > > > > > Rob > > > > > > > -- > > Sincerely yours, > > Mike. > > > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 17:29 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-25 17:29 UTC (permalink / raw) To: Rob Herring Cc: Ard Biesheuvel, Florian Fainelli, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev, Openrisc, linux-parisc, linuxppc-dev, linux-riscv, linux-s390, SH-Linux, sparclinux, linux-um, linux-xtensa, devicetree, open list:GENERIC INCLUDE/ASM HEADER FILES On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > +Ard > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > Hi all, > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > amount of other header files, and translation units as well. > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > much stuff. One down, ? to go. :) > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > systems that generate two kernels: one with the initramfs and one > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > another one that does this. > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > custom __early_init_dt_declare_initrd() definition away from > > > > asm/memory.h > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > factor 73 approximately. > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > about merging that and if another approach would be preferable, e.g: > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > something like that. > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > only memblock is used. This should unify what each arch needs to do > > > with initrd early. We need the physical address early for memblock > > > reserving. Then later on we need the virtual address to access the > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > physical addresses (or add 2 new variables would be less invasive and > > > allow for different translation than __va()). The sanity checks and > > > memblock reserve could also perhaps be moved to a common location. > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > it like the above option. > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > Something like this might be just all we need (completely untested, > > probably it won't even compile): > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > index 9d9582c..e9ca238 100644 > > --- a/arch/arm64/mm/init.c > > +++ b/arch/arm64/mm/init.c > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > #ifdef CONFIG_BLK_DEV_INITRD > > + > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > + > > static int __init early_initrd(char *p) > > { > > unsigned long start, size; > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > if (*endp == ',') { > > size = memparse(endp + 1, NULL); > > > > - initrd_start = start; > > - initrd_end = start + size; > > + initrd_start_phys = start; > > + initrd_end_phys = end; > > } > > return 0; > > } > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > } > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > + (initrd_start || initrd_start_phys)) { > > + /* > > + * FIXME: ensure proper precendence between > > + * early_initrd and DT when both are present > > Command line takes precedence, so just reverse the order. > > > + */ > > + if (initrd_start) { > > + initrd_start_phys = __phys_to_virt(initrd_start); > > + initrd_end_phys = __phys_to_virt(initrd_end); > > AIUI, the original issue was doing the P2V translation was happening > too early and the VA could be wrong if the linear range is adjusted. > So I don't think this would work. Probably things have changed since then, but in the current code there is initrd_start = __phys_to_virt(initrd_start); and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe it's safe to use __phys_to_virt() here as well. > I suppose you could convert the VA back to a PA before any adjustments > and then back to a VA again after. But that's kind of hacky. 2 wrongs > making a right. > > > + } else if (initrd_start_phys) { > > + initrd_start = __va(initrd_start_phys); > > + initrd_end = __va(initrd_start_phys); > > + } > > + > > /* > > * Add back the memory we just removed if it results in the > > * initrd to become inaccessible via the linear mapping. > > * Otherwise, this is a no-op > > */ > > - u64 base = initrd_start & PAGE_MASK; > > - u64 size = PAGE_ALIGN(initrd_end) - base; > > + u64 base = initrd_start_phys & PAGE_MASK; > > + u64 size = PAGE_ALIGN(initrd_end_phys) - base; > > > > /* > > * We can only add back the initrd memory if we don't end up > > @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) > > * pagetables with memblock. > > */ > > memblock_reserve(__pa_symbol(_text), _end - _text); > > -#ifdef CONFIG_BLK_DEV_INITRD > > +#if 0 > > if (initrd_start) { > > memblock_reserve(initrd_start, initrd_end - initrd_start); > > > > > > > Rob > > > > > > > -- > > Sincerely yours, > > Mike. > > > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 17:29 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-25 17:29 UTC (permalink / raw) To: Rob Herring Cc: Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, linux-s390, Florian Fainelli, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, Marc Zyngier, linux-um, linux-m68k, Openrisc, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > +Ard > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > Hi all, > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > amount of other header files, and translation units as well. > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > much stuff. One down, ? to go. :) > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > systems that generate two kernels: one with the initramfs and one > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > another one that does this. > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > custom __early_init_dt_declare_initrd() definition away from > > > > asm/memory.h > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > factor 73 approximately. > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > about merging that and if another approach would be preferable, e.g: > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > something like that. > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > only memblock is used. This should unify what each arch needs to do > > > with initrd early. We need the physical address early for memblock > > > reserving. Then later on we need the virtual address to access the > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > physical addresses (or add 2 new variables would be less invasive and > > > allow for different translation than __va()). The sanity checks and > > > memblock reserve could also perhaps be moved to a common location. > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > it like the above option. > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > Something like this might be just all we need (completely untested, > > probably it won't even compile): > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > index 9d9582c..e9ca238 100644 > > --- a/arch/arm64/mm/init.c > > +++ b/arch/arm64/mm/init.c > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > #ifdef CONFIG_BLK_DEV_INITRD > > + > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > + > > static int __init early_initrd(char *p) > > { > > unsigned long start, size; > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > if (*endp == ',') { > > size = memparse(endp + 1, NULL); > > > > - initrd_start = start; > > - initrd_end = start + size; > > + initrd_start_phys = start; > > + initrd_end_phys = end; > > } > > return 0; > > } > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > } > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > + (initrd_start || initrd_start_phys)) { > > + /* > > + * FIXME: ensure proper precendence between > > + * early_initrd and DT when both are present > > Command line takes precedence, so just reverse the order. > > > + */ > > + if (initrd_start) { > > + initrd_start_phys = __phys_to_virt(initrd_start); > > + initrd_end_phys = __phys_to_virt(initrd_end); > > AIUI, the original issue was doing the P2V translation was happening > too early and the VA could be wrong if the linear range is adjusted. > So I don't think this would work. Probably things have changed since then, but in the current code there is initrd_start = __phys_to_virt(initrd_start); and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe it's safe to use __phys_to_virt() here as well. > I suppose you could convert the VA back to a PA before any adjustments > and then back to a VA again after. But that's kind of hacky. 2 wrongs > making a right. > > > + } else if (initrd_start_phys) { > > + initrd_start = __va(initrd_start_phys); > > + initrd_end = __va(initrd_start_phys); > > + } > > + > > /* > > * Add back the memory we just removed if it results in the > > * initrd to become inaccessible via the linear mapping. > > * Otherwise, this is a no-op > > */ > > - u64 base = initrd_start & PAGE_MASK; > > - u64 size = PAGE_ALIGN(initrd_end) - base; > > + u64 base = initrd_start_phys & PAGE_MASK; > > + u64 size = PAGE_ALIGN(initrd_end_phys) - base; > > > > /* > > * We can only add back the initrd memory if we don't end up > > @@ -458,7 +474,7 @@ void __init arm64_memblock_init(void) > > * pagetables with memblock. > > */ > > memblock_reserve(__pa_symbol(_text), _end - _text); > > -#ifdef CONFIG_BLK_DEV_INITRD > > +#if 0 > > if (initrd_start) { > > memblock_reserve(initrd_start, initrd_end - initrd_start); > > > > > > > Rob > > > > > > > -- > > Sincerely yours, > > Mike. > > > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD 2018-10-25 17:29 ` Mike Rapoport ` (9 preceding siblings ...) (?) @ 2018-10-25 21:13 ` Rob Herring -1 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-25 21:13 UTC (permalink / raw) To: rppt Cc: Ard Biesheuvel, Florian Fainelli, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > > On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > > +Ard > > > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > > > Hi all, > > > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > > amount of other header files, and translation units as well. > > > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > > much stuff. One down, ? to go. :) > > > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > > systems that generate two kernels: one with the initramfs and one > > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > > another one that does this. > > > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > > custom __early_init_dt_declare_initrd() definition away from > > > > > asm/memory.h > > > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > > factor 73 approximately. > > > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > > about merging that and if another approach would be preferable, e.g: > > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > > something like that. > > > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > > only memblock is used. This should unify what each arch needs to do > > > > with initrd early. We need the physical address early for memblock > > > > reserving. Then later on we need the virtual address to access the > > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > > physical addresses (or add 2 new variables would be less invasive and > > > > allow for different translation than __va()). The sanity checks and > > > > memblock reserve could also perhaps be moved to a common location. > > > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > > it like the above option. > > > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > > Something like this might be just all we need (completely untested, > > > probably it won't even compile): > > > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > > index 9d9582c..e9ca238 100644 > > > --- a/arch/arm64/mm/init.c > > > +++ b/arch/arm64/mm/init.c > > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > > > #ifdef CONFIG_BLK_DEV_INITRD > > > + > > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > > + > > > static int __init early_initrd(char *p) > > > { > > > unsigned long start, size; > > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > > if (*endp = ',') { > > > size = memparse(endp + 1, NULL); > > > > > > - initrd_start = start; > > > - initrd_end = start + size; > > > + initrd_start_phys = start; > > > + initrd_end_phys = end; > > > } > > > return 0; > > > } > > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > > } > > > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > > + (initrd_start || initrd_start_phys)) { > > > + /* > > > + * FIXME: ensure proper precendence between > > > + * early_initrd and DT when both are present > > > > Command line takes precedence, so just reverse the order. > > > > > + */ > > > + if (initrd_start) { > > > + initrd_start_phys = __phys_to_virt(initrd_start); > > > + initrd_end_phys = __phys_to_virt(initrd_end); BTW, I think you meant virt_to_phys() here? > > > > AIUI, the original issue was doing the P2V translation was happening > > too early and the VA could be wrong if the linear range is adjusted. > > So I don't think this would work. > > Probably things have changed since then, but in the current code there is > > initrd_start = __phys_to_virt(initrd_start); > > and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe > it's safe to use __phys_to_virt() here as well. Here is fine yes, but I believe it was the the phys to virt in the DT code before adjusting the linear range that was the problem. Rob ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 21:13 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-25 21:13 UTC (permalink / raw) To: rppt Cc: Ard Biesheuvel, Florian Fainelli, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > > On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > > +Ard > > > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > > > Hi all, > > > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > > amount of other header files, and translation units as well. > > > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > > much stuff. One down, ? to go. :) > > > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > > systems that generate two kernels: one with the initramfs and one > > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > > another one that does this. > > > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > > custom __early_init_dt_declare_initrd() definition away from > > > > > asm/memory.h > > > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > > factor 73 approximately. > > > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > > about merging that and if another approach would be preferable, e.g: > > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > > something like that. > > > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > > only memblock is used. This should unify what each arch needs to do > > > > with initrd early. We need the physical address early for memblock > > > > reserving. Then later on we need the virtual address to access the > > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > > physical addresses (or add 2 new variables would be less invasive and > > > > allow for different translation than __va()). The sanity checks and > > > > memblock reserve could also perhaps be moved to a common location. > > > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > > it like the above option. > > > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > > Something like this might be just all we need (completely untested, > > > probably it won't even compile): > > > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > > index 9d9582c..e9ca238 100644 > > > --- a/arch/arm64/mm/init.c > > > +++ b/arch/arm64/mm/init.c > > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > > > #ifdef CONFIG_BLK_DEV_INITRD > > > + > > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > > + > > > static int __init early_initrd(char *p) > > > { > > > unsigned long start, size; > > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > > if (*endp == ',') { > > > size = memparse(endp + 1, NULL); > > > > > > - initrd_start = start; > > > - initrd_end = start + size; > > > + initrd_start_phys = start; > > > + initrd_end_phys = end; > > > } > > > return 0; > > > } > > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > > } > > > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > > + (initrd_start || initrd_start_phys)) { > > > + /* > > > + * FIXME: ensure proper precendence between > > > + * early_initrd and DT when both are present > > > > Command line takes precedence, so just reverse the order. > > > > > + */ > > > + if (initrd_start) { > > > + initrd_start_phys = __phys_to_virt(initrd_start); > > > + initrd_end_phys = __phys_to_virt(initrd_end); BTW, I think you meant virt_to_phys() here? > > > > AIUI, the original issue was doing the P2V translation was happening > > too early and the VA could be wrong if the linear range is adjusted. > > So I don't think this would work. > > Probably things have changed since then, but in the current code there is > > initrd_start = __phys_to_virt(initrd_start); > > and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe > it's safe to use __phys_to_virt() here as well. Here is fine yes, but I believe it was the the phys to virt in the DT code before adjusting the linear range that was the problem. Rob ^ permalink raw reply [flat|nested] 168+ messages in thread
* [OpenRISC] [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 21:13 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-25 21:13 UTC (permalink / raw) To: openrisc On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > > On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > > +Ard > > > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > > > Hi all, > > > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > > amount of other header files, and translation units as well. > > > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > > much stuff. One down, ? to go. :) > > > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > > systems that generate two kernels: one with the initramfs and one > > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > > another one that does this. > > > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > > custom __early_init_dt_declare_initrd() definition away from > > > > > asm/memory.h > > > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > > factor 73 approximately. > > > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > > about merging that and if another approach would be preferable, e.g: > > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > > something like that. > > > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > > only memblock is used. This should unify what each arch needs to do > > > > with initrd early. We need the physical address early for memblock > > > > reserving. Then later on we need the virtual address to access the > > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > > physical addresses (or add 2 new variables would be less invasive and > > > > allow for different translation than __va()). The sanity checks and > > > > memblock reserve could also perhaps be moved to a common location. > > > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > > it like the above option. > > > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > > Something like this might be just all we need (completely untested, > > > probably it won't even compile): > > > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > > index 9d9582c..e9ca238 100644 > > > --- a/arch/arm64/mm/init.c > > > +++ b/arch/arm64/mm/init.c > > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > > > #ifdef CONFIG_BLK_DEV_INITRD > > > + > > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > > + > > > static int __init early_initrd(char *p) > > > { > > > unsigned long start, size; > > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > > if (*endp == ',') { > > > size = memparse(endp + 1, NULL); > > > > > > - initrd_start = start; > > > - initrd_end = start + size; > > > + initrd_start_phys = start; > > > + initrd_end_phys = end; > > > } > > > return 0; > > > } > > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > > } > > > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > > + (initrd_start || initrd_start_phys)) { > > > + /* > > > + * FIXME: ensure proper precendence between > > > + * early_initrd and DT when both are present > > > > Command line takes precedence, so just reverse the order. > > > > > + */ > > > + if (initrd_start) { > > > + initrd_start_phys = __phys_to_virt(initrd_start); > > > + initrd_end_phys = __phys_to_virt(initrd_end); BTW, I think you meant virt_to_phys() here? > > > > AIUI, the original issue was doing the P2V translation was happening > > too early and the VA could be wrong if the linear range is adjusted. > > So I don't think this would work. > > Probably things have changed since then, but in the current code there is > > initrd_start = __phys_to_virt(initrd_start); > > and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe > it's safe to use __phys_to_virt() here as well. Here is fine yes, but I believe it was the the phys to virt in the DT code before adjusting the linear range that was the problem. Rob ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 21:13 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-25 21:13 UTC (permalink / raw) To: linux-arm-kernel On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > > On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > > +Ard > > > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > > > Hi all, > > > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > > amount of other header files, and translation units as well. > > > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > > much stuff. One down, ? to go. :) > > > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > > systems that generate two kernels: one with the initramfs and one > > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > > another one that does this. > > > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > > custom __early_init_dt_declare_initrd() definition away from > > > > > asm/memory.h > > > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > > factor 73 approximately. > > > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > > about merging that and if another approach would be preferable, e.g: > > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > > something like that. > > > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > > only memblock is used. This should unify what each arch needs to do > > > > with initrd early. We need the physical address early for memblock > > > > reserving. Then later on we need the virtual address to access the > > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > > physical addresses (or add 2 new variables would be less invasive and > > > > allow for different translation than __va()). The sanity checks and > > > > memblock reserve could also perhaps be moved to a common location. > > > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > > it like the above option. > > > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > > Something like this might be just all we need (completely untested, > > > probably it won't even compile): > > > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > > index 9d9582c..e9ca238 100644 > > > --- a/arch/arm64/mm/init.c > > > +++ b/arch/arm64/mm/init.c > > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > > > #ifdef CONFIG_BLK_DEV_INITRD > > > + > > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > > + > > > static int __init early_initrd(char *p) > > > { > > > unsigned long start, size; > > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > > if (*endp == ',') { > > > size = memparse(endp + 1, NULL); > > > > > > - initrd_start = start; > > > - initrd_end = start + size; > > > + initrd_start_phys = start; > > > + initrd_end_phys = end; > > > } > > > return 0; > > > } > > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > > } > > > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > > + (initrd_start || initrd_start_phys)) { > > > + /* > > > + * FIXME: ensure proper precendence between > > > + * early_initrd and DT when both are present > > > > Command line takes precedence, so just reverse the order. > > > > > + */ > > > + if (initrd_start) { > > > + initrd_start_phys = __phys_to_virt(initrd_start); > > > + initrd_end_phys = __phys_to_virt(initrd_end); BTW, I think you meant virt_to_phys() here? > > > > AIUI, the original issue was doing the P2V translation was happening > > too early and the VA could be wrong if the linear range is adjusted. > > So I don't think this would work. > > Probably things have changed since then, but in the current code there is > > initrd_start = __phys_to_virt(initrd_start); > > and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe > it's safe to use __phys_to_virt() here as well. Here is fine yes, but I believe it was the the phys to virt in the DT code before adjusting the linear range that was the problem. Rob ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 21:13 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-25 21:13 UTC (permalink / raw) To: linux-snps-arc On Thu, Oct 25, 2018@12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > > On Thu, Oct 25, 2018@08:15:15AM -0500, Rob Herring wrote: > > +Ard > > > > On Thu, Oct 25, 2018@4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > > > On Wed, Oct 24, 2018@02:55:17PM -0500, Rob Herring wrote: > > > > On Wed, Oct 24, 2018@2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > > > Hi all, > > > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > > amount of other header files, and translation units as well. > > > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > > much stuff. One down, ? to go. :) > > > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > > systems that generate two kernels: one with the initramfs and one > > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > > another one that does this. > > > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > > custom __early_init_dt_declare_initrd() definition away from > > > > > asm/memory.h > > > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > > factor 73 approximately. > > > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > > about merging that and if another approach would be preferable, e.g: > > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > > something like that. > > > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > > only memblock is used. This should unify what each arch needs to do > > > > with initrd early. We need the physical address early for memblock > > > > reserving. Then later on we need the virtual address to access the > > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > > physical addresses (or add 2 new variables would be less invasive and > > > > allow for different translation than __va()). The sanity checks and > > > > memblock reserve could also perhaps be moved to a common location. > > > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > > it like the above option. > > > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > > Something like this might be just all we need (completely untested, > > > probably it won't even compile): > > > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > > index 9d9582c..e9ca238 100644 > > > --- a/arch/arm64/mm/init.c > > > +++ b/arch/arm64/mm/init.c > > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > > > #ifdef CONFIG_BLK_DEV_INITRD > > > + > > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > > + > > > static int __init early_initrd(char *p) > > > { > > > unsigned long start, size; > > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > > if (*endp == ',') { > > > size = memparse(endp + 1, NULL); > > > > > > - initrd_start = start; > > > - initrd_end = start + size; > > > + initrd_start_phys = start; > > > + initrd_end_phys = end; > > > } > > > return 0; > > > } > > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > > } > > > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > > + (initrd_start || initrd_start_phys)) { > > > + /* > > > + * FIXME: ensure proper precendence between > > > + * early_initrd and DT when both are present > > > > Command line takes precedence, so just reverse the order. > > > > > + */ > > > + if (initrd_start) { > > > + initrd_start_phys = __phys_to_virt(initrd_start); > > > + initrd_end_phys = __phys_to_virt(initrd_end); BTW, I think you meant virt_to_phys() here? > > > > AIUI, the original issue was doing the P2V translation was happening > > too early and the VA could be wrong if the linear range is adjusted. > > So I don't think this would work. > > Probably things have changed since then, but in the current code there is > > initrd_start = __phys_to_virt(initrd_start); > > and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe > it's safe to use __phys_to_virt() here as well. Here is fine yes, but I believe it was the the phys to virt in the DT code before adjusting the linear range that was the problem. Rob ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 21:13 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-25 21:13 UTC (permalink / raw) To: rppt Cc: Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, linux-s390, Florian Fainelli, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, Marc Zyngier, linux-um, linux-m68k, Openrisc, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-parisc, Ard Biesheuvel, Greg Kroah-Hartman, linux-kernel, linux-alpha, Olof Johansson, nios2-dev, linuxppc-dev On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > > On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > > +Ard > > > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > > > Hi all, > > > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > > amount of other header files, and translation units as well. > > > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > > much stuff. One down, ? to go. :) > > > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > > systems that generate two kernels: one with the initramfs and one > > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > > another one that does this. > > > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > > custom __early_init_dt_declare_initrd() definition away from > > > > > asm/memory.h > > > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > > factor 73 approximately. > > > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > > about merging that and if another approach would be preferable, e.g: > > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > > something like that. > > > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > > only memblock is used. This should unify what each arch needs to do > > > > with initrd early. We need the physical address early for memblock > > > > reserving. Then later on we need the virtual address to access the > > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > > physical addresses (or add 2 new variables would be less invasive and > > > > allow for different translation than __va()). The sanity checks and > > > > memblock reserve could also perhaps be moved to a common location. > > > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > > it like the above option. > > > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > > Something like this might be just all we need (completely untested, > > > probably it won't even compile): > > > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > > index 9d9582c..e9ca238 100644 > > > --- a/arch/arm64/mm/init.c > > > +++ b/arch/arm64/mm/init.c > > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > > > #ifdef CONFIG_BLK_DEV_INITRD > > > + > > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > > + > > > static int __init early_initrd(char *p) > > > { > > > unsigned long start, size; > > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > > if (*endp == ',') { > > > size = memparse(endp + 1, NULL); > > > > > > - initrd_start = start; > > > - initrd_end = start + size; > > > + initrd_start_phys = start; > > > + initrd_end_phys = end; > > > } > > > return 0; > > > } > > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > > } > > > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > > + (initrd_start || initrd_start_phys)) { > > > + /* > > > + * FIXME: ensure proper precendence between > > > + * early_initrd and DT when both are present > > > > Command line takes precedence, so just reverse the order. > > > > > + */ > > > + if (initrd_start) { > > > + initrd_start_phys = __phys_to_virt(initrd_start); > > > + initrd_end_phys = __phys_to_virt(initrd_end); BTW, I think you meant virt_to_phys() here? > > > > AIUI, the original issue was doing the P2V translation was happening > > too early and the VA could be wrong if the linear range is adjusted. > > So I don't think this would work. > > Probably things have changed since then, but in the current code there is > > initrd_start = __phys_to_virt(initrd_start); > > and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe > it's safe to use __phys_to_virt() here as well. Here is fine yes, but I believe it was the the phys to virt in the DT code before adjusting the linear range that was the problem. Rob ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 21:13 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-25 21:13 UTC (permalink / raw) To: rppt Cc: Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, linux-s390, Florian Fainelli, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, Marc Zyngier, linux-um, linux-m68k, Openrisc, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-parisc, Ard Biesheuvel, Greg Kroah-Hartman, linux-kernel, linux-alpha, Olof Johansson, nios2-dev, linuxppc-dev On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > > On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > > +Ard > > > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > > > Hi all, > > > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > > amount of other header files, and translation units as well. > > > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > > much stuff. One down, ? to go. :) > > > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > > systems that generate two kernels: one with the initramfs and one > > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > > another one that does this. > > > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > > custom __early_init_dt_declare_initrd() definition away from > > > > > asm/memory.h > > > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > > factor 73 approximately. > > > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > > about merging that and if another approach would be preferable, e.g: > > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > > something like that. > > > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > > only memblock is used. This should unify what each arch needs to do > > > > with initrd early. We need the physical address early for memblock > > > > reserving. Then later on we need the virtual address to access the > > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > > physical addresses (or add 2 new variables would be less invasive and > > > > allow for different translation than __va()). The sanity checks and > > > > memblock reserve could also perhaps be moved to a common location. > > > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > > it like the above option. > > > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > > Something like this might be just all we need (completely untested, > > > probably it won't even compile): > > > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > > index 9d9582c..e9ca238 100644 > > > --- a/arch/arm64/mm/init.c > > > +++ b/arch/arm64/mm/init.c > > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > > > #ifdef CONFIG_BLK_DEV_INITRD > > > + > > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > > + > > > static int __init early_initrd(char *p) > > > { > > > unsigned long start, size; > > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > > if (*endp == ',') { > > > size = memparse(endp + 1, NULL); > > > > > > - initrd_start = start; > > > - initrd_end = start + size; > > > + initrd_start_phys = start; > > > + initrd_end_phys = end; > > > } > > > return 0; > > > } > > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > > } > > > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > > + (initrd_start || initrd_start_phys)) { > > > + /* > > > + * FIXME: ensure proper precendence between > > > + * early_initrd and DT when both are present > > > > Command line takes precedence, so just reverse the order. > > > > > + */ > > > + if (initrd_start) { > > > + initrd_start_phys = __phys_to_virt(initrd_start); > > > + initrd_end_phys = __phys_to_virt(initrd_end); BTW, I think you meant virt_to_phys() here? > > > > AIUI, the original issue was doing the P2V translation was happening > > too early and the VA could be wrong if the linear range is adjusted. > > So I don't think this would work. > > Probably things have changed since then, but in the current code there is > > initrd_start = __phys_to_virt(initrd_start); > > and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe > it's safe to use __phys_to_virt() here as well. Here is fine yes, but I believe it was the the phys to virt in the DT code before adjusting the linear range that was the problem. Rob _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 21:13 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-25 21:13 UTC (permalink / raw) To: linux-riscv On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > > On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > > +Ard > > > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > > > Hi all, > > > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > > amount of other header files, and translation units as well. > > > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > > much stuff. One down, ? to go. :) > > > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > > systems that generate two kernels: one with the initramfs and one > > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > > another one that does this. > > > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > > custom __early_init_dt_declare_initrd() definition away from > > > > > asm/memory.h > > > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > > factor 73 approximately. > > > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > > about merging that and if another approach would be preferable, e.g: > > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > > something like that. > > > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > > only memblock is used. This should unify what each arch needs to do > > > > with initrd early. We need the physical address early for memblock > > > > reserving. Then later on we need the virtual address to access the > > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > > physical addresses (or add 2 new variables would be less invasive and > > > > allow for different translation than __va()). The sanity checks and > > > > memblock reserve could also perhaps be moved to a common location. > > > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > > it like the above option. > > > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > > Something like this might be just all we need (completely untested, > > > probably it won't even compile): > > > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > > index 9d9582c..e9ca238 100644 > > > --- a/arch/arm64/mm/init.c > > > +++ b/arch/arm64/mm/init.c > > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > > > #ifdef CONFIG_BLK_DEV_INITRD > > > + > > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > > + > > > static int __init early_initrd(char *p) > > > { > > > unsigned long start, size; > > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > > if (*endp == ',') { > > > size = memparse(endp + 1, NULL); > > > > > > - initrd_start = start; > > > - initrd_end = start + size; > > > + initrd_start_phys = start; > > > + initrd_end_phys = end; > > > } > > > return 0; > > > } > > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > > } > > > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > > + (initrd_start || initrd_start_phys)) { > > > + /* > > > + * FIXME: ensure proper precendence between > > > + * early_initrd and DT when both are present > > > > Command line takes precedence, so just reverse the order. > > > > > + */ > > > + if (initrd_start) { > > > + initrd_start_phys = __phys_to_virt(initrd_start); > > > + initrd_end_phys = __phys_to_virt(initrd_end); BTW, I think you meant virt_to_phys() here? > > > > AIUI, the original issue was doing the P2V translation was happening > > too early and the VA could be wrong if the linear range is adjusted. > > So I don't think this would work. > > Probably things have changed since then, but in the current code there is > > initrd_start = __phys_to_virt(initrd_start); > > and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe > it's safe to use __phys_to_virt() here as well. Here is fine yes, but I believe it was the the phys to virt in the DT code before adjusting the linear range that was the problem. Rob ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 21:13 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-25 21:13 UTC (permalink / raw) To: rppt Cc: Ard Biesheuvel, Florian Fainelli, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > > On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > > +Ard > > > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > > > Hi all, > > > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > > amount of other header files, and translation units as well. > > > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > > much stuff. One down, ? to go. :) > > > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > > systems that generate two kernels: one with the initramfs and one > > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > > another one that does this. > > > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > > custom __early_init_dt_declare_initrd() definition away from > > > > > asm/memory.h > > > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > > factor 73 approximately. > > > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > > about merging that and if another approach would be preferable, e.g: > > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > > something like that. > > > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > > only memblock is used. This should unify what each arch needs to do > > > > with initrd early. We need the physical address early for memblock > > > > reserving. Then later on we need the virtual address to access the > > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > > physical addresses (or add 2 new variables would be less invasive and > > > > allow for different translation than __va()). The sanity checks and > > > > memblock reserve could also perhaps be moved to a common location. > > > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > > it like the above option. > > > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > > Something like this might be just all we need (completely untested, > > > probably it won't even compile): > > > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > > index 9d9582c..e9ca238 100644 > > > --- a/arch/arm64/mm/init.c > > > +++ b/arch/arm64/mm/init.c > > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > > > #ifdef CONFIG_BLK_DEV_INITRD > > > + > > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > > + > > > static int __init early_initrd(char *p) > > > { > > > unsigned long start, size; > > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > > if (*endp == ',') { > > > size = memparse(endp + 1, NULL); > > > > > > - initrd_start = start; > > > - initrd_end = start + size; > > > + initrd_start_phys = start; > > > + initrd_end_phys = end; > > > } > > > return 0; > > > } > > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > > } > > > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > > + (initrd_start || initrd_start_phys)) { > > > + /* > > > + * FIXME: ensure proper precendence between > > > + * early_initrd and DT when both are present > > > > Command line takes precedence, so just reverse the order. > > > > > + */ > > > + if (initrd_start) { > > > + initrd_start_phys = __phys_to_virt(initrd_start); > > > + initrd_end_phys = __phys_to_virt(initrd_end); BTW, I think you meant virt_to_phys() here? > > > > AIUI, the original issue was doing the P2V translation was happening > > too early and the VA could be wrong if the linear range is adjusted. > > So I don't think this would work. > > Probably things have changed since then, but in the current code there is > > initrd_start = __phys_to_virt(initrd_start); > > and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe > it's safe to use __phys_to_virt() here as well. Here is fine yes, but I believe it was the the phys to virt in the DT code before adjusting the linear range that was the problem. Rob ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 21:13 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-25 21:13 UTC (permalink / raw) To: rppt Cc: Ard Biesheuvel, Florian Fainelli, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev, Openrisc, linux-parisc, linuxppc-dev, linux-riscv, linux-s390, SH-Linux, sparclinux, linux-um, linux-xtensa, devicetree, open list:GENERIC INCLUDE/ASM HEADER FILES On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > > On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > > +Ard > > > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > > > Hi all, > > > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > > amount of other header files, and translation units as well. > > > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > > much stuff. One down, ? to go. :) > > > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > > systems that generate two kernels: one with the initramfs and one > > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > > another one that does this. > > > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > > custom __early_init_dt_declare_initrd() definition away from > > > > > asm/memory.h > > > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > > factor 73 approximately. > > > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > > about merging that and if another approach would be preferable, e.g: > > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > > something like that. > > > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > > only memblock is used. This should unify what each arch needs to do > > > > with initrd early. We need the physical address early for memblock > > > > reserving. Then later on we need the virtual address to access the > > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > > physical addresses (or add 2 new variables would be less invasive and > > > > allow for different translation than __va()). The sanity checks and > > > > memblock reserve could also perhaps be moved to a common location. > > > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > > it like the above option. > > > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > > Something like this might be just all we need (completely untested, > > > probably it won't even compile): > > > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > > index 9d9582c..e9ca238 100644 > > > --- a/arch/arm64/mm/init.c > > > +++ b/arch/arm64/mm/init.c > > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > > > #ifdef CONFIG_BLK_DEV_INITRD > > > + > > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > > + > > > static int __init early_initrd(char *p) > > > { > > > unsigned long start, size; > > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > > if (*endp == ',') { > > > size = memparse(endp + 1, NULL); > > > > > > - initrd_start = start; > > > - initrd_end = start + size; > > > + initrd_start_phys = start; > > > + initrd_end_phys = end; > > > } > > > return 0; > > > } > > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > > } > > > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > > + (initrd_start || initrd_start_phys)) { > > > + /* > > > + * FIXME: ensure proper precendence between > > > + * early_initrd and DT when both are present > > > > Command line takes precedence, so just reverse the order. > > > > > + */ > > > + if (initrd_start) { > > > + initrd_start_phys = __phys_to_virt(initrd_start); > > > + initrd_end_phys = __phys_to_virt(initrd_end); BTW, I think you meant virt_to_phys() here? > > > > AIUI, the original issue was doing the P2V translation was happening > > too early and the VA could be wrong if the linear range is adjusted. > > So I don't think this would work. > > Probably things have changed since then, but in the current code there is > > initrd_start = __phys_to_virt(initrd_start); > > and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe > it's safe to use __phys_to_virt() here as well. Here is fine yes, but I believe it was the the phys to virt in the DT code before adjusting the linear range that was the problem. Rob ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 21:13 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-25 21:13 UTC (permalink / raw) To: rppt Cc: Ard Biesheuvel, Florian Fainelli, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev, Openrisc, linux-parisc, linuxppc-dev, linux-riscv, linux-s390, SH-Linux, sparclinux, linux-um, linux-xtensa, devicetree, open list:GENERIC INCLUDE/ASM HEADER FILES On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > > On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > > +Ard > > > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > > > Hi all, > > > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > > amount of other header files, and translation units as well. > > > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > > much stuff. One down, ? to go. :) > > > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > > systems that generate two kernels: one with the initramfs and one > > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > > another one that does this. > > > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > > custom __early_init_dt_declare_initrd() definition away from > > > > > asm/memory.h > > > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > > factor 73 approximately. > > > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > > about merging that and if another approach would be preferable, e.g: > > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > > something like that. > > > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > > only memblock is used. This should unify what each arch needs to do > > > > with initrd early. We need the physical address early for memblock > > > > reserving. Then later on we need the virtual address to access the > > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > > physical addresses (or add 2 new variables would be less invasive and > > > > allow for different translation than __va()). The sanity checks and > > > > memblock reserve could also perhaps be moved to a common location. > > > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > > it like the above option. > > > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > > Something like this might be just all we need (completely untested, > > > probably it won't even compile): > > > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > > index 9d9582c..e9ca238 100644 > > > --- a/arch/arm64/mm/init.c > > > +++ b/arch/arm64/mm/init.c > > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > > > #ifdef CONFIG_BLK_DEV_INITRD > > > + > > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > > + > > > static int __init early_initrd(char *p) > > > { > > > unsigned long start, size; > > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > > if (*endp == ',') { > > > size = memparse(endp + 1, NULL); > > > > > > - initrd_start = start; > > > - initrd_end = start + size; > > > + initrd_start_phys = start; > > > + initrd_end_phys = end; > > > } > > > return 0; > > > } > > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > > } > > > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > > + (initrd_start || initrd_start_phys)) { > > > + /* > > > + * FIXME: ensure proper precendence between > > > + * early_initrd and DT when both are present > > > > Command line takes precedence, so just reverse the order. > > > > > + */ > > > + if (initrd_start) { > > > + initrd_start_phys = __phys_to_virt(initrd_start); > > > + initrd_end_phys = __phys_to_virt(initrd_end); BTW, I think you meant virt_to_phys() here? > > > > AIUI, the original issue was doing the P2V translation was happening > > too early and the VA could be wrong if the linear range is adjusted. > > So I don't think this would work. > > Probably things have changed since then, but in the current code there is > > initrd_start = __phys_to_virt(initrd_start); > > and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe > it's safe to use __phys_to_virt() here as well. Here is fine yes, but I believe it was the the phys to virt in the DT code before adjusting the linear range that was the problem. Rob ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 21:13 ` Rob Herring 0 siblings, 0 replies; 168+ messages in thread From: Rob Herring @ 2018-10-25 21:13 UTC (permalink / raw) To: rppt Cc: Ard Biesheuvel, Florian Fainelli, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > > On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > > +Ard > > > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > > > Hi all, > > > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > > amount of other header files, and translation units as well. > > > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > > much stuff. One down, ? to go. :) > > > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > > systems that generate two kernels: one with the initramfs and one > > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > > another one that does this. > > > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > > custom __early_init_dt_declare_initrd() definition away from > > > > > asm/memory.h > > > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > > factor 73 approximately. > > > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > > about merging that and if another approach would be preferable, e.g: > > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > > something like that. > > > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > > only memblock is used. This should unify what each arch needs to do > > > > with initrd early. We need the physical address early for memblock > > > > reserving. Then later on we need the virtual address to access the > > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > > physical addresses (or add 2 new variables would be less invasive and > > > > allow for different translation than __va()). The sanity checks and > > > > memblock reserve could also perhaps be moved to a common location. > > > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > > it like the above option. > > > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > > Something like this might be just all we need (completely untested, > > > probably it won't even compile): > > > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > > index 9d9582c..e9ca238 100644 > > > --- a/arch/arm64/mm/init.c > > > +++ b/arch/arm64/mm/init.c > > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > > > #ifdef CONFIG_BLK_DEV_INITRD > > > + > > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > > + > > > static int __init early_initrd(char *p) > > > { > > > unsigned long start, size; > > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > > if (*endp == ',') { > > > size = memparse(endp + 1, NULL); > > > > > > - initrd_start = start; > > > - initrd_end = start + size; > > > + initrd_start_phys = start; > > > + initrd_end_phys = end; > > > } > > > return 0; > > > } > > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > > } > > > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > > + (initrd_start || initrd_start_phys)) { > > > + /* > > > + * FIXME: ensure proper precendence between > > > + * early_initrd and DT when both are present > > > > Command line takes precedence, so just reverse the order. > > > > > + */ > > > + if (initrd_start) { > > > + initrd_start_phys = __phys_to_virt(initrd_start); > > > + initrd_end_phys = __phys_to_virt(initrd_end); BTW, I think you meant virt_to_phys() here? > > > > AIUI, the original issue was doing the P2V translation was happening > > too early and the VA could be wrong if the linear range is adjusted. > > So I don't think this would work. > > Probably things have changed since then, but in the current code there is > > initrd_start = __phys_to_virt(initrd_start); > > and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe > it's safe to use __phys_to_virt() here as well. Here is fine yes, but I believe it was the the phys to virt in the DT code before adjusting the linear range that was the problem. Rob ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD 2018-10-25 21:13 ` Rob Herring ` (7 preceding siblings ...) (?) @ 2018-10-25 23:07 ` Florian Fainelli -1 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-25 23:07 UTC (permalink / raw) To: Rob Herring, rppt Cc: Ard Biesheuvel, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev On 10/25/18 2:13 PM, Rob Herring wrote: > On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: >> >> On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: >>> +Ard >>> >>> On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: >>>> >>>> On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: >>>>> On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >>>>>> >>>>>> Hi all, >>>>>> >>>>>> While investigating why ARM64 required a ton of objects to be rebuilt >>>>>> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was >>>>>> because we define __early_init_dt_declare_initrd() differently and we do >>>>>> that in arch/arm64/include/asm/memory.h which gets included by a fair >>>>>> amount of other header files, and translation units as well. >>>>> >>>>> I scratch my head sometimes as to why some config options rebuild so >>>>> much stuff. One down, ? to go. :) >>>>> >>>>>> Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build >>>>>> systems that generate two kernels: one with the initramfs and one >>>>>> without. buildroot is one of these build systems, OpenWrt is also >>>>>> another one that does this. >>>>>> >>>>>> This patch series proposes adding an empty initrd.h to satisfy the need >>>>>> for drivers/of/fdt.c to unconditionally include that file, and moves the >>>>>> custom __early_init_dt_declare_initrd() definition away from >>>>>> asm/memory.h >>>>>> >>>>>> This cuts the number of objects rebuilds from 1920 down to 26, so a >>>>>> factor 73 approximately. >>>>>> >>>>>> Apologies for the long CC list, please let me know how you would go >>>>>> about merging that and if another approach would be preferable, e.g: >>>>>> introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or >>>>>> something like that. >>>>> >>>>> There may be a better way as of 4.20 because bootmem is now gone and >>>>> only memblock is used. This should unify what each arch needs to do >>>>> with initrd early. We need the physical address early for memblock >>>>> reserving. Then later on we need the virtual address to access the >>>>> initrd. Perhaps we should just change initrd_start and initrd_end to >>>>> physical addresses (or add 2 new variables would be less invasive and >>>>> allow for different translation than __va()). The sanity checks and >>>>> memblock reserve could also perhaps be moved to a common location. >>>>> >>>>> Alternatively, given arm64 is the only oddball, I'd be fine with an >>>>> "if (IS_ENABLED(CONFIG_ARM64))" condition in the default >>>>> __early_init_dt_declare_initrd as long as we have a path to removing >>>>> it like the above option. >>>> >>>> I think arm64 does not have to redefine __early_init_dt_declare_initrd(). >>>> Something like this might be just all we need (completely untested, >>>> probably it won't even compile): >>>> >>>> diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c >>>> index 9d9582c..e9ca238 100644 >>>> --- a/arch/arm64/mm/init.c >>>> +++ b/arch/arm64/mm/init.c >>>> @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; >>>> phys_addr_t arm64_dma_phys_limit __ro_after_init; >>>> >>>> #ifdef CONFIG_BLK_DEV_INITRD >>>> + >>>> +static phys_addr_t initrd_start_phys, initrd_end_phys; >>>> + >>>> static int __init early_initrd(char *p) >>>> { >>>> unsigned long start, size; >>>> @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) >>>> if (*endp = ',') { >>>> size = memparse(endp + 1, NULL); >>>> >>>> - initrd_start = start; >>>> - initrd_end = start + size; >>>> + initrd_start_phys = start; >>>> + initrd_end_phys = end; >>>> } >>>> return 0; >>>> } >>>> @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) >>>> memblock_add(__pa_symbol(_text), (u64)(_end - _text)); >>>> } >>>> >>>> - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { >>>> + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && >>>> + (initrd_start || initrd_start_phys)) { >>>> + /* >>>> + * FIXME: ensure proper precendence between >>>> + * early_initrd and DT when both are present >>> >>> Command line takes precedence, so just reverse the order. >>> >>>> + */ >>>> + if (initrd_start) { >>>> + initrd_start_phys = __phys_to_virt(initrd_start); >>>> + initrd_end_phys = __phys_to_virt(initrd_end); > > BTW, I think you meant virt_to_phys() here? > >>> >>> AIUI, the original issue was doing the P2V translation was happening >>> too early and the VA could be wrong if the linear range is adjusted. >>> So I don't think this would work. >> >> Probably things have changed since then, but in the current code there is >> >> initrd_start = __phys_to_virt(initrd_start); >> >> and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe >> it's safe to use __phys_to_virt() here as well. > > Here is fine yes, but I believe it was the the phys to virt in the DT > code before adjusting the linear range that was the problem. FWIW, I am extracting the ARM implementation that parses the initrd early command line parameter and the "setup" code doing the page boundary alignment and memblock checking into a helper into lib/ that other architectures can re-use. So far, this removes the need for unicore32, arc and arm to duplicate essentially the same logic. -- Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* [OpenRISC] [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 23:07 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-25 23:07 UTC (permalink / raw) To: openrisc On 10/25/18 2:13 PM, Rob Herring wrote: > On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: >> >> On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: >>> +Ard >>> >>> On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: >>>> >>>> On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: >>>>> On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >>>>>> >>>>>> Hi all, >>>>>> >>>>>> While investigating why ARM64 required a ton of objects to be rebuilt >>>>>> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was >>>>>> because we define __early_init_dt_declare_initrd() differently and we do >>>>>> that in arch/arm64/include/asm/memory.h which gets included by a fair >>>>>> amount of other header files, and translation units as well. >>>>> >>>>> I scratch my head sometimes as to why some config options rebuild so >>>>> much stuff. One down, ? to go. :) >>>>> >>>>>> Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build >>>>>> systems that generate two kernels: one with the initramfs and one >>>>>> without. buildroot is one of these build systems, OpenWrt is also >>>>>> another one that does this. >>>>>> >>>>>> This patch series proposes adding an empty initrd.h to satisfy the need >>>>>> for drivers/of/fdt.c to unconditionally include that file, and moves the >>>>>> custom __early_init_dt_declare_initrd() definition away from >>>>>> asm/memory.h >>>>>> >>>>>> This cuts the number of objects rebuilds from 1920 down to 26, so a >>>>>> factor 73 approximately. >>>>>> >>>>>> Apologies for the long CC list, please let me know how you would go >>>>>> about merging that and if another approach would be preferable, e.g: >>>>>> introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or >>>>>> something like that. >>>>> >>>>> There may be a better way as of 4.20 because bootmem is now gone and >>>>> only memblock is used. This should unify what each arch needs to do >>>>> with initrd early. We need the physical address early for memblock >>>>> reserving. Then later on we need the virtual address to access the >>>>> initrd. Perhaps we should just change initrd_start and initrd_end to >>>>> physical addresses (or add 2 new variables would be less invasive and >>>>> allow for different translation than __va()). The sanity checks and >>>>> memblock reserve could also perhaps be moved to a common location. >>>>> >>>>> Alternatively, given arm64 is the only oddball, I'd be fine with an >>>>> "if (IS_ENABLED(CONFIG_ARM64))" condition in the default >>>>> __early_init_dt_declare_initrd as long as we have a path to removing >>>>> it like the above option. >>>> >>>> I think arm64 does not have to redefine __early_init_dt_declare_initrd(). >>>> Something like this might be just all we need (completely untested, >>>> probably it won't even compile): >>>> >>>> diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c >>>> index 9d9582c..e9ca238 100644 >>>> --- a/arch/arm64/mm/init.c >>>> +++ b/arch/arm64/mm/init.c >>>> @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; >>>> phys_addr_t arm64_dma_phys_limit __ro_after_init; >>>> >>>> #ifdef CONFIG_BLK_DEV_INITRD >>>> + >>>> +static phys_addr_t initrd_start_phys, initrd_end_phys; >>>> + >>>> static int __init early_initrd(char *p) >>>> { >>>> unsigned long start, size; >>>> @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) >>>> if (*endp == ',') { >>>> size = memparse(endp + 1, NULL); >>>> >>>> - initrd_start = start; >>>> - initrd_end = start + size; >>>> + initrd_start_phys = start; >>>> + initrd_end_phys = end; >>>> } >>>> return 0; >>>> } >>>> @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) >>>> memblock_add(__pa_symbol(_text), (u64)(_end - _text)); >>>> } >>>> >>>> - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { >>>> + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && >>>> + (initrd_start || initrd_start_phys)) { >>>> + /* >>>> + * FIXME: ensure proper precendence between >>>> + * early_initrd and DT when both are present >>> >>> Command line takes precedence, so just reverse the order. >>> >>>> + */ >>>> + if (initrd_start) { >>>> + initrd_start_phys = __phys_to_virt(initrd_start); >>>> + initrd_end_phys = __phys_to_virt(initrd_end); > > BTW, I think you meant virt_to_phys() here? > >>> >>> AIUI, the original issue was doing the P2V translation was happening >>> too early and the VA could be wrong if the linear range is adjusted. >>> So I don't think this would work. >> >> Probably things have changed since then, but in the current code there is >> >> initrd_start = __phys_to_virt(initrd_start); >> >> and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe >> it's safe to use __phys_to_virt() here as well. > > Here is fine yes, but I believe it was the the phys to virt in the DT > code before adjusting the linear range that was the problem. FWIW, I am extracting the ARM implementation that parses the initrd early command line parameter and the "setup" code doing the page boundary alignment and memblock checking into a helper into lib/ that other architectures can re-use. So far, this removes the need for unicore32, arc and arm to duplicate essentially the same logic. -- Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 23:07 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-25 23:07 UTC (permalink / raw) To: linux-arm-kernel On 10/25/18 2:13 PM, Rob Herring wrote: > On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: >> >> On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: >>> +Ard >>> >>> On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: >>>> >>>> On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: >>>>> On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >>>>>> >>>>>> Hi all, >>>>>> >>>>>> While investigating why ARM64 required a ton of objects to be rebuilt >>>>>> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was >>>>>> because we define __early_init_dt_declare_initrd() differently and we do >>>>>> that in arch/arm64/include/asm/memory.h which gets included by a fair >>>>>> amount of other header files, and translation units as well. >>>>> >>>>> I scratch my head sometimes as to why some config options rebuild so >>>>> much stuff. One down, ? to go. :) >>>>> >>>>>> Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build >>>>>> systems that generate two kernels: one with the initramfs and one >>>>>> without. buildroot is one of these build systems, OpenWrt is also >>>>>> another one that does this. >>>>>> >>>>>> This patch series proposes adding an empty initrd.h to satisfy the need >>>>>> for drivers/of/fdt.c to unconditionally include that file, and moves the >>>>>> custom __early_init_dt_declare_initrd() definition away from >>>>>> asm/memory.h >>>>>> >>>>>> This cuts the number of objects rebuilds from 1920 down to 26, so a >>>>>> factor 73 approximately. >>>>>> >>>>>> Apologies for the long CC list, please let me know how you would go >>>>>> about merging that and if another approach would be preferable, e.g: >>>>>> introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or >>>>>> something like that. >>>>> >>>>> There may be a better way as of 4.20 because bootmem is now gone and >>>>> only memblock is used. This should unify what each arch needs to do >>>>> with initrd early. We need the physical address early for memblock >>>>> reserving. Then later on we need the virtual address to access the >>>>> initrd. Perhaps we should just change initrd_start and initrd_end to >>>>> physical addresses (or add 2 new variables would be less invasive and >>>>> allow for different translation than __va()). The sanity checks and >>>>> memblock reserve could also perhaps be moved to a common location. >>>>> >>>>> Alternatively, given arm64 is the only oddball, I'd be fine with an >>>>> "if (IS_ENABLED(CONFIG_ARM64))" condition in the default >>>>> __early_init_dt_declare_initrd as long as we have a path to removing >>>>> it like the above option. >>>> >>>> I think arm64 does not have to redefine __early_init_dt_declare_initrd(). >>>> Something like this might be just all we need (completely untested, >>>> probably it won't even compile): >>>> >>>> diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c >>>> index 9d9582c..e9ca238 100644 >>>> --- a/arch/arm64/mm/init.c >>>> +++ b/arch/arm64/mm/init.c >>>> @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; >>>> phys_addr_t arm64_dma_phys_limit __ro_after_init; >>>> >>>> #ifdef CONFIG_BLK_DEV_INITRD >>>> + >>>> +static phys_addr_t initrd_start_phys, initrd_end_phys; >>>> + >>>> static int __init early_initrd(char *p) >>>> { >>>> unsigned long start, size; >>>> @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) >>>> if (*endp == ',') { >>>> size = memparse(endp + 1, NULL); >>>> >>>> - initrd_start = start; >>>> - initrd_end = start + size; >>>> + initrd_start_phys = start; >>>> + initrd_end_phys = end; >>>> } >>>> return 0; >>>> } >>>> @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) >>>> memblock_add(__pa_symbol(_text), (u64)(_end - _text)); >>>> } >>>> >>>> - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { >>>> + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && >>>> + (initrd_start || initrd_start_phys)) { >>>> + /* >>>> + * FIXME: ensure proper precendence between >>>> + * early_initrd and DT when both are present >>> >>> Command line takes precedence, so just reverse the order. >>> >>>> + */ >>>> + if (initrd_start) { >>>> + initrd_start_phys = __phys_to_virt(initrd_start); >>>> + initrd_end_phys = __phys_to_virt(initrd_end); > > BTW, I think you meant virt_to_phys() here? > >>> >>> AIUI, the original issue was doing the P2V translation was happening >>> too early and the VA could be wrong if the linear range is adjusted. >>> So I don't think this would work. >> >> Probably things have changed since then, but in the current code there is >> >> initrd_start = __phys_to_virt(initrd_start); >> >> and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe >> it's safe to use __phys_to_virt() here as well. > > Here is fine yes, but I believe it was the the phys to virt in the DT > code before adjusting the linear range that was the problem. FWIW, I am extracting the ARM implementation that parses the initrd early command line parameter and the "setup" code doing the page boundary alignment and memblock checking into a helper into lib/ that other architectures can re-use. So far, this removes the need for unicore32, arc and arm to duplicate essentially the same logic. -- Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 23:07 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-25 23:07 UTC (permalink / raw) To: linux-snps-arc On 10/25/18 2:13 PM, Rob Herring wrote: > On Thu, Oct 25, 2018@12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: >> >> On Thu, Oct 25, 2018@08:15:15AM -0500, Rob Herring wrote: >>> +Ard >>> >>> On Thu, Oct 25, 2018@4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: >>>> >>>> On Wed, Oct 24, 2018@02:55:17PM -0500, Rob Herring wrote: >>>>> On Wed, Oct 24, 2018@2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >>>>>> >>>>>> Hi all, >>>>>> >>>>>> While investigating why ARM64 required a ton of objects to be rebuilt >>>>>> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was >>>>>> because we define __early_init_dt_declare_initrd() differently and we do >>>>>> that in arch/arm64/include/asm/memory.h which gets included by a fair >>>>>> amount of other header files, and translation units as well. >>>>> >>>>> I scratch my head sometimes as to why some config options rebuild so >>>>> much stuff. One down, ? to go. :) >>>>> >>>>>> Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build >>>>>> systems that generate two kernels: one with the initramfs and one >>>>>> without. buildroot is one of these build systems, OpenWrt is also >>>>>> another one that does this. >>>>>> >>>>>> This patch series proposes adding an empty initrd.h to satisfy the need >>>>>> for drivers/of/fdt.c to unconditionally include that file, and moves the >>>>>> custom __early_init_dt_declare_initrd() definition away from >>>>>> asm/memory.h >>>>>> >>>>>> This cuts the number of objects rebuilds from 1920 down to 26, so a >>>>>> factor 73 approximately. >>>>>> >>>>>> Apologies for the long CC list, please let me know how you would go >>>>>> about merging that and if another approach would be preferable, e.g: >>>>>> introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or >>>>>> something like that. >>>>> >>>>> There may be a better way as of 4.20 because bootmem is now gone and >>>>> only memblock is used. This should unify what each arch needs to do >>>>> with initrd early. We need the physical address early for memblock >>>>> reserving. Then later on we need the virtual address to access the >>>>> initrd. Perhaps we should just change initrd_start and initrd_end to >>>>> physical addresses (or add 2 new variables would be less invasive and >>>>> allow for different translation than __va()). The sanity checks and >>>>> memblock reserve could also perhaps be moved to a common location. >>>>> >>>>> Alternatively, given arm64 is the only oddball, I'd be fine with an >>>>> "if (IS_ENABLED(CONFIG_ARM64))" condition in the default >>>>> __early_init_dt_declare_initrd as long as we have a path to removing >>>>> it like the above option. >>>> >>>> I think arm64 does not have to redefine __early_init_dt_declare_initrd(). >>>> Something like this might be just all we need (completely untested, >>>> probably it won't even compile): >>>> >>>> diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c >>>> index 9d9582c..e9ca238 100644 >>>> --- a/arch/arm64/mm/init.c >>>> +++ b/arch/arm64/mm/init.c >>>> @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; >>>> phys_addr_t arm64_dma_phys_limit __ro_after_init; >>>> >>>> #ifdef CONFIG_BLK_DEV_INITRD >>>> + >>>> +static phys_addr_t initrd_start_phys, initrd_end_phys; >>>> + >>>> static int __init early_initrd(char *p) >>>> { >>>> unsigned long start, size; >>>> @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) >>>> if (*endp == ',') { >>>> size = memparse(endp + 1, NULL); >>>> >>>> - initrd_start = start; >>>> - initrd_end = start + size; >>>> + initrd_start_phys = start; >>>> + initrd_end_phys = end; >>>> } >>>> return 0; >>>> } >>>> @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) >>>> memblock_add(__pa_symbol(_text), (u64)(_end - _text)); >>>> } >>>> >>>> - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { >>>> + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && >>>> + (initrd_start || initrd_start_phys)) { >>>> + /* >>>> + * FIXME: ensure proper precendence between >>>> + * early_initrd and DT when both are present >>> >>> Command line takes precedence, so just reverse the order. >>> >>>> + */ >>>> + if (initrd_start) { >>>> + initrd_start_phys = __phys_to_virt(initrd_start); >>>> + initrd_end_phys = __phys_to_virt(initrd_end); > > BTW, I think you meant virt_to_phys() here? > >>> >>> AIUI, the original issue was doing the P2V translation was happening >>> too early and the VA could be wrong if the linear range is adjusted. >>> So I don't think this would work. >> >> Probably things have changed since then, but in the current code there is >> >> initrd_start = __phys_to_virt(initrd_start); >> >> and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe >> it's safe to use __phys_to_virt() here as well. > > Here is fine yes, but I believe it was the the phys to virt in the DT > code before adjusting the linear range that was the problem. FWIW, I am extracting the ARM implementation that parses the initrd early command line parameter and the "setup" code doing the page boundary alignment and memblock checking into a helper into lib/ that other architectures can re-use. So far, this removes the need for unicore32, arc and arm to duplicate essentially the same logic. -- Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 23:07 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-25 23:07 UTC (permalink / raw) To: Rob Herring, rppt Cc: Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, linux-s390, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, Marc Zyngier, linux-um, linux-m68k, Openrisc, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-parisc, Ard Biesheuvel, Greg Kroah-Hartman, linux-kernel, linux-alpha, Olof Johansson, nios2-dev, linuxppc-dev On 10/25/18 2:13 PM, Rob Herring wrote: > On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: >> >> On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: >>> +Ard >>> >>> On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: >>>> >>>> On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: >>>>> On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >>>>>> >>>>>> Hi all, >>>>>> >>>>>> While investigating why ARM64 required a ton of objects to be rebuilt >>>>>> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was >>>>>> because we define __early_init_dt_declare_initrd() differently and we do >>>>>> that in arch/arm64/include/asm/memory.h which gets included by a fair >>>>>> amount of other header files, and translation units as well. >>>>> >>>>> I scratch my head sometimes as to why some config options rebuild so >>>>> much stuff. One down, ? to go. :) >>>>> >>>>>> Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build >>>>>> systems that generate two kernels: one with the initramfs and one >>>>>> without. buildroot is one of these build systems, OpenWrt is also >>>>>> another one that does this. >>>>>> >>>>>> This patch series proposes adding an empty initrd.h to satisfy the need >>>>>> for drivers/of/fdt.c to unconditionally include that file, and moves the >>>>>> custom __early_init_dt_declare_initrd() definition away from >>>>>> asm/memory.h >>>>>> >>>>>> This cuts the number of objects rebuilds from 1920 down to 26, so a >>>>>> factor 73 approximately. >>>>>> >>>>>> Apologies for the long CC list, please let me know how you would go >>>>>> about merging that and if another approach would be preferable, e.g: >>>>>> introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or >>>>>> something like that. >>>>> >>>>> There may be a better way as of 4.20 because bootmem is now gone and >>>>> only memblock is used. This should unify what each arch needs to do >>>>> with initrd early. We need the physical address early for memblock >>>>> reserving. Then later on we need the virtual address to access the >>>>> initrd. Perhaps we should just change initrd_start and initrd_end to >>>>> physical addresses (or add 2 new variables would be less invasive and >>>>> allow for different translation than __va()). The sanity checks and >>>>> memblock reserve could also perhaps be moved to a common location. >>>>> >>>>> Alternatively, given arm64 is the only oddball, I'd be fine with an >>>>> "if (IS_ENABLED(CONFIG_ARM64))" condition in the default >>>>> __early_init_dt_declare_initrd as long as we have a path to removing >>>>> it like the above option. >>>> >>>> I think arm64 does not have to redefine __early_init_dt_declare_initrd(). >>>> Something like this might be just all we need (completely untested, >>>> probably it won't even compile): >>>> >>>> diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c >>>> index 9d9582c..e9ca238 100644 >>>> --- a/arch/arm64/mm/init.c >>>> +++ b/arch/arm64/mm/init.c >>>> @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; >>>> phys_addr_t arm64_dma_phys_limit __ro_after_init; >>>> >>>> #ifdef CONFIG_BLK_DEV_INITRD >>>> + >>>> +static phys_addr_t initrd_start_phys, initrd_end_phys; >>>> + >>>> static int __init early_initrd(char *p) >>>> { >>>> unsigned long start, size; >>>> @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) >>>> if (*endp == ',') { >>>> size = memparse(endp + 1, NULL); >>>> >>>> - initrd_start = start; >>>> - initrd_end = start + size; >>>> + initrd_start_phys = start; >>>> + initrd_end_phys = end; >>>> } >>>> return 0; >>>> } >>>> @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) >>>> memblock_add(__pa_symbol(_text), (u64)(_end - _text)); >>>> } >>>> >>>> - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { >>>> + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && >>>> + (initrd_start || initrd_start_phys)) { >>>> + /* >>>> + * FIXME: ensure proper precendence between >>>> + * early_initrd and DT when both are present >>> >>> Command line takes precedence, so just reverse the order. >>> >>>> + */ >>>> + if (initrd_start) { >>>> + initrd_start_phys = __phys_to_virt(initrd_start); >>>> + initrd_end_phys = __phys_to_virt(initrd_end); > > BTW, I think you meant virt_to_phys() here? > >>> >>> AIUI, the original issue was doing the P2V translation was happening >>> too early and the VA could be wrong if the linear range is adjusted. >>> So I don't think this would work. >> >> Probably things have changed since then, but in the current code there is >> >> initrd_start = __phys_to_virt(initrd_start); >> >> and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe >> it's safe to use __phys_to_virt() here as well. > > Here is fine yes, but I believe it was the the phys to virt in the DT > code before adjusting the linear range that was the problem. FWIW, I am extracting the ARM implementation that parses the initrd early command line parameter and the "setup" code doing the page boundary alignment and memblock checking into a helper into lib/ that other architectures can re-use. So far, this removes the need for unicore32, arc and arm to duplicate essentially the same logic. -- Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 23:07 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-25 23:07 UTC (permalink / raw) To: Rob Herring, rppt Cc: Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, linux-s390, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, Marc Zyngier, linux-um, linux-m68k, Openrisc, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-parisc, Ard Biesheuvel, Greg Kroah-Hartman, linux-kernel, linux-alpha, Olof Johansson, nios2-dev, linuxppc-dev On 10/25/18 2:13 PM, Rob Herring wrote: > On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: >> >> On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: >>> +Ard >>> >>> On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: >>>> >>>> On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: >>>>> On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >>>>>> >>>>>> Hi all, >>>>>> >>>>>> While investigating why ARM64 required a ton of objects to be rebuilt >>>>>> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was >>>>>> because we define __early_init_dt_declare_initrd() differently and we do >>>>>> that in arch/arm64/include/asm/memory.h which gets included by a fair >>>>>> amount of other header files, and translation units as well. >>>>> >>>>> I scratch my head sometimes as to why some config options rebuild so >>>>> much stuff. One down, ? to go. :) >>>>> >>>>>> Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build >>>>>> systems that generate two kernels: one with the initramfs and one >>>>>> without. buildroot is one of these build systems, OpenWrt is also >>>>>> another one that does this. >>>>>> >>>>>> This patch series proposes adding an empty initrd.h to satisfy the need >>>>>> for drivers/of/fdt.c to unconditionally include that file, and moves the >>>>>> custom __early_init_dt_declare_initrd() definition away from >>>>>> asm/memory.h >>>>>> >>>>>> This cuts the number of objects rebuilds from 1920 down to 26, so a >>>>>> factor 73 approximately. >>>>>> >>>>>> Apologies for the long CC list, please let me know how you would go >>>>>> about merging that and if another approach would be preferable, e.g: >>>>>> introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or >>>>>> something like that. >>>>> >>>>> There may be a better way as of 4.20 because bootmem is now gone and >>>>> only memblock is used. This should unify what each arch needs to do >>>>> with initrd early. We need the physical address early for memblock >>>>> reserving. Then later on we need the virtual address to access the >>>>> initrd. Perhaps we should just change initrd_start and initrd_end to >>>>> physical addresses (or add 2 new variables would be less invasive and >>>>> allow for different translation than __va()). The sanity checks and >>>>> memblock reserve could also perhaps be moved to a common location. >>>>> >>>>> Alternatively, given arm64 is the only oddball, I'd be fine with an >>>>> "if (IS_ENABLED(CONFIG_ARM64))" condition in the default >>>>> __early_init_dt_declare_initrd as long as we have a path to removing >>>>> it like the above option. >>>> >>>> I think arm64 does not have to redefine __early_init_dt_declare_initrd(). >>>> Something like this might be just all we need (completely untested, >>>> probably it won't even compile): >>>> >>>> diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c >>>> index 9d9582c..e9ca238 100644 >>>> --- a/arch/arm64/mm/init.c >>>> +++ b/arch/arm64/mm/init.c >>>> @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; >>>> phys_addr_t arm64_dma_phys_limit __ro_after_init; >>>> >>>> #ifdef CONFIG_BLK_DEV_INITRD >>>> + >>>> +static phys_addr_t initrd_start_phys, initrd_end_phys; >>>> + >>>> static int __init early_initrd(char *p) >>>> { >>>> unsigned long start, size; >>>> @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) >>>> if (*endp == ',') { >>>> size = memparse(endp + 1, NULL); >>>> >>>> - initrd_start = start; >>>> - initrd_end = start + size; >>>> + initrd_start_phys = start; >>>> + initrd_end_phys = end; >>>> } >>>> return 0; >>>> } >>>> @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) >>>> memblock_add(__pa_symbol(_text), (u64)(_end - _text)); >>>> } >>>> >>>> - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { >>>> + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && >>>> + (initrd_start || initrd_start_phys)) { >>>> + /* >>>> + * FIXME: ensure proper precendence between >>>> + * early_initrd and DT when both are present >>> >>> Command line takes precedence, so just reverse the order. >>> >>>> + */ >>>> + if (initrd_start) { >>>> + initrd_start_phys = __phys_to_virt(initrd_start); >>>> + initrd_end_phys = __phys_to_virt(initrd_end); > > BTW, I think you meant virt_to_phys() here? > >>> >>> AIUI, the original issue was doing the P2V translation was happening >>> too early and the VA could be wrong if the linear range is adjusted. >>> So I don't think this would work. >> >> Probably things have changed since then, but in the current code there is >> >> initrd_start = __phys_to_virt(initrd_start); >> >> and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe >> it's safe to use __phys_to_virt() here as well. > > Here is fine yes, but I believe it was the the phys to virt in the DT > code before adjusting the linear range that was the problem. FWIW, I am extracting the ARM implementation that parses the initrd early command line parameter and the "setup" code doing the page boundary alignment and memblock checking into a helper into lib/ that other architectures can re-use. So far, this removes the need for unicore32, arc and arm to duplicate essentially the same logic. -- Florian _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 23:07 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-25 23:07 UTC (permalink / raw) To: linux-riscv On 10/25/18 2:13 PM, Rob Herring wrote: > On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: >> >> On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: >>> +Ard >>> >>> On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: >>>> >>>> On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: >>>>> On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >>>>>> >>>>>> Hi all, >>>>>> >>>>>> While investigating why ARM64 required a ton of objects to be rebuilt >>>>>> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was >>>>>> because we define __early_init_dt_declare_initrd() differently and we do >>>>>> that in arch/arm64/include/asm/memory.h which gets included by a fair >>>>>> amount of other header files, and translation units as well. >>>>> >>>>> I scratch my head sometimes as to why some config options rebuild so >>>>> much stuff. One down, ? to go. :) >>>>> >>>>>> Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build >>>>>> systems that generate two kernels: one with the initramfs and one >>>>>> without. buildroot is one of these build systems, OpenWrt is also >>>>>> another one that does this. >>>>>> >>>>>> This patch series proposes adding an empty initrd.h to satisfy the need >>>>>> for drivers/of/fdt.c to unconditionally include that file, and moves the >>>>>> custom __early_init_dt_declare_initrd() definition away from >>>>>> asm/memory.h >>>>>> >>>>>> This cuts the number of objects rebuilds from 1920 down to 26, so a >>>>>> factor 73 approximately. >>>>>> >>>>>> Apologies for the long CC list, please let me know how you would go >>>>>> about merging that and if another approach would be preferable, e.g: >>>>>> introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or >>>>>> something like that. >>>>> >>>>> There may be a better way as of 4.20 because bootmem is now gone and >>>>> only memblock is used. This should unify what each arch needs to do >>>>> with initrd early. We need the physical address early for memblock >>>>> reserving. Then later on we need the virtual address to access the >>>>> initrd. Perhaps we should just change initrd_start and initrd_end to >>>>> physical addresses (or add 2 new variables would be less invasive and >>>>> allow for different translation than __va()). The sanity checks and >>>>> memblock reserve could also perhaps be moved to a common location. >>>>> >>>>> Alternatively, given arm64 is the only oddball, I'd be fine with an >>>>> "if (IS_ENABLED(CONFIG_ARM64))" condition in the default >>>>> __early_init_dt_declare_initrd as long as we have a path to removing >>>>> it like the above option. >>>> >>>> I think arm64 does not have to redefine __early_init_dt_declare_initrd(). >>>> Something like this might be just all we need (completely untested, >>>> probably it won't even compile): >>>> >>>> diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c >>>> index 9d9582c..e9ca238 100644 >>>> --- a/arch/arm64/mm/init.c >>>> +++ b/arch/arm64/mm/init.c >>>> @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; >>>> phys_addr_t arm64_dma_phys_limit __ro_after_init; >>>> >>>> #ifdef CONFIG_BLK_DEV_INITRD >>>> + >>>> +static phys_addr_t initrd_start_phys, initrd_end_phys; >>>> + >>>> static int __init early_initrd(char *p) >>>> { >>>> unsigned long start, size; >>>> @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) >>>> if (*endp == ',') { >>>> size = memparse(endp + 1, NULL); >>>> >>>> - initrd_start = start; >>>> - initrd_end = start + size; >>>> + initrd_start_phys = start; >>>> + initrd_end_phys = end; >>>> } >>>> return 0; >>>> } >>>> @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) >>>> memblock_add(__pa_symbol(_text), (u64)(_end - _text)); >>>> } >>>> >>>> - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { >>>> + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && >>>> + (initrd_start || initrd_start_phys)) { >>>> + /* >>>> + * FIXME: ensure proper precendence between >>>> + * early_initrd and DT when both are present >>> >>> Command line takes precedence, so just reverse the order. >>> >>>> + */ >>>> + if (initrd_start) { >>>> + initrd_start_phys = __phys_to_virt(initrd_start); >>>> + initrd_end_phys = __phys_to_virt(initrd_end); > > BTW, I think you meant virt_to_phys() here? > >>> >>> AIUI, the original issue was doing the P2V translation was happening >>> too early and the VA could be wrong if the linear range is adjusted. >>> So I don't think this would work. >> >> Probably things have changed since then, but in the current code there is >> >> initrd_start = __phys_to_virt(initrd_start); >> >> and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe >> it's safe to use __phys_to_virt() here as well. > > Here is fine yes, but I believe it was the the phys to virt in the DT > code before adjusting the linear range that was the problem. FWIW, I am extracting the ARM implementation that parses the initrd early command line parameter and the "setup" code doing the page boundary alignment and memblock checking into a helper into lib/ that other architectures can re-use. So far, this removes the need for unicore32, arc and arm to duplicate essentially the same logic. -- Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 23:07 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-25 23:07 UTC (permalink / raw) To: Rob Herring, rppt Cc: Ard Biesheuvel, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev, Openrisc, linux-parisc, linuxppc-dev, linux-riscv, linux-s390, SH-Linux, sparclinux, linux-um, linux-xtensa, devicetree, open list:GENERIC INCLUDE/ASM HEADER FILES On 10/25/18 2:13 PM, Rob Herring wrote: > On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: >> >> On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: >>> +Ard >>> >>> On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: >>>> >>>> On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: >>>>> On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >>>>>> >>>>>> Hi all, >>>>>> >>>>>> While investigating why ARM64 required a ton of objects to be rebuilt >>>>>> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was >>>>>> because we define __early_init_dt_declare_initrd() differently and we do >>>>>> that in arch/arm64/include/asm/memory.h which gets included by a fair >>>>>> amount of other header files, and translation units as well. >>>>> >>>>> I scratch my head sometimes as to why some config options rebuild so >>>>> much stuff. One down, ? to go. :) >>>>> >>>>>> Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build >>>>>> systems that generate two kernels: one with the initramfs and one >>>>>> without. buildroot is one of these build systems, OpenWrt is also >>>>>> another one that does this. >>>>>> >>>>>> This patch series proposes adding an empty initrd.h to satisfy the need >>>>>> for drivers/of/fdt.c to unconditionally include that file, and moves the >>>>>> custom __early_init_dt_declare_initrd() definition away from >>>>>> asm/memory.h >>>>>> >>>>>> This cuts the number of objects rebuilds from 1920 down to 26, so a >>>>>> factor 73 approximately. >>>>>> >>>>>> Apologies for the long CC list, please let me know how you would go >>>>>> about merging that and if another approach would be preferable, e.g: >>>>>> introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or >>>>>> something like that. >>>>> >>>>> There may be a better way as of 4.20 because bootmem is now gone and >>>>> only memblock is used. This should unify what each arch needs to do >>>>> with initrd early. We need the physical address early for memblock >>>>> reserving. Then later on we need the virtual address to access the >>>>> initrd. Perhaps we should just change initrd_start and initrd_end to >>>>> physical addresses (or add 2 new variables would be less invasive and >>>>> allow for different translation than __va()). The sanity checks and >>>>> memblock reserve could also perhaps be moved to a common location. >>>>> >>>>> Alternatively, given arm64 is the only oddball, I'd be fine with an >>>>> "if (IS_ENABLED(CONFIG_ARM64))" condition in the default >>>>> __early_init_dt_declare_initrd as long as we have a path to removing >>>>> it like the above option. >>>> >>>> I think arm64 does not have to redefine __early_init_dt_declare_initrd(). >>>> Something like this might be just all we need (completely untested, >>>> probably it won't even compile): >>>> >>>> diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c >>>> index 9d9582c..e9ca238 100644 >>>> --- a/arch/arm64/mm/init.c >>>> +++ b/arch/arm64/mm/init.c >>>> @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; >>>> phys_addr_t arm64_dma_phys_limit __ro_after_init; >>>> >>>> #ifdef CONFIG_BLK_DEV_INITRD >>>> + >>>> +static phys_addr_t initrd_start_phys, initrd_end_phys; >>>> + >>>> static int __init early_initrd(char *p) >>>> { >>>> unsigned long start, size; >>>> @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) >>>> if (*endp == ',') { >>>> size = memparse(endp + 1, NULL); >>>> >>>> - initrd_start = start; >>>> - initrd_end = start + size; >>>> + initrd_start_phys = start; >>>> + initrd_end_phys = end; >>>> } >>>> return 0; >>>> } >>>> @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) >>>> memblock_add(__pa_symbol(_text), (u64)(_end - _text)); >>>> } >>>> >>>> - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { >>>> + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && >>>> + (initrd_start || initrd_start_phys)) { >>>> + /* >>>> + * FIXME: ensure proper precendence between >>>> + * early_initrd and DT when both are present >>> >>> Command line takes precedence, so just reverse the order. >>> >>>> + */ >>>> + if (initrd_start) { >>>> + initrd_start_phys = __phys_to_virt(initrd_start); >>>> + initrd_end_phys = __phys_to_virt(initrd_end); > > BTW, I think you meant virt_to_phys() here? > >>> >>> AIUI, the original issue was doing the P2V translation was happening >>> too early and the VA could be wrong if the linear range is adjusted. >>> So I don't think this would work. >> >> Probably things have changed since then, but in the current code there is >> >> initrd_start = __phys_to_virt(initrd_start); >> >> and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe >> it's safe to use __phys_to_virt() here as well. > > Here is fine yes, but I believe it was the the phys to virt in the DT > code before adjusting the linear range that was the problem. FWIW, I am extracting the ARM implementation that parses the initrd early command line parameter and the "setup" code doing the page boundary alignment and memblock checking into a helper into lib/ that other architectures can re-use. So far, this removes the need for unicore32, arc and arm to duplicate essentially the same logic. -- Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 23:07 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-25 23:07 UTC (permalink / raw) To: Rob Herring, rppt Cc: Ard Biesheuvel, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev, Openrisc, linux-parisc, linuxppc-dev, linux-riscv, linux-s390, SH-Linux, sparclinux, linux-um, linux-xtensa, devicetree, open list:GENERIC INCLUDE/ASM HEADER FILES On 10/25/18 2:13 PM, Rob Herring wrote: > On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: >> >> On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: >>> +Ard >>> >>> On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: >>>> >>>> On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: >>>>> On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >>>>>> >>>>>> Hi all, >>>>>> >>>>>> While investigating why ARM64 required a ton of objects to be rebuilt >>>>>> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was >>>>>> because we define __early_init_dt_declare_initrd() differently and we do >>>>>> that in arch/arm64/include/asm/memory.h which gets included by a fair >>>>>> amount of other header files, and translation units as well. >>>>> >>>>> I scratch my head sometimes as to why some config options rebuild so >>>>> much stuff. One down, ? to go. :) >>>>> >>>>>> Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build >>>>>> systems that generate two kernels: one with the initramfs and one >>>>>> without. buildroot is one of these build systems, OpenWrt is also >>>>>> another one that does this. >>>>>> >>>>>> This patch series proposes adding an empty initrd.h to satisfy the need >>>>>> for drivers/of/fdt.c to unconditionally include that file, and moves the >>>>>> custom __early_init_dt_declare_initrd() definition away from >>>>>> asm/memory.h >>>>>> >>>>>> This cuts the number of objects rebuilds from 1920 down to 26, so a >>>>>> factor 73 approximately. >>>>>> >>>>>> Apologies for the long CC list, please let me know how you would go >>>>>> about merging that and if another approach would be preferable, e.g: >>>>>> introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or >>>>>> something like that. >>>>> >>>>> There may be a better way as of 4.20 because bootmem is now gone and >>>>> only memblock is used. This should unify what each arch needs to do >>>>> with initrd early. We need the physical address early for memblock >>>>> reserving. Then later on we need the virtual address to access the >>>>> initrd. Perhaps we should just change initrd_start and initrd_end to >>>>> physical addresses (or add 2 new variables would be less invasive and >>>>> allow for different translation than __va()). The sanity checks and >>>>> memblock reserve could also perhaps be moved to a common location. >>>>> >>>>> Alternatively, given arm64 is the only oddball, I'd be fine with an >>>>> "if (IS_ENABLED(CONFIG_ARM64))" condition in the default >>>>> __early_init_dt_declare_initrd as long as we have a path to removing >>>>> it like the above option. >>>> >>>> I think arm64 does not have to redefine __early_init_dt_declare_initrd(). >>>> Something like this might be just all we need (completely untested, >>>> probably it won't even compile): >>>> >>>> diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c >>>> index 9d9582c..e9ca238 100644 >>>> --- a/arch/arm64/mm/init.c >>>> +++ b/arch/arm64/mm/init.c >>>> @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; >>>> phys_addr_t arm64_dma_phys_limit __ro_after_init; >>>> >>>> #ifdef CONFIG_BLK_DEV_INITRD >>>> + >>>> +static phys_addr_t initrd_start_phys, initrd_end_phys; >>>> + >>>> static int __init early_initrd(char *p) >>>> { >>>> unsigned long start, size; >>>> @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) >>>> if (*endp == ',') { >>>> size = memparse(endp + 1, NULL); >>>> >>>> - initrd_start = start; >>>> - initrd_end = start + size; >>>> + initrd_start_phys = start; >>>> + initrd_end_phys = end; >>>> } >>>> return 0; >>>> } >>>> @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) >>>> memblock_add(__pa_symbol(_text), (u64)(_end - _text)); >>>> } >>>> >>>> - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { >>>> + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && >>>> + (initrd_start || initrd_start_phys)) { >>>> + /* >>>> + * FIXME: ensure proper precendence between >>>> + * early_initrd and DT when both are present >>> >>> Command line takes precedence, so just reverse the order. >>> >>>> + */ >>>> + if (initrd_start) { >>>> + initrd_start_phys = __phys_to_virt(initrd_start); >>>> + initrd_end_phys = __phys_to_virt(initrd_end); > > BTW, I think you meant virt_to_phys() here? > >>> >>> AIUI, the original issue was doing the P2V translation was happening >>> too early and the VA could be wrong if the linear range is adjusted. >>> So I don't think this would work. >> >> Probably things have changed since then, but in the current code there is >> >> initrd_start = __phys_to_virt(initrd_start); >> >> and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe >> it's safe to use __phys_to_virt() here as well. > > Here is fine yes, but I believe it was the the phys to virt in the DT > code before adjusting the linear range that was the problem. FWIW, I am extracting the ARM implementation that parses the initrd early command line parameter and the "setup" code doing the page boundary alignment and memblock checking into a helper into lib/ that other architectures can re-use. So far, this removes the need for unicore32, arc and arm to duplicate essentially the same logic. -- Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-25 23:07 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-25 23:07 UTC (permalink / raw) To: Rob Herring, rppt Cc: Ard Biesheuvel, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev On 10/25/18 2:13 PM, Rob Herring wrote: > On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: >> >> On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: >>> +Ard >>> >>> On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: >>>> >>>> On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: >>>>> On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >>>>>> >>>>>> Hi all, >>>>>> >>>>>> While investigating why ARM64 required a ton of objects to be rebuilt >>>>>> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was >>>>>> because we define __early_init_dt_declare_initrd() differently and we do >>>>>> that in arch/arm64/include/asm/memory.h which gets included by a fair >>>>>> amount of other header files, and translation units as well. >>>>> >>>>> I scratch my head sometimes as to why some config options rebuild so >>>>> much stuff. One down, ? to go. :) >>>>> >>>>>> Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build >>>>>> systems that generate two kernels: one with the initramfs and one >>>>>> without. buildroot is one of these build systems, OpenWrt is also >>>>>> another one that does this. >>>>>> >>>>>> This patch series proposes adding an empty initrd.h to satisfy the need >>>>>> for drivers/of/fdt.c to unconditionally include that file, and moves the >>>>>> custom __early_init_dt_declare_initrd() definition away from >>>>>> asm/memory.h >>>>>> >>>>>> This cuts the number of objects rebuilds from 1920 down to 26, so a >>>>>> factor 73 approximately. >>>>>> >>>>>> Apologies for the long CC list, please let me know how you would go >>>>>> about merging that and if another approach would be preferable, e.g: >>>>>> introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or >>>>>> something like that. >>>>> >>>>> There may be a better way as of 4.20 because bootmem is now gone and >>>>> only memblock is used. This should unify what each arch needs to do >>>>> with initrd early. We need the physical address early for memblock >>>>> reserving. Then later on we need the virtual address to access the >>>>> initrd. Perhaps we should just change initrd_start and initrd_end to >>>>> physical addresses (or add 2 new variables would be less invasive and >>>>> allow for different translation than __va()). The sanity checks and >>>>> memblock reserve could also perhaps be moved to a common location. >>>>> >>>>> Alternatively, given arm64 is the only oddball, I'd be fine with an >>>>> "if (IS_ENABLED(CONFIG_ARM64))" condition in the default >>>>> __early_init_dt_declare_initrd as long as we have a path to removing >>>>> it like the above option. >>>> >>>> I think arm64 does not have to redefine __early_init_dt_declare_initrd(). >>>> Something like this might be just all we need (completely untested, >>>> probably it won't even compile): >>>> >>>> diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c >>>> index 9d9582c..e9ca238 100644 >>>> --- a/arch/arm64/mm/init.c >>>> +++ b/arch/arm64/mm/init.c >>>> @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; >>>> phys_addr_t arm64_dma_phys_limit __ro_after_init; >>>> >>>> #ifdef CONFIG_BLK_DEV_INITRD >>>> + >>>> +static phys_addr_t initrd_start_phys, initrd_end_phys; >>>> + >>>> static int __init early_initrd(char *p) >>>> { >>>> unsigned long start, size; >>>> @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) >>>> if (*endp == ',') { >>>> size = memparse(endp + 1, NULL); >>>> >>>> - initrd_start = start; >>>> - initrd_end = start + size; >>>> + initrd_start_phys = start; >>>> + initrd_end_phys = end; >>>> } >>>> return 0; >>>> } >>>> @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) >>>> memblock_add(__pa_symbol(_text), (u64)(_end - _text)); >>>> } >>>> >>>> - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { >>>> + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && >>>> + (initrd_start || initrd_start_phys)) { >>>> + /* >>>> + * FIXME: ensure proper precendence between >>>> + * early_initrd and DT when both are present >>> >>> Command line takes precedence, so just reverse the order. >>> >>>> + */ >>>> + if (initrd_start) { >>>> + initrd_start_phys = __phys_to_virt(initrd_start); >>>> + initrd_end_phys = __phys_to_virt(initrd_end); > > BTW, I think you meant virt_to_phys() here? > >>> >>> AIUI, the original issue was doing the P2V translation was happening >>> too early and the VA could be wrong if the linear range is adjusted. >>> So I don't think this would work. >> >> Probably things have changed since then, but in the current code there is >> >> initrd_start = __phys_to_virt(initrd_start); >> >> and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe >> it's safe to use __phys_to_virt() here as well. > > Here is fine yes, but I believe it was the the phys to virt in the DT > code before adjusting the linear range that was the problem. FWIW, I am extracting the ARM implementation that parses the initrd early command line parameter and the "setup" code doing the page boundary alignment and memblock checking into a helper into lib/ that other architectures can re-use. So far, this removes the need for unicore32, arc and arm to duplicate essentially the same logic. -- Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD 2018-10-25 23:07 ` Florian Fainelli ` (8 preceding siblings ...) (?) @ 2018-10-26 11:07 ` Mike Rapoport -1 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-26 11:07 UTC (permalink / raw) To: Florian Fainelli Cc: Rob Herring, Ard Biesheuvel, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS On Thu, Oct 25, 2018 at 04:07:13PM -0700, Florian Fainelli wrote: > On 10/25/18 2:13 PM, Rob Herring wrote: > > On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > >> > >> On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > >>> +Ard > >>> > >>> On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > >>>> > >>>> On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > >>>>> On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > >>>>>> > >>>>>> Hi all, > >>>>>> > >>>>>> While investigating why ARM64 required a ton of objects to be rebuilt > >>>>>> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > >>>>>> because we define __early_init_dt_declare_initrd() differently and we do > >>>>>> that in arch/arm64/include/asm/memory.h which gets included by a fair > >>>>>> amount of other header files, and translation units as well. > >>>>> > >>>> I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > >>>> Something like this might be just all we need (completely untested, > >>>> probably it won't even compile): [ ... ] > FWIW, I am extracting the ARM implementation that parses the initrd > early command line parameter and the "setup" code doing the page > boundary alignment and memblock checking into a helper into lib/ that > other architectures can re-use. So far, this removes the need for > unicore32, arc and arm to duplicate essentially the same logic. Presuming you are going to need asm-generic/initrd.h for that as well, using override for __early_init_dt_declare_initrd in arm64 version of initrd.h might be the simplest option. > -- > Florian > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 168+ messages in thread
* [OpenRISC] [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-26 11:07 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-26 11:07 UTC (permalink / raw) To: openrisc On Thu, Oct 25, 2018 at 04:07:13PM -0700, Florian Fainelli wrote: > On 10/25/18 2:13 PM, Rob Herring wrote: > > On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > >> > >> On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > >>> +Ard > >>> > >>> On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > >>>> > >>>> On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > >>>>> On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > >>>>>> > >>>>>> Hi all, > >>>>>> > >>>>>> While investigating why ARM64 required a ton of objects to be rebuilt > >>>>>> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > >>>>>> because we define __early_init_dt_declare_initrd() differently and we do > >>>>>> that in arch/arm64/include/asm/memory.h which gets included by a fair > >>>>>> amount of other header files, and translation units as well. > >>>>> > >>>> I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > >>>> Something like this might be just all we need (completely untested, > >>>> probably it won't even compile): [ ... ] > FWIW, I am extracting the ARM implementation that parses the initrd > early command line parameter and the "setup" code doing the page > boundary alignment and memblock checking into a helper into lib/ that > other architectures can re-use. So far, this removes the need for > unicore32, arc and arm to duplicate essentially the same logic. Presuming you are going to need asm-generic/initrd.h for that as well, using override for __early_init_dt_declare_initrd in arm64 version of initrd.h might be the simplest option. > -- > Florian > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-26 11:07 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-26 11:07 UTC (permalink / raw) To: linux-arm-kernel On Thu, Oct 25, 2018 at 04:07:13PM -0700, Florian Fainelli wrote: > On 10/25/18 2:13 PM, Rob Herring wrote: > > On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > >> > >> On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > >>> +Ard > >>> > >>> On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > >>>> > >>>> On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > >>>>> On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > >>>>>> > >>>>>> Hi all, > >>>>>> > >>>>>> While investigating why ARM64 required a ton of objects to be rebuilt > >>>>>> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > >>>>>> because we define __early_init_dt_declare_initrd() differently and we do > >>>>>> that in arch/arm64/include/asm/memory.h which gets included by a fair > >>>>>> amount of other header files, and translation units as well. > >>>>> > >>>> I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > >>>> Something like this might be just all we need (completely untested, > >>>> probably it won't even compile): [ ... ] > FWIW, I am extracting the ARM implementation that parses the initrd > early command line parameter and the "setup" code doing the page > boundary alignment and memblock checking into a helper into lib/ that > other architectures can re-use. So far, this removes the need for > unicore32, arc and arm to duplicate essentially the same logic. Presuming you are going to need asm-generic/initrd.h for that as well, using override for __early_init_dt_declare_initrd in arm64 version of initrd.h might be the simplest option. > -- > Florian > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-26 11:07 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-26 11:07 UTC (permalink / raw) To: linux-snps-arc On Thu, Oct 25, 2018@04:07:13PM -0700, Florian Fainelli wrote: > On 10/25/18 2:13 PM, Rob Herring wrote: > > On Thu, Oct 25, 2018@12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > >> > >> On Thu, Oct 25, 2018@08:15:15AM -0500, Rob Herring wrote: > >>> +Ard > >>> > >>> On Thu, Oct 25, 2018@4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > >>>> > >>>> On Wed, Oct 24, 2018@02:55:17PM -0500, Rob Herring wrote: > >>>>> On Wed, Oct 24, 2018@2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > >>>>>> > >>>>>> Hi all, > >>>>>> > >>>>>> While investigating why ARM64 required a ton of objects to be rebuilt > >>>>>> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > >>>>>> because we define __early_init_dt_declare_initrd() differently and we do > >>>>>> that in arch/arm64/include/asm/memory.h which gets included by a fair > >>>>>> amount of other header files, and translation units as well. > >>>>> > >>>> I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > >>>> Something like this might be just all we need (completely untested, > >>>> probably it won't even compile): [ ... ] > FWIW, I am extracting the ARM implementation that parses the initrd > early command line parameter and the "setup" code doing the page > boundary alignment and memblock checking into a helper into lib/ that > other architectures can re-use. So far, this removes the need for > unicore32, arc and arm to duplicate essentially the same logic. Presuming you are going to need asm-generic/initrd.h for that as well, using override for __early_init_dt_declare_initrd in arm64 version of initrd.h might be the simplest option. > -- > Florian > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-26 11:07 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-26 11:07 UTC (permalink / raw) To: Florian Fainelli Cc: Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, Rob Herring, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, linux-s390, Marc Zyngier, linux-um, linux-m68k, Openrisc, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-parisc, Ard Biesheuvel, Greg Kroah-Hartman, linux-kernel, linux-alpha, Olof Johansson, nios2-dev, linuxppc-dev On Thu, Oct 25, 2018 at 04:07:13PM -0700, Florian Fainelli wrote: > On 10/25/18 2:13 PM, Rob Herring wrote: > > On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > >> > >> On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > >>> +Ard > >>> > >>> On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > >>>> > >>>> On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > >>>>> On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > >>>>>> > >>>>>> Hi all, > >>>>>> > >>>>>> While investigating why ARM64 required a ton of objects to be rebuilt > >>>>>> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > >>>>>> because we define __early_init_dt_declare_initrd() differently and we do > >>>>>> that in arch/arm64/include/asm/memory.h which gets included by a fair > >>>>>> amount of other header files, and translation units as well. > >>>>> > >>>> I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > >>>> Something like this might be just all we need (completely untested, > >>>> probably it won't even compile): [ ... ] > FWIW, I am extracting the ARM implementation that parses the initrd > early command line parameter and the "setup" code doing the page > boundary alignment and memblock checking into a helper into lib/ that > other architectures can re-use. So far, this removes the need for > unicore32, arc and arm to duplicate essentially the same logic. Presuming you are going to need asm-generic/initrd.h for that as well, using override for __early_init_dt_declare_initrd in arm64 version of initrd.h might be the simplest option. > -- > Florian > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-26 11:07 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-26 11:07 UTC (permalink / raw) To: Florian Fainelli Cc: Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, Rob Herring, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, linux-s390, Marc Zyngier, linux-um, linux-m68k, Openrisc, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-parisc, Ard Biesheuvel, Greg Kroah-Hartman, linux-kernel, linux-alpha, Olof Johansson, nios2-dev, linuxppc-dev On Thu, Oct 25, 2018 at 04:07:13PM -0700, Florian Fainelli wrote: > On 10/25/18 2:13 PM, Rob Herring wrote: > > On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > >> > >> On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > >>> +Ard > >>> > >>> On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > >>>> > >>>> On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > >>>>> On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > >>>>>> > >>>>>> Hi all, > >>>>>> > >>>>>> While investigating why ARM64 required a ton of objects to be rebuilt > >>>>>> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > >>>>>> because we define __early_init_dt_declare_initrd() differently and we do > >>>>>> that in arch/arm64/include/asm/memory.h which gets included by a fair > >>>>>> amount of other header files, and translation units as well. > >>>>> > >>>> I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > >>>> Something like this might be just all we need (completely untested, > >>>> probably it won't even compile): [ ... ] > FWIW, I am extracting the ARM implementation that parses the initrd > early command line parameter and the "setup" code doing the page > boundary alignment and memblock checking into a helper into lib/ that > other architectures can re-use. So far, this removes the need for > unicore32, arc and arm to duplicate essentially the same logic. Presuming you are going to need asm-generic/initrd.h for that as well, using override for __early_init_dt_declare_initrd in arm64 version of initrd.h might be the simplest option. > -- > Florian > -- Sincerely yours, Mike. _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-26 11:07 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-26 11:07 UTC (permalink / raw) To: linux-riscv On Thu, Oct 25, 2018 at 04:07:13PM -0700, Florian Fainelli wrote: > On 10/25/18 2:13 PM, Rob Herring wrote: > > On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > >> > >> On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > >>> +Ard > >>> > >>> On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > >>>> > >>>> On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > >>>>> On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > >>>>>> > >>>>>> Hi all, > >>>>>> > >>>>>> While investigating why ARM64 required a ton of objects to be rebuilt > >>>>>> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > >>>>>> because we define __early_init_dt_declare_initrd() differently and we do > >>>>>> that in arch/arm64/include/asm/memory.h which gets included by a fair > >>>>>> amount of other header files, and translation units as well. > >>>>> > >>>> I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > >>>> Something like this might be just all we need (completely untested, > >>>> probably it won't even compile): [ ... ] > FWIW, I am extracting the ARM implementation that parses the initrd > early command line parameter and the "setup" code doing the page > boundary alignment and memblock checking into a helper into lib/ that > other architectures can re-use. So far, this removes the need for > unicore32, arc and arm to duplicate essentially the same logic. Presuming you are going to need asm-generic/initrd.h for that as well, using override for __early_init_dt_declare_initrd in arm64 version of initrd.h might be the simplest option. > -- > Florian > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-26 11:07 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-26 11:07 UTC (permalink / raw) To: Florian Fainelli Cc: Rob Herring, Ard Biesheuvel, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS On Thu, Oct 25, 2018 at 04:07:13PM -0700, Florian Fainelli wrote: > On 10/25/18 2:13 PM, Rob Herring wrote: > > On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > >> > >> On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > >>> +Ard > >>> > >>> On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > >>>> > >>>> On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > >>>>> On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > >>>>>> > >>>>>> Hi all, > >>>>>> > >>>>>> While investigating why ARM64 required a ton of objects to be rebuilt > >>>>>> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > >>>>>> because we define __early_init_dt_declare_initrd() differently and we do > >>>>>> that in arch/arm64/include/asm/memory.h which gets included by a fair > >>>>>> amount of other header files, and translation units as well. > >>>>> > >>>> I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > >>>> Something like this might be just all we need (completely untested, > >>>> probably it won't even compile): [ ... ] > FWIW, I am extracting the ARM implementation that parses the initrd > early command line parameter and the "setup" code doing the page > boundary alignment and memblock checking into a helper into lib/ that > other architectures can re-use. So far, this removes the need for > unicore32, arc and arm to duplicate essentially the same logic. Presuming you are going to need asm-generic/initrd.h for that as well, using override for __early_init_dt_declare_initrd in arm64 version of initrd.h might be the simplest option. > -- > Florian > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-26 11:07 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-26 11:07 UTC (permalink / raw) To: Florian Fainelli Cc: Rob Herring, Ard Biesheuvel, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev, Openrisc, linux-parisc, linuxppc-dev, linux-riscv, linux-s390, SH-Linux, sparclinux, linux-um, linux-xtensa, devicetree, open list:GENERIC INCLUDE/ASM HEADER FILES On Thu, Oct 25, 2018 at 04:07:13PM -0700, Florian Fainelli wrote: > On 10/25/18 2:13 PM, Rob Herring wrote: > > On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > >> > >> On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > >>> +Ard > >>> > >>> On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > >>>> > >>>> On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > >>>>> On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > >>>>>> > >>>>>> Hi all, > >>>>>> > >>>>>> While investigating why ARM64 required a ton of objects to be rebuilt > >>>>>> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > >>>>>> because we define __early_init_dt_declare_initrd() differently and we do > >>>>>> that in arch/arm64/include/asm/memory.h which gets included by a fair > >>>>>> amount of other header files, and translation units as well. > >>>>> > >>>> I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > >>>> Something like this might be just all we need (completely untested, > >>>> probably it won't even compile): [ ... ] > FWIW, I am extracting the ARM implementation that parses the initrd > early command line parameter and the "setup" code doing the page > boundary alignment and memblock checking into a helper into lib/ that > other architectures can re-use. So far, this removes the need for > unicore32, arc and arm to duplicate essentially the same logic. Presuming you are going to need asm-generic/initrd.h for that as well, using override for __early_init_dt_declare_initrd in arm64 version of initrd.h might be the simplest option. > -- > Florian > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-26 11:07 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-26 11:07 UTC (permalink / raw) To: Florian Fainelli Cc: Rob Herring, Ard Biesheuvel, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev, Openrisc, linux-parisc, linuxppc-dev, linux-riscv, linux-s390, SH-Linux, sparclinux, linux-um, linux-xtensa, devicetree, open list:GENERIC INCLUDE/ASM HEADER FILES On Thu, Oct 25, 2018 at 04:07:13PM -0700, Florian Fainelli wrote: > On 10/25/18 2:13 PM, Rob Herring wrote: > > On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > >> > >> On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > >>> +Ard > >>> > >>> On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > >>>> > >>>> On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > >>>>> On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > >>>>>> > >>>>>> Hi all, > >>>>>> > >>>>>> While investigating why ARM64 required a ton of objects to be rebuilt > >>>>>> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > >>>>>> because we define __early_init_dt_declare_initrd() differently and we do > >>>>>> that in arch/arm64/include/asm/memory.h which gets included by a fair > >>>>>> amount of other header files, and translation units as well. > >>>>> > >>>> I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > >>>> Something like this might be just all we need (completely untested, > >>>> probably it won't even compile): [ ... ] > FWIW, I am extracting the ARM implementation that parses the initrd > early command line parameter and the "setup" code doing the page > boundary alignment and memblock checking into a helper into lib/ that > other architectures can re-use. So far, this removes the need for > unicore32, arc and arm to duplicate essentially the same logic. Presuming you are going to need asm-generic/initrd.h for that as well, using override for __early_init_dt_declare_initrd in arm64 version of initrd.h might be the simplest option. > -- > Florian > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-26 11:07 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-26 11:07 UTC (permalink / raw) To: Florian Fainelli Cc: Rob Herring, Ard Biesheuvel, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS On Thu, Oct 25, 2018 at 04:07:13PM -0700, Florian Fainelli wrote: > On 10/25/18 2:13 PM, Rob Herring wrote: > > On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > >> > >> On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > >>> +Ard > >>> > >>> On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > >>>> > >>>> On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > >>>>> On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > >>>>>> > >>>>>> Hi all, > >>>>>> > >>>>>> While investigating why ARM64 required a ton of objects to be rebuilt > >>>>>> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > >>>>>> because we define __early_init_dt_declare_initrd() differently and we do > >>>>>> that in arch/arm64/include/asm/memory.h which gets included by a fair > >>>>>> amount of other header files, and translation units as well. > >>>>> > >>>> I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > >>>> Something like this might be just all we need (completely untested, > >>>> probably it won't even compile): [ ... ] > FWIW, I am extracting the ARM implementation that parses the initrd > early command line parameter and the "setup" code doing the page > boundary alignment and memblock checking into a helper into lib/ that > other architectures can re-use. So far, this removes the need for > unicore32, arc and arm to duplicate essentially the same logic. Presuming you are going to need asm-generic/initrd.h for that as well, using override for __early_init_dt_declare_initrd in arm64 version of initrd.h might be the simplest option. > -- > Florian > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD 2018-10-26 11:07 ` Mike Rapoport ` (8 preceding siblings ...) (?) @ 2018-10-26 19:05 ` Florian Fainelli -1 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-26 19:05 UTC (permalink / raw) To: Mike Rapoport Cc: Rob Herring, Ard Biesheuvel, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS On 10/26/18 4:07 AM, Mike Rapoport wrote: > On Thu, Oct 25, 2018 at 04:07:13PM -0700, Florian Fainelli wrote: >> On 10/25/18 2:13 PM, Rob Herring wrote: >>> On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: >>>> >>>> On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: >>>>> +Ard >>>>> >>>>> On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: >>>>>> >>>>>> On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: >>>>>>> On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >>>>>>>> >>>>>>>> Hi all, >>>>>>>> >>>>>>>> While investigating why ARM64 required a ton of objects to be rebuilt >>>>>>>> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was >>>>>>>> because we define __early_init_dt_declare_initrd() differently and we do >>>>>>>> that in arch/arm64/include/asm/memory.h which gets included by a fair >>>>>>>> amount of other header files, and translation units as well. >>>>>>> >>>>>> I think arm64 does not have to redefine __early_init_dt_declare_initrd(). >>>>>> Something like this might be just all we need (completely untested, >>>>>> probably it won't even compile): > > [ ... ] > >> FWIW, I am extracting the ARM implementation that parses the initrd >> early command line parameter and the "setup" code doing the page >> boundary alignment and memblock checking into a helper into lib/ that >> other architectures can re-use. So far, this removes the need for >> unicore32, arc and arm to duplicate essentially the same logic. > > Presuming you are going to need asm-generic/initrd.h for that as well, > using override for __early_init_dt_declare_initrd in arm64 version of > initrd.h might be the simplest option. What I am contemplating doing is promote phys_initrd_start/phys_initrd_size to be global variables (similar to initrd_start, initrd_end) and have a generic helper function for parsing the initrd= command line parameter and finally removing __early_init_dt_declare_initrd() because we could have early_init_dt_check_for_initrd() just populate phys_initrd_start/phys_initrd_size directly as well as initrd_start/initrd_end using __va() to preserve compatibility with architectures that rely on this. Then I would convert ARM64 to check for phys_initrd_start which is really what it is is trying to do in arch/arm64/mm/init.c::arm64_memblock_init(). Does that sound like a reasonable approach? -- Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* [OpenRISC] [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-26 19:05 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-26 19:05 UTC (permalink / raw) To: openrisc On 10/26/18 4:07 AM, Mike Rapoport wrote: > On Thu, Oct 25, 2018 at 04:07:13PM -0700, Florian Fainelli wrote: >> On 10/25/18 2:13 PM, Rob Herring wrote: >>> On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: >>>> >>>> On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: >>>>> +Ard >>>>> >>>>> On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: >>>>>> >>>>>> On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: >>>>>>> On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >>>>>>>> >>>>>>>> Hi all, >>>>>>>> >>>>>>>> While investigating why ARM64 required a ton of objects to be rebuilt >>>>>>>> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was >>>>>>>> because we define __early_init_dt_declare_initrd() differently and we do >>>>>>>> that in arch/arm64/include/asm/memory.h which gets included by a fair >>>>>>>> amount of other header files, and translation units as well. >>>>>>> >>>>>> I think arm64 does not have to redefine __early_init_dt_declare_initrd(). >>>>>> Something like this might be just all we need (completely untested, >>>>>> probably it won't even compile): > > [ ... ] > >> FWIW, I am extracting the ARM implementation that parses the initrd >> early command line parameter and the "setup" code doing the page >> boundary alignment and memblock checking into a helper into lib/ that >> other architectures can re-use. So far, this removes the need for >> unicore32, arc and arm to duplicate essentially the same logic. > > Presuming you are going to need asm-generic/initrd.h for that as well, > using override for __early_init_dt_declare_initrd in arm64 version of > initrd.h might be the simplest option. What I am contemplating doing is promote phys_initrd_start/phys_initrd_size to be global variables (similar to initrd_start, initrd_end) and have a generic helper function for parsing the initrd= command line parameter and finally removing __early_init_dt_declare_initrd() because we could have early_init_dt_check_for_initrd() just populate phys_initrd_start/phys_initrd_size directly as well as initrd_start/initrd_end using __va() to preserve compatibility with architectures that rely on this. Then I would convert ARM64 to check for phys_initrd_start which is really what it is is trying to do in arch/arm64/mm/init.c::arm64_memblock_init(). Does that sound like a reasonable approach? -- Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-26 19:05 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-26 19:05 UTC (permalink / raw) To: linux-arm-kernel On 10/26/18 4:07 AM, Mike Rapoport wrote: > On Thu, Oct 25, 2018 at 04:07:13PM -0700, Florian Fainelli wrote: >> On 10/25/18 2:13 PM, Rob Herring wrote: >>> On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: >>>> >>>> On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: >>>>> +Ard >>>>> >>>>> On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: >>>>>> >>>>>> On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: >>>>>>> On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >>>>>>>> >>>>>>>> Hi all, >>>>>>>> >>>>>>>> While investigating why ARM64 required a ton of objects to be rebuilt >>>>>>>> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was >>>>>>>> because we define __early_init_dt_declare_initrd() differently and we do >>>>>>>> that in arch/arm64/include/asm/memory.h which gets included by a fair >>>>>>>> amount of other header files, and translation units as well. >>>>>>> >>>>>> I think arm64 does not have to redefine __early_init_dt_declare_initrd(). >>>>>> Something like this might be just all we need (completely untested, >>>>>> probably it won't even compile): > > [ ... ] > >> FWIW, I am extracting the ARM implementation that parses the initrd >> early command line parameter and the "setup" code doing the page >> boundary alignment and memblock checking into a helper into lib/ that >> other architectures can re-use. So far, this removes the need for >> unicore32, arc and arm to duplicate essentially the same logic. > > Presuming you are going to need asm-generic/initrd.h for that as well, > using override for __early_init_dt_declare_initrd in arm64 version of > initrd.h might be the simplest option. What I am contemplating doing is promote phys_initrd_start/phys_initrd_size to be global variables (similar to initrd_start, initrd_end) and have a generic helper function for parsing the initrd= command line parameter and finally removing __early_init_dt_declare_initrd() because we could have early_init_dt_check_for_initrd() just populate phys_initrd_start/phys_initrd_size directly as well as initrd_start/initrd_end using __va() to preserve compatibility with architectures that rely on this. Then I would convert ARM64 to check for phys_initrd_start which is really what it is is trying to do in arch/arm64/mm/init.c::arm64_memblock_init(). Does that sound like a reasonable approach? -- Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-26 19:05 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-26 19:05 UTC (permalink / raw) To: linux-snps-arc On 10/26/18 4:07 AM, Mike Rapoport wrote: > On Thu, Oct 25, 2018@04:07:13PM -0700, Florian Fainelli wrote: >> On 10/25/18 2:13 PM, Rob Herring wrote: >>> On Thu, Oct 25, 2018@12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: >>>> >>>> On Thu, Oct 25, 2018@08:15:15AM -0500, Rob Herring wrote: >>>>> +Ard >>>>> >>>>> On Thu, Oct 25, 2018@4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: >>>>>> >>>>>> On Wed, Oct 24, 2018@02:55:17PM -0500, Rob Herring wrote: >>>>>>> On Wed, Oct 24, 2018@2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >>>>>>>> >>>>>>>> Hi all, >>>>>>>> >>>>>>>> While investigating why ARM64 required a ton of objects to be rebuilt >>>>>>>> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was >>>>>>>> because we define __early_init_dt_declare_initrd() differently and we do >>>>>>>> that in arch/arm64/include/asm/memory.h which gets included by a fair >>>>>>>> amount of other header files, and translation units as well. >>>>>>> >>>>>> I think arm64 does not have to redefine __early_init_dt_declare_initrd(). >>>>>> Something like this might be just all we need (completely untested, >>>>>> probably it won't even compile): > > [ ... ] > >> FWIW, I am extracting the ARM implementation that parses the initrd >> early command line parameter and the "setup" code doing the page >> boundary alignment and memblock checking into a helper into lib/ that >> other architectures can re-use. So far, this removes the need for >> unicore32, arc and arm to duplicate essentially the same logic. > > Presuming you are going to need asm-generic/initrd.h for that as well, > using override for __early_init_dt_declare_initrd in arm64 version of > initrd.h might be the simplest option. What I am contemplating doing is promote phys_initrd_start/phys_initrd_size to be global variables (similar to initrd_start, initrd_end) and have a generic helper function for parsing the initrd= command line parameter and finally removing __early_init_dt_declare_initrd() because we could have early_init_dt_check_for_initrd() just populate phys_initrd_start/phys_initrd_size directly as well as initrd_start/initrd_end using __va() to preserve compatibility with architectures that rely on this. Then I would convert ARM64 to check for phys_initrd_start which is really what it is is trying to do in arch/arm64/mm/init.c::arm64_memblock_init(). Does that sound like a reasonable approach? -- Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-26 19:05 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-26 19:05 UTC (permalink / raw) To: Mike Rapoport Cc: Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, Rob Herring, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, linux-s390, Marc Zyngier, linux-um, linux-m68k, Openrisc, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-parisc, Ard Biesheuvel, Greg Kroah-Hartman, linux-kernel, linux-alpha, Olof Johansson, nios2-dev, linuxppc-dev On 10/26/18 4:07 AM, Mike Rapoport wrote: > On Thu, Oct 25, 2018 at 04:07:13PM -0700, Florian Fainelli wrote: >> On 10/25/18 2:13 PM, Rob Herring wrote: >>> On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: >>>> >>>> On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: >>>>> +Ard >>>>> >>>>> On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: >>>>>> >>>>>> On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: >>>>>>> On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >>>>>>>> >>>>>>>> Hi all, >>>>>>>> >>>>>>>> While investigating why ARM64 required a ton of objects to be rebuilt >>>>>>>> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was >>>>>>>> because we define __early_init_dt_declare_initrd() differently and we do >>>>>>>> that in arch/arm64/include/asm/memory.h which gets included by a fair >>>>>>>> amount of other header files, and translation units as well. >>>>>>> >>>>>> I think arm64 does not have to redefine __early_init_dt_declare_initrd(). >>>>>> Something like this might be just all we need (completely untested, >>>>>> probably it won't even compile): > > [ ... ] > >> FWIW, I am extracting the ARM implementation that parses the initrd >> early command line parameter and the "setup" code doing the page >> boundary alignment and memblock checking into a helper into lib/ that >> other architectures can re-use. So far, this removes the need for >> unicore32, arc and arm to duplicate essentially the same logic. > > Presuming you are going to need asm-generic/initrd.h for that as well, > using override for __early_init_dt_declare_initrd in arm64 version of > initrd.h might be the simplest option. What I am contemplating doing is promote phys_initrd_start/phys_initrd_size to be global variables (similar to initrd_start, initrd_end) and have a generic helper function for parsing the initrd= command line parameter and finally removing __early_init_dt_declare_initrd() because we could have early_init_dt_check_for_initrd() just populate phys_initrd_start/phys_initrd_size directly as well as initrd_start/initrd_end using __va() to preserve compatibility with architectures that rely on this. Then I would convert ARM64 to check for phys_initrd_start which is really what it is is trying to do in arch/arm64/mm/init.c::arm64_memblock_init(). Does that sound like a reasonable approach? -- Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-26 19:05 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-26 19:05 UTC (permalink / raw) To: Mike Rapoport Cc: Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, Rob Herring, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, linux-s390, Marc Zyngier, linux-um, linux-m68k, Openrisc, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-parisc, Ard Biesheuvel, Greg Kroah-Hartman, linux-kernel, linux-alpha, Olof Johansson, nios2-dev, linuxppc-dev On 10/26/18 4:07 AM, Mike Rapoport wrote: > On Thu, Oct 25, 2018 at 04:07:13PM -0700, Florian Fainelli wrote: >> On 10/25/18 2:13 PM, Rob Herring wrote: >>> On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: >>>> >>>> On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: >>>>> +Ard >>>>> >>>>> On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: >>>>>> >>>>>> On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: >>>>>>> On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >>>>>>>> >>>>>>>> Hi all, >>>>>>>> >>>>>>>> While investigating why ARM64 required a ton of objects to be rebuilt >>>>>>>> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was >>>>>>>> because we define __early_init_dt_declare_initrd() differently and we do >>>>>>>> that in arch/arm64/include/asm/memory.h which gets included by a fair >>>>>>>> amount of other header files, and translation units as well. >>>>>>> >>>>>> I think arm64 does not have to redefine __early_init_dt_declare_initrd(). >>>>>> Something like this might be just all we need (completely untested, >>>>>> probably it won't even compile): > > [ ... ] > >> FWIW, I am extracting the ARM implementation that parses the initrd >> early command line parameter and the "setup" code doing the page >> boundary alignment and memblock checking into a helper into lib/ that >> other architectures can re-use. So far, this removes the need for >> unicore32, arc and arm to duplicate essentially the same logic. > > Presuming you are going to need asm-generic/initrd.h for that as well, > using override for __early_init_dt_declare_initrd in arm64 version of > initrd.h might be the simplest option. What I am contemplating doing is promote phys_initrd_start/phys_initrd_size to be global variables (similar to initrd_start, initrd_end) and have a generic helper function for parsing the initrd= command line parameter and finally removing __early_init_dt_declare_initrd() because we could have early_init_dt_check_for_initrd() just populate phys_initrd_start/phys_initrd_size directly as well as initrd_start/initrd_end using __va() to preserve compatibility with architectures that rely on this. Then I would convert ARM64 to check for phys_initrd_start which is really what it is is trying to do in arch/arm64/mm/init.c::arm64_memblock_init(). Does that sound like a reasonable approach? -- Florian _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-26 19:05 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-26 19:05 UTC (permalink / raw) To: linux-riscv On 10/26/18 4:07 AM, Mike Rapoport wrote: > On Thu, Oct 25, 2018 at 04:07:13PM -0700, Florian Fainelli wrote: >> On 10/25/18 2:13 PM, Rob Herring wrote: >>> On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: >>>> >>>> On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: >>>>> +Ard >>>>> >>>>> On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: >>>>>> >>>>>> On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: >>>>>>> On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >>>>>>>> >>>>>>>> Hi all, >>>>>>>> >>>>>>>> While investigating why ARM64 required a ton of objects to be rebuilt >>>>>>>> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was >>>>>>>> because we define __early_init_dt_declare_initrd() differently and we do >>>>>>>> that in arch/arm64/include/asm/memory.h which gets included by a fair >>>>>>>> amount of other header files, and translation units as well. >>>>>>> >>>>>> I think arm64 does not have to redefine __early_init_dt_declare_initrd(). >>>>>> Something like this might be just all we need (completely untested, >>>>>> probably it won't even compile): > > [ ... ] > >> FWIW, I am extracting the ARM implementation that parses the initrd >> early command line parameter and the "setup" code doing the page >> boundary alignment and memblock checking into a helper into lib/ that >> other architectures can re-use. So far, this removes the need for >> unicore32, arc and arm to duplicate essentially the same logic. > > Presuming you are going to need asm-generic/initrd.h for that as well, > using override for __early_init_dt_declare_initrd in arm64 version of > initrd.h might be the simplest option. What I am contemplating doing is promote phys_initrd_start/phys_initrd_size to be global variables (similar to initrd_start, initrd_end) and have a generic helper function for parsing the initrd= command line parameter and finally removing __early_init_dt_declare_initrd() because we could have early_init_dt_check_for_initrd() just populate phys_initrd_start/phys_initrd_size directly as well as initrd_start/initrd_end using __va() to preserve compatibility with architectures that rely on this. Then I would convert ARM64 to check for phys_initrd_start which is really what it is is trying to do in arch/arm64/mm/init.c::arm64_memblock_init(). Does that sound like a reasonable approach? -- Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-26 19:05 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-26 19:05 UTC (permalink / raw) To: Mike Rapoport Cc: Rob Herring, Ard Biesheuvel, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev, Openrisc, linux-parisc, linuxppc-dev, linux-riscv, linux-s390, SH-Linux, sparclinux, linux-um, linux-xtensa, devicetree, open list:GENERIC INCLUDE/ASM HEADER FILES On 10/26/18 4:07 AM, Mike Rapoport wrote: > On Thu, Oct 25, 2018 at 04:07:13PM -0700, Florian Fainelli wrote: >> On 10/25/18 2:13 PM, Rob Herring wrote: >>> On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: >>>> >>>> On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: >>>>> +Ard >>>>> >>>>> On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: >>>>>> >>>>>> On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: >>>>>>> On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >>>>>>>> >>>>>>>> Hi all, >>>>>>>> >>>>>>>> While investigating why ARM64 required a ton of objects to be rebuilt >>>>>>>> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was >>>>>>>> because we define __early_init_dt_declare_initrd() differently and we do >>>>>>>> that in arch/arm64/include/asm/memory.h which gets included by a fair >>>>>>>> amount of other header files, and translation units as well. >>>>>>> >>>>>> I think arm64 does not have to redefine __early_init_dt_declare_initrd(). >>>>>> Something like this might be just all we need (completely untested, >>>>>> probably it won't even compile): > > [ ... ] > >> FWIW, I am extracting the ARM implementation that parses the initrd >> early command line parameter and the "setup" code doing the page >> boundary alignment and memblock checking into a helper into lib/ that >> other architectures can re-use. So far, this removes the need for >> unicore32, arc and arm to duplicate essentially the same logic. > > Presuming you are going to need asm-generic/initrd.h for that as well, > using override for __early_init_dt_declare_initrd in arm64 version of > initrd.h might be the simplest option. What I am contemplating doing is promote phys_initrd_start/phys_initrd_size to be global variables (similar to initrd_start, initrd_end) and have a generic helper function for parsing the initrd= command line parameter and finally removing __early_init_dt_declare_initrd() because we could have early_init_dt_check_for_initrd() just populate phys_initrd_start/phys_initrd_size directly as well as initrd_start/initrd_end using __va() to preserve compatibility with architectures that rely on this. Then I would convert ARM64 to check for phys_initrd_start which is really what it is is trying to do in arch/arm64/mm/init.c::arm64_memblock_init(). Does that sound like a reasonable approach? -- Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-26 19:05 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-26 19:05 UTC (permalink / raw) To: Mike Rapoport Cc: Rob Herring, Ard Biesheuvel, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS On 10/26/18 4:07 AM, Mike Rapoport wrote: > On Thu, Oct 25, 2018 at 04:07:13PM -0700, Florian Fainelli wrote: >> On 10/25/18 2:13 PM, Rob Herring wrote: >>> On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: >>>> >>>> On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: >>>>> +Ard >>>>> >>>>> On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: >>>>>> >>>>>> On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: >>>>>>> On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >>>>>>>> >>>>>>>> Hi all, >>>>>>>> >>>>>>>> While investigating why ARM64 required a ton of objects to be rebuilt >>>>>>>> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was >>>>>>>> because we define __early_init_dt_declare_initrd() differently and we do >>>>>>>> that in arch/arm64/include/asm/memory.h which gets included by a fair >>>>>>>> amount of other header files, and translation units as well. >>>>>>> >>>>>> I think arm64 does not have to redefine __early_init_dt_declare_initrd(). >>>>>> Something like this might be just all we need (completely untested, >>>>>> probably it won't even compile): > > [ ... ] > >> FWIW, I am extracting the ARM implementation that parses the initrd >> early command line parameter and the "setup" code doing the page >> boundary alignment and memblock checking into a helper into lib/ that >> other architectures can re-use. So far, this removes the need for >> unicore32, arc and arm to duplicate essentially the same logic. > > Presuming you are going to need asm-generic/initrd.h for that as well, > using override for __early_init_dt_declare_initrd in arm64 version of > initrd.h might be the simplest option. What I am contemplating doing is promote phys_initrd_start/phys_initrd_size to be global variables (similar to initrd_start, initrd_end) and have a generic helper function for parsing the initrd= command line parameter and finally removing __early_init_dt_declare_initrd() because we could have early_init_dt_check_for_initrd() just populate phys_initrd_start/phys_initrd_size directly as well as initrd_start/initrd_end using __va() to preserve compatibility with architectures that rely on this. Then I would convert ARM64 to check for phys_initrd_start which is really what it is is trying to do in arch/arm64/mm/init.c::arm64_memblock_init(). Does that sound like a reasonable approach? -- Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-26 19:05 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-26 19:05 UTC (permalink / raw) To: Mike Rapoport Cc: Rob Herring, Ard Biesheuvel, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev, Openrisc, linux-parisc, linuxppc-dev, linux-riscv, linux-s390, SH-Linux, sparclinux, linux-um, linux-xtensa, devicetree, open list:GENERIC INCLUDE/ASM HEADER FILES On 10/26/18 4:07 AM, Mike Rapoport wrote: > On Thu, Oct 25, 2018 at 04:07:13PM -0700, Florian Fainelli wrote: >> On 10/25/18 2:13 PM, Rob Herring wrote: >>> On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: >>>> >>>> On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: >>>>> +Ard >>>>> >>>>> On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: >>>>>> >>>>>> On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: >>>>>>> On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >>>>>>>> >>>>>>>> Hi all, >>>>>>>> >>>>>>>> While investigating why ARM64 required a ton of objects to be rebuilt >>>>>>>> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was >>>>>>>> because we define __early_init_dt_declare_initrd() differently and we do >>>>>>>> that in arch/arm64/include/asm/memory.h which gets included by a fair >>>>>>>> amount of other header files, and translation units as well. >>>>>>> >>>>>> I think arm64 does not have to redefine __early_init_dt_declare_initrd(). >>>>>> Something like this might be just all we need (completely untested, >>>>>> probably it won't even compile): > > [ ... ] > >> FWIW, I am extracting the ARM implementation that parses the initrd >> early command line parameter and the "setup" code doing the page >> boundary alignment and memblock checking into a helper into lib/ that >> other architectures can re-use. So far, this removes the need for >> unicore32, arc and arm to duplicate essentially the same logic. > > Presuming you are going to need asm-generic/initrd.h for that as well, > using override for __early_init_dt_declare_initrd in arm64 version of > initrd.h might be the simplest option. What I am contemplating doing is promote phys_initrd_start/phys_initrd_size to be global variables (similar to initrd_start, initrd_end) and have a generic helper function for parsing the initrd= command line parameter and finally removing __early_init_dt_declare_initrd() because we could have early_init_dt_check_for_initrd() just populate phys_initrd_start/phys_initrd_size directly as well as initrd_start/initrd_end using __va() to preserve compatibility with architectures that rely on this. Then I would convert ARM64 to check for phys_initrd_start which is really what it is is trying to do in arch/arm64/mm/init.c::arm64_memblock_init(). Does that sound like a reasonable approach? -- Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-26 19:05 ` Florian Fainelli 0 siblings, 0 replies; 168+ messages in thread From: Florian Fainelli @ 2018-10-26 19:05 UTC (permalink / raw) To: Mike Rapoport Cc: Rob Herring, Ard Biesheuvel, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS On 10/26/18 4:07 AM, Mike Rapoport wrote: > On Thu, Oct 25, 2018 at 04:07:13PM -0700, Florian Fainelli wrote: >> On 10/25/18 2:13 PM, Rob Herring wrote: >>> On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: >>>> >>>> On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: >>>>> +Ard >>>>> >>>>> On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: >>>>>> >>>>>> On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: >>>>>>> On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: >>>>>>>> >>>>>>>> Hi all, >>>>>>>> >>>>>>>> While investigating why ARM64 required a ton of objects to be rebuilt >>>>>>>> when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was >>>>>>>> because we define __early_init_dt_declare_initrd() differently and we do >>>>>>>> that in arch/arm64/include/asm/memory.h which gets included by a fair >>>>>>>> amount of other header files, and translation units as well. >>>>>>> >>>>>> I think arm64 does not have to redefine __early_init_dt_declare_initrd(). >>>>>> Something like this might be just all we need (completely untested, >>>>>> probably it won't even compile): > > [ ... ] > >> FWIW, I am extracting the ARM implementation that parses the initrd >> early command line parameter and the "setup" code doing the page >> boundary alignment and memblock checking into a helper into lib/ that >> other architectures can re-use. So far, this removes the need for >> unicore32, arc and arm to duplicate essentially the same logic. > > Presuming you are going to need asm-generic/initrd.h for that as well, > using override for __early_init_dt_declare_initrd in arm64 version of > initrd.h might be the simplest option. What I am contemplating doing is promote phys_initrd_start/phys_initrd_size to be global variables (similar to initrd_start, initrd_end) and have a generic helper function for parsing the initrd= command line parameter and finally removing __early_init_dt_declare_initrd() because we could have early_init_dt_check_for_initrd() just populate phys_initrd_start/phys_initrd_size directly as well as initrd_start/initrd_end using __va() to preserve compatibility with architectures that rely on this. Then I would convert ARM64 to check for phys_initrd_start which is really what it is is trying to do in arch/arm64/mm/init.c::arm64_memblock_init(). Does that sound like a reasonable approach? -- Florian ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD 2018-10-25 21:13 ` Rob Herring ` (9 preceding siblings ...) (?) @ 2018-10-26 8:12 ` Mike Rapoport -1 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-26 8:12 UTC (permalink / raw) To: Rob Herring Cc: Ard Biesheuvel, Florian Fainelli, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k On Thu, Oct 25, 2018 at 04:13:10PM -0500, Rob Herring wrote: > On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > > > +Ard > > > > > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > > > > > Hi all, > > > > > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > > > amount of other header files, and translation units as well. > > > > > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > > > much stuff. One down, ? to go. :) > > > > > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > > > systems that generate two kernels: one with the initramfs and one > > > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > > > another one that does this. > > > > > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > > > custom __early_init_dt_declare_initrd() definition away from > > > > > > asm/memory.h > > > > > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > > > factor 73 approximately. > > > > > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > > > about merging that and if another approach would be preferable, e.g: > > > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > > > something like that. > > > > > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > > > only memblock is used. This should unify what each arch needs to do > > > > > with initrd early. We need the physical address early for memblock > > > > > reserving. Then later on we need the virtual address to access the > > > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > > > physical addresses (or add 2 new variables would be less invasive and > > > > > allow for different translation than __va()). The sanity checks and > > > > > memblock reserve could also perhaps be moved to a common location. > > > > > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > > > it like the above option. > > > > > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > > > Something like this might be just all we need (completely untested, > > > > probably it won't even compile): > > > > > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > > > index 9d9582c..e9ca238 100644 > > > > --- a/arch/arm64/mm/init.c > > > > +++ b/arch/arm64/mm/init.c > > > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > > > > > #ifdef CONFIG_BLK_DEV_INITRD > > > > + > > > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > > > + > > > > static int __init early_initrd(char *p) > > > > { > > > > unsigned long start, size; > > > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > > > if (*endp = ',') { > > > > size = memparse(endp + 1, NULL); > > > > > > > > - initrd_start = start; > > > > - initrd_end = start + size; > > > > + initrd_start_phys = start; > > > > + initrd_end_phys = end; > > > > } > > > > return 0; > > > > } > > > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > > > } > > > > > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > > > + (initrd_start || initrd_start_phys)) { > > > > + /* > > > > + * FIXME: ensure proper precendence between > > > > + * early_initrd and DT when both are present > > > > > > Command line takes precedence, so just reverse the order. > > > > > > > + */ > > > > + if (initrd_start) { > > > > + initrd_start_phys = __phys_to_virt(initrd_start); > > > > + initrd_end_phys = __phys_to_virt(initrd_end); > > BTW, I think you meant virt_to_phys() here? Right, and then there is no problem at all do the conversion here :) > > > > > > AIUI, the original issue was doing the P2V translation was happening > > > too early and the VA could be wrong if the linear range is adjusted. > > > So I don't think this would work. > > > > Probably things have changed since then, but in the current code there is > > > > initrd_start = __phys_to_virt(initrd_start); > > > > and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe > > it's safe to use __phys_to_virt() here as well. > > Here is fine yes, but I believe it was the the phys to virt in the DT > code before adjusting the linear range that was the problem. > > Rob > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-26 8:12 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-26 8:12 UTC (permalink / raw) To: Rob Herring Cc: Ard Biesheuvel, Florian Fainelli, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS On Thu, Oct 25, 2018 at 04:13:10PM -0500, Rob Herring wrote: > On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > > > +Ard > > > > > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > > > > > Hi all, > > > > > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > > > amount of other header files, and translation units as well. > > > > > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > > > much stuff. One down, ? to go. :) > > > > > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > > > systems that generate two kernels: one with the initramfs and one > > > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > > > another one that does this. > > > > > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > > > custom __early_init_dt_declare_initrd() definition away from > > > > > > asm/memory.h > > > > > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > > > factor 73 approximately. > > > > > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > > > about merging that and if another approach would be preferable, e.g: > > > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > > > something like that. > > > > > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > > > only memblock is used. This should unify what each arch needs to do > > > > > with initrd early. We need the physical address early for memblock > > > > > reserving. Then later on we need the virtual address to access the > > > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > > > physical addresses (or add 2 new variables would be less invasive and > > > > > allow for different translation than __va()). The sanity checks and > > > > > memblock reserve could also perhaps be moved to a common location. > > > > > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > > > it like the above option. > > > > > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > > > Something like this might be just all we need (completely untested, > > > > probably it won't even compile): > > > > > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > > > index 9d9582c..e9ca238 100644 > > > > --- a/arch/arm64/mm/init.c > > > > +++ b/arch/arm64/mm/init.c > > > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > > > > > #ifdef CONFIG_BLK_DEV_INITRD > > > > + > > > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > > > + > > > > static int __init early_initrd(char *p) > > > > { > > > > unsigned long start, size; > > > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > > > if (*endp == ',') { > > > > size = memparse(endp + 1, NULL); > > > > > > > > - initrd_start = start; > > > > - initrd_end = start + size; > > > > + initrd_start_phys = start; > > > > + initrd_end_phys = end; > > > > } > > > > return 0; > > > > } > > > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > > > } > > > > > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > > > + (initrd_start || initrd_start_phys)) { > > > > + /* > > > > + * FIXME: ensure proper precendence between > > > > + * early_initrd and DT when both are present > > > > > > Command line takes precedence, so just reverse the order. > > > > > > > + */ > > > > + if (initrd_start) { > > > > + initrd_start_phys = __phys_to_virt(initrd_start); > > > > + initrd_end_phys = __phys_to_virt(initrd_end); > > BTW, I think you meant virt_to_phys() here? Right, and then there is no problem at all do the conversion here :) > > > > > > AIUI, the original issue was doing the P2V translation was happening > > > too early and the VA could be wrong if the linear range is adjusted. > > > So I don't think this would work. > > > > Probably things have changed since then, but in the current code there is > > > > initrd_start = __phys_to_virt(initrd_start); > > > > and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe > > it's safe to use __phys_to_virt() here as well. > > Here is fine yes, but I believe it was the the phys to virt in the DT > code before adjusting the linear range that was the problem. > > Rob > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 168+ messages in thread
* [OpenRISC] [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-26 8:12 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-26 8:12 UTC (permalink / raw) To: openrisc On Thu, Oct 25, 2018 at 04:13:10PM -0500, Rob Herring wrote: > On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > > > +Ard > > > > > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > > > > > Hi all, > > > > > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > > > amount of other header files, and translation units as well. > > > > > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > > > much stuff. One down, ? to go. :) > > > > > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > > > systems that generate two kernels: one with the initramfs and one > > > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > > > another one that does this. > > > > > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > > > custom __early_init_dt_declare_initrd() definition away from > > > > > > asm/memory.h > > > > > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > > > factor 73 approximately. > > > > > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > > > about merging that and if another approach would be preferable, e.g: > > > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > > > something like that. > > > > > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > > > only memblock is used. This should unify what each arch needs to do > > > > > with initrd early. We need the physical address early for memblock > > > > > reserving. Then later on we need the virtual address to access the > > > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > > > physical addresses (or add 2 new variables would be less invasive and > > > > > allow for different translation than __va()). The sanity checks and > > > > > memblock reserve could also perhaps be moved to a common location. > > > > > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > > > it like the above option. > > > > > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > > > Something like this might be just all we need (completely untested, > > > > probably it won't even compile): > > > > > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > > > index 9d9582c..e9ca238 100644 > > > > --- a/arch/arm64/mm/init.c > > > > +++ b/arch/arm64/mm/init.c > > > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > > > > > #ifdef CONFIG_BLK_DEV_INITRD > > > > + > > > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > > > + > > > > static int __init early_initrd(char *p) > > > > { > > > > unsigned long start, size; > > > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > > > if (*endp == ',') { > > > > size = memparse(endp + 1, NULL); > > > > > > > > - initrd_start = start; > > > > - initrd_end = start + size; > > > > + initrd_start_phys = start; > > > > + initrd_end_phys = end; > > > > } > > > > return 0; > > > > } > > > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > > > } > > > > > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > > > + (initrd_start || initrd_start_phys)) { > > > > + /* > > > > + * FIXME: ensure proper precendence between > > > > + * early_initrd and DT when both are present > > > > > > Command line takes precedence, so just reverse the order. > > > > > > > + */ > > > > + if (initrd_start) { > > > > + initrd_start_phys = __phys_to_virt(initrd_start); > > > > + initrd_end_phys = __phys_to_virt(initrd_end); > > BTW, I think you meant virt_to_phys() here? Right, and then there is no problem at all do the conversion here :) > > > > > > AIUI, the original issue was doing the P2V translation was happening > > > too early and the VA could be wrong if the linear range is adjusted. > > > So I don't think this would work. > > > > Probably things have changed since then, but in the current code there is > > > > initrd_start = __phys_to_virt(initrd_start); > > > > and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe > > it's safe to use __phys_to_virt() here as well. > > Here is fine yes, but I believe it was the the phys to virt in the DT > code before adjusting the linear range that was the problem. > > Rob > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-26 8:12 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-26 8:12 UTC (permalink / raw) To: linux-arm-kernel On Thu, Oct 25, 2018 at 04:13:10PM -0500, Rob Herring wrote: > On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > > > +Ard > > > > > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > > > > > Hi all, > > > > > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > > > amount of other header files, and translation units as well. > > > > > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > > > much stuff. One down, ? to go. :) > > > > > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > > > systems that generate two kernels: one with the initramfs and one > > > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > > > another one that does this. > > > > > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > > > custom __early_init_dt_declare_initrd() definition away from > > > > > > asm/memory.h > > > > > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > > > factor 73 approximately. > > > > > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > > > about merging that and if another approach would be preferable, e.g: > > > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > > > something like that. > > > > > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > > > only memblock is used. This should unify what each arch needs to do > > > > > with initrd early. We need the physical address early for memblock > > > > > reserving. Then later on we need the virtual address to access the > > > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > > > physical addresses (or add 2 new variables would be less invasive and > > > > > allow for different translation than __va()). The sanity checks and > > > > > memblock reserve could also perhaps be moved to a common location. > > > > > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > > > it like the above option. > > > > > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > > > Something like this might be just all we need (completely untested, > > > > probably it won't even compile): > > > > > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > > > index 9d9582c..e9ca238 100644 > > > > --- a/arch/arm64/mm/init.c > > > > +++ b/arch/arm64/mm/init.c > > > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > > > > > #ifdef CONFIG_BLK_DEV_INITRD > > > > + > > > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > > > + > > > > static int __init early_initrd(char *p) > > > > { > > > > unsigned long start, size; > > > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > > > if (*endp == ',') { > > > > size = memparse(endp + 1, NULL); > > > > > > > > - initrd_start = start; > > > > - initrd_end = start + size; > > > > + initrd_start_phys = start; > > > > + initrd_end_phys = end; > > > > } > > > > return 0; > > > > } > > > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > > > } > > > > > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > > > + (initrd_start || initrd_start_phys)) { > > > > + /* > > > > + * FIXME: ensure proper precendence between > > > > + * early_initrd and DT when both are present > > > > > > Command line takes precedence, so just reverse the order. > > > > > > > + */ > > > > + if (initrd_start) { > > > > + initrd_start_phys = __phys_to_virt(initrd_start); > > > > + initrd_end_phys = __phys_to_virt(initrd_end); > > BTW, I think you meant virt_to_phys() here? Right, and then there is no problem at all do the conversion here :) > > > > > > AIUI, the original issue was doing the P2V translation was happening > > > too early and the VA could be wrong if the linear range is adjusted. > > > So I don't think this would work. > > > > Probably things have changed since then, but in the current code there is > > > > initrd_start = __phys_to_virt(initrd_start); > > > > and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe > > it's safe to use __phys_to_virt() here as well. > > Here is fine yes, but I believe it was the the phys to virt in the DT > code before adjusting the linear range that was the problem. > > Rob > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-26 8:12 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-26 8:12 UTC (permalink / raw) To: linux-snps-arc On Thu, Oct 25, 2018@04:13:10PM -0500, Rob Herring wrote: > On Thu, Oct 25, 2018@12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > On Thu, Oct 25, 2018@08:15:15AM -0500, Rob Herring wrote: > > > +Ard > > > > > > On Thu, Oct 25, 2018@4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > > > > > On Wed, Oct 24, 2018@02:55:17PM -0500, Rob Herring wrote: > > > > > On Wed, Oct 24, 2018@2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > > > > > Hi all, > > > > > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > > > amount of other header files, and translation units as well. > > > > > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > > > much stuff. One down, ? to go. :) > > > > > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > > > systems that generate two kernels: one with the initramfs and one > > > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > > > another one that does this. > > > > > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > > > custom __early_init_dt_declare_initrd() definition away from > > > > > > asm/memory.h > > > > > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > > > factor 73 approximately. > > > > > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > > > about merging that and if another approach would be preferable, e.g: > > > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > > > something like that. > > > > > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > > > only memblock is used. This should unify what each arch needs to do > > > > > with initrd early. We need the physical address early for memblock > > > > > reserving. Then later on we need the virtual address to access the > > > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > > > physical addresses (or add 2 new variables would be less invasive and > > > > > allow for different translation than __va()). The sanity checks and > > > > > memblock reserve could also perhaps be moved to a common location. > > > > > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > > > it like the above option. > > > > > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > > > Something like this might be just all we need (completely untested, > > > > probably it won't even compile): > > > > > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > > > index 9d9582c..e9ca238 100644 > > > > --- a/arch/arm64/mm/init.c > > > > +++ b/arch/arm64/mm/init.c > > > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > > > > > #ifdef CONFIG_BLK_DEV_INITRD > > > > + > > > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > > > + > > > > static int __init early_initrd(char *p) > > > > { > > > > unsigned long start, size; > > > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > > > if (*endp == ',') { > > > > size = memparse(endp + 1, NULL); > > > > > > > > - initrd_start = start; > > > > - initrd_end = start + size; > > > > + initrd_start_phys = start; > > > > + initrd_end_phys = end; > > > > } > > > > return 0; > > > > } > > > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > > > } > > > > > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > > > + (initrd_start || initrd_start_phys)) { > > > > + /* > > > > + * FIXME: ensure proper precendence between > > > > + * early_initrd and DT when both are present > > > > > > Command line takes precedence, so just reverse the order. > > > > > > > + */ > > > > + if (initrd_start) { > > > > + initrd_start_phys = __phys_to_virt(initrd_start); > > > > + initrd_end_phys = __phys_to_virt(initrd_end); > > BTW, I think you meant virt_to_phys() here? Right, and then there is no problem at all do the conversion here :) > > > > > > AIUI, the original issue was doing the P2V translation was happening > > > too early and the VA could be wrong if the linear range is adjusted. > > > So I don't think this would work. > > > > Probably things have changed since then, but in the current code there is > > > > initrd_start = __phys_to_virt(initrd_start); > > > > and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe > > it's safe to use __phys_to_virt() here as well. > > Here is fine yes, but I believe it was the the phys to virt in the DT > code before adjusting the linear range that was the problem. > > Rob > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-26 8:12 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-26 8:12 UTC (permalink / raw) To: Rob Herring Cc: Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, linux-s390, Florian Fainelli, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, Marc Zyngier, linux-um, linux-m68k, Openrisc, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-parisc, Ard Biesheuvel, Greg Kroah-Hartman, linux-kernel, linux-alpha, Olof Johansson, nios2-dev, linuxppc-dev On Thu, Oct 25, 2018 at 04:13:10PM -0500, Rob Herring wrote: > On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > > > +Ard > > > > > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > > > > > Hi all, > > > > > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > > > amount of other header files, and translation units as well. > > > > > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > > > much stuff. One down, ? to go. :) > > > > > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > > > systems that generate two kernels: one with the initramfs and one > > > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > > > another one that does this. > > > > > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > > > custom __early_init_dt_declare_initrd() definition away from > > > > > > asm/memory.h > > > > > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > > > factor 73 approximately. > > > > > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > > > about merging that and if another approach would be preferable, e.g: > > > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > > > something like that. > > > > > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > > > only memblock is used. This should unify what each arch needs to do > > > > > with initrd early. We need the physical address early for memblock > > > > > reserving. Then later on we need the virtual address to access the > > > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > > > physical addresses (or add 2 new variables would be less invasive and > > > > > allow for different translation than __va()). The sanity checks and > > > > > memblock reserve could also perhaps be moved to a common location. > > > > > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > > > it like the above option. > > > > > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > > > Something like this might be just all we need (completely untested, > > > > probably it won't even compile): > > > > > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > > > index 9d9582c..e9ca238 100644 > > > > --- a/arch/arm64/mm/init.c > > > > +++ b/arch/arm64/mm/init.c > > > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > > > > > #ifdef CONFIG_BLK_DEV_INITRD > > > > + > > > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > > > + > > > > static int __init early_initrd(char *p) > > > > { > > > > unsigned long start, size; > > > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > > > if (*endp == ',') { > > > > size = memparse(endp + 1, NULL); > > > > > > > > - initrd_start = start; > > > > - initrd_end = start + size; > > > > + initrd_start_phys = start; > > > > + initrd_end_phys = end; > > > > } > > > > return 0; > > > > } > > > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > > > } > > > > > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > > > + (initrd_start || initrd_start_phys)) { > > > > + /* > > > > + * FIXME: ensure proper precendence between > > > > + * early_initrd and DT when both are present > > > > > > Command line takes precedence, so just reverse the order. > > > > > > > + */ > > > > + if (initrd_start) { > > > > + initrd_start_phys = __phys_to_virt(initrd_start); > > > > + initrd_end_phys = __phys_to_virt(initrd_end); > > BTW, I think you meant virt_to_phys() here? Right, and then there is no problem at all do the conversion here :) > > > > > > AIUI, the original issue was doing the P2V translation was happening > > > too early and the VA could be wrong if the linear range is adjusted. > > > So I don't think this would work. > > > > Probably things have changed since then, but in the current code there is > > > > initrd_start = __phys_to_virt(initrd_start); > > > > and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe > > it's safe to use __phys_to_virt() here as well. > > Here is fine yes, but I believe it was the the phys to virt in the DT > code before adjusting the linear range that was the problem. > > Rob > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-26 8:12 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-26 8:12 UTC (permalink / raw) To: Rob Herring Cc: Linux-MIPS, linux-ia64, SH-Linux, Catalin Marinas, Will Deacon, devicetree, sparclinux, linux-riscv, open list:GENERIC INCLUDE/ASM HEADER FILES, linux-s390, Florian Fainelli, linux-c6x-dev, linux-hexagon, arcml, moderated list:H8/300 ARCHITECTURE, linux-xtensa, Arnd Bergmann, Marc Zyngier, linux-um, linux-m68k, Openrisc, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-parisc, Ard Biesheuvel, Greg Kroah-Hartman, linux-kernel, linux-alpha, Olof Johansson, nios2-dev, linuxppc-dev On Thu, Oct 25, 2018 at 04:13:10PM -0500, Rob Herring wrote: > On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > > > +Ard > > > > > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > > > > > Hi all, > > > > > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > > > amount of other header files, and translation units as well. > > > > > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > > > much stuff. One down, ? to go. :) > > > > > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > > > systems that generate two kernels: one with the initramfs and one > > > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > > > another one that does this. > > > > > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > > > custom __early_init_dt_declare_initrd() definition away from > > > > > > asm/memory.h > > > > > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > > > factor 73 approximately. > > > > > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > > > about merging that and if another approach would be preferable, e.g: > > > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > > > something like that. > > > > > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > > > only memblock is used. This should unify what each arch needs to do > > > > > with initrd early. We need the physical address early for memblock > > > > > reserving. Then later on we need the virtual address to access the > > > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > > > physical addresses (or add 2 new variables would be less invasive and > > > > > allow for different translation than __va()). The sanity checks and > > > > > memblock reserve could also perhaps be moved to a common location. > > > > > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > > > it like the above option. > > > > > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > > > Something like this might be just all we need (completely untested, > > > > probably it won't even compile): > > > > > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > > > index 9d9582c..e9ca238 100644 > > > > --- a/arch/arm64/mm/init.c > > > > +++ b/arch/arm64/mm/init.c > > > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > > > > > #ifdef CONFIG_BLK_DEV_INITRD > > > > + > > > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > > > + > > > > static int __init early_initrd(char *p) > > > > { > > > > unsigned long start, size; > > > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > > > if (*endp == ',') { > > > > size = memparse(endp + 1, NULL); > > > > > > > > - initrd_start = start; > > > > - initrd_end = start + size; > > > > + initrd_start_phys = start; > > > > + initrd_end_phys = end; > > > > } > > > > return 0; > > > > } > > > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > > > } > > > > > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > > > + (initrd_start || initrd_start_phys)) { > > > > + /* > > > > + * FIXME: ensure proper precendence between > > > > + * early_initrd and DT when both are present > > > > > > Command line takes precedence, so just reverse the order. > > > > > > > + */ > > > > + if (initrd_start) { > > > > + initrd_start_phys = __phys_to_virt(initrd_start); > > > > + initrd_end_phys = __phys_to_virt(initrd_end); > > BTW, I think you meant virt_to_phys() here? Right, and then there is no problem at all do the conversion here :) > > > > > > AIUI, the original issue was doing the P2V translation was happening > > > too early and the VA could be wrong if the linear range is adjusted. > > > So I don't think this would work. > > > > Probably things have changed since then, but in the current code there is > > > > initrd_start = __phys_to_virt(initrd_start); > > > > and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe > > it's safe to use __phys_to_virt() here as well. > > Here is fine yes, but I believe it was the the phys to virt in the DT > code before adjusting the linear range that was the problem. > > Rob > -- Sincerely yours, Mike. _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply [flat|nested] 168+ messages in thread
* [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-26 8:12 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-26 8:12 UTC (permalink / raw) To: linux-riscv On Thu, Oct 25, 2018 at 04:13:10PM -0500, Rob Herring wrote: > On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > > > +Ard > > > > > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > > > > > Hi all, > > > > > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > > > amount of other header files, and translation units as well. > > > > > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > > > much stuff. One down, ? to go. :) > > > > > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > > > systems that generate two kernels: one with the initramfs and one > > > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > > > another one that does this. > > > > > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > > > custom __early_init_dt_declare_initrd() definition away from > > > > > > asm/memory.h > > > > > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > > > factor 73 approximately. > > > > > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > > > about merging that and if another approach would be preferable, e.g: > > > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > > > something like that. > > > > > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > > > only memblock is used. This should unify what each arch needs to do > > > > > with initrd early. We need the physical address early for memblock > > > > > reserving. Then later on we need the virtual address to access the > > > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > > > physical addresses (or add 2 new variables would be less invasive and > > > > > allow for different translation than __va()). The sanity checks and > > > > > memblock reserve could also perhaps be moved to a common location. > > > > > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > > > it like the above option. > > > > > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > > > Something like this might be just all we need (completely untested, > > > > probably it won't even compile): > > > > > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > > > index 9d9582c..e9ca238 100644 > > > > --- a/arch/arm64/mm/init.c > > > > +++ b/arch/arm64/mm/init.c > > > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > > > > > #ifdef CONFIG_BLK_DEV_INITRD > > > > + > > > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > > > + > > > > static int __init early_initrd(char *p) > > > > { > > > > unsigned long start, size; > > > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > > > if (*endp == ',') { > > > > size = memparse(endp + 1, NULL); > > > > > > > > - initrd_start = start; > > > > - initrd_end = start + size; > > > > + initrd_start_phys = start; > > > > + initrd_end_phys = end; > > > > } > > > > return 0; > > > > } > > > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > > > } > > > > > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > > > + (initrd_start || initrd_start_phys)) { > > > > + /* > > > > + * FIXME: ensure proper precendence between > > > > + * early_initrd and DT when both are present > > > > > > Command line takes precedence, so just reverse the order. > > > > > > > + */ > > > > + if (initrd_start) { > > > > + initrd_start_phys = __phys_to_virt(initrd_start); > > > > + initrd_end_phys = __phys_to_virt(initrd_end); > > BTW, I think you meant virt_to_phys() here? Right, and then there is no problem at all do the conversion here :) > > > > > > AIUI, the original issue was doing the P2V translation was happening > > > too early and the VA could be wrong if the linear range is adjusted. > > > So I don't think this would work. > > > > Probably things have changed since then, but in the current code there is > > > > initrd_start = __phys_to_virt(initrd_start); > > > > and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe > > it's safe to use __phys_to_virt() here as well. > > Here is fine yes, but I believe it was the the phys to virt in the DT > code before adjusting the linear range that was the problem. > > Rob > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-26 8:12 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-26 8:12 UTC (permalink / raw) To: Rob Herring Cc: Ard Biesheuvel, Florian Fainelli, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k On Thu, Oct 25, 2018 at 04:13:10PM -0500, Rob Herring wrote: > On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > > > +Ard > > > > > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > > > > > Hi all, > > > > > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > > > amount of other header files, and translation units as well. > > > > > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > > > much stuff. One down, ? to go. :) > > > > > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > > > systems that generate two kernels: one with the initramfs and one > > > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > > > another one that does this. > > > > > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > > > custom __early_init_dt_declare_initrd() definition away from > > > > > > asm/memory.h > > > > > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > > > factor 73 approximately. > > > > > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > > > about merging that and if another approach would be preferable, e.g: > > > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > > > something like that. > > > > > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > > > only memblock is used. This should unify what each arch needs to do > > > > > with initrd early. We need the physical address early for memblock > > > > > reserving. Then later on we need the virtual address to access the > > > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > > > physical addresses (or add 2 new variables would be less invasive and > > > > > allow for different translation than __va()). The sanity checks and > > > > > memblock reserve could also perhaps be moved to a common location. > > > > > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > > > it like the above option. > > > > > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > > > Something like this might be just all we need (completely untested, > > > > probably it won't even compile): > > > > > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > > > index 9d9582c..e9ca238 100644 > > > > --- a/arch/arm64/mm/init.c > > > > +++ b/arch/arm64/mm/init.c > > > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > > > > > #ifdef CONFIG_BLK_DEV_INITRD > > > > + > > > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > > > + > > > > static int __init early_initrd(char *p) > > > > { > > > > unsigned long start, size; > > > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > > > if (*endp == ',') { > > > > size = memparse(endp + 1, NULL); > > > > > > > > - initrd_start = start; > > > > - initrd_end = start + size; > > > > + initrd_start_phys = start; > > > > + initrd_end_phys = end; > > > > } > > > > return 0; > > > > } > > > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > > > } > > > > > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > > > + (initrd_start || initrd_start_phys)) { > > > > + /* > > > > + * FIXME: ensure proper precendence between > > > > + * early_initrd and DT when both are present > > > > > > Command line takes precedence, so just reverse the order. > > > > > > > + */ > > > > + if (initrd_start) { > > > > + initrd_start_phys = __phys_to_virt(initrd_start); > > > > + initrd_end_phys = __phys_to_virt(initrd_end); > > BTW, I think you meant virt_to_phys() here? Right, and then there is no problem at all do the conversion here :) > > > > > > AIUI, the original issue was doing the P2V translation was happening > > > too early and the VA could be wrong if the linear range is adjusted. > > > So I don't think this would work. > > > > Probably things have changed since then, but in the current code there is > > > > initrd_start = __phys_to_virt(initrd_start); > > > > and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe > > it's safe to use __phys_to_virt() here as well. > > Here is fine yes, but I believe it was the the phys to virt in the DT > code before adjusting the linear range that was the problem. > > Rob > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-26 8:12 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-26 8:12 UTC (permalink / raw) To: Rob Herring Cc: Ard Biesheuvel, Florian Fainelli, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev, Openrisc, linux-parisc, linuxppc-dev, linux-riscv, linux-s390, SH-Linux, sparclinux, linux-um, linux-xtensa, devicetree, open list:GENERIC INCLUDE/ASM HEADER FILES On Thu, Oct 25, 2018 at 04:13:10PM -0500, Rob Herring wrote: > On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > > > +Ard > > > > > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > > > > > Hi all, > > > > > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > > > amount of other header files, and translation units as well. > > > > > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > > > much stuff. One down, ? to go. :) > > > > > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > > > systems that generate two kernels: one with the initramfs and one > > > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > > > another one that does this. > > > > > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > > > custom __early_init_dt_declare_initrd() definition away from > > > > > > asm/memory.h > > > > > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > > > factor 73 approximately. > > > > > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > > > about merging that and if another approach would be preferable, e.g: > > > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > > > something like that. > > > > > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > > > only memblock is used. This should unify what each arch needs to do > > > > > with initrd early. We need the physical address early for memblock > > > > > reserving. Then later on we need the virtual address to access the > > > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > > > physical addresses (or add 2 new variables would be less invasive and > > > > > allow for different translation than __va()). The sanity checks and > > > > > memblock reserve could also perhaps be moved to a common location. > > > > > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > > > it like the above option. > > > > > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > > > Something like this might be just all we need (completely untested, > > > > probably it won't even compile): > > > > > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > > > index 9d9582c..e9ca238 100644 > > > > --- a/arch/arm64/mm/init.c > > > > +++ b/arch/arm64/mm/init.c > > > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > > > > > #ifdef CONFIG_BLK_DEV_INITRD > > > > + > > > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > > > + > > > > static int __init early_initrd(char *p) > > > > { > > > > unsigned long start, size; > > > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > > > if (*endp == ',') { > > > > size = memparse(endp + 1, NULL); > > > > > > > > - initrd_start = start; > > > > - initrd_end = start + size; > > > > + initrd_start_phys = start; > > > > + initrd_end_phys = end; > > > > } > > > > return 0; > > > > } > > > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > > > } > > > > > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > > > + (initrd_start || initrd_start_phys)) { > > > > + /* > > > > + * FIXME: ensure proper precendence between > > > > + * early_initrd and DT when both are present > > > > > > Command line takes precedence, so just reverse the order. > > > > > > > + */ > > > > + if (initrd_start) { > > > > + initrd_start_phys = __phys_to_virt(initrd_start); > > > > + initrd_end_phys = __phys_to_virt(initrd_end); > > BTW, I think you meant virt_to_phys() here? Right, and then there is no problem at all do the conversion here :) > > > > > > AIUI, the original issue was doing the P2V translation was happening > > > too early and the VA could be wrong if the linear range is adjusted. > > > So I don't think this would work. > > > > Probably things have changed since then, but in the current code there is > > > > initrd_start = __phys_to_virt(initrd_start); > > > > and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe > > it's safe to use __phys_to_virt() here as well. > > Here is fine yes, but I believe it was the the phys to virt in the DT > code before adjusting the linear range that was the problem. > > Rob > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-26 8:12 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-26 8:12 UTC (permalink / raw) To: Rob Herring Cc: Ard Biesheuvel, Florian Fainelli, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS, nios2-dev, Openrisc, linux-parisc, linuxppc-dev, linux-riscv, linux-s390, SH-Linux, sparclinux, linux-um, linux-xtensa, devicetree, open list:GENERIC INCLUDE/ASM HEADER FILES On Thu, Oct 25, 2018 at 04:13:10PM -0500, Rob Herring wrote: > On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > > > +Ard > > > > > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > > > > > Hi all, > > > > > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > > > amount of other header files, and translation units as well. > > > > > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > > > much stuff. One down, ? to go. :) > > > > > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > > > systems that generate two kernels: one with the initramfs and one > > > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > > > another one that does this. > > > > > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > > > custom __early_init_dt_declare_initrd() definition away from > > > > > > asm/memory.h > > > > > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > > > factor 73 approximately. > > > > > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > > > about merging that and if another approach would be preferable, e.g: > > > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > > > something like that. > > > > > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > > > only memblock is used. This should unify what each arch needs to do > > > > > with initrd early. We need the physical address early for memblock > > > > > reserving. Then later on we need the virtual address to access the > > > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > > > physical addresses (or add 2 new variables would be less invasive and > > > > > allow for different translation than __va()). The sanity checks and > > > > > memblock reserve could also perhaps be moved to a common location. > > > > > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > > > it like the above option. > > > > > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > > > Something like this might be just all we need (completely untested, > > > > probably it won't even compile): > > > > > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > > > index 9d9582c..e9ca238 100644 > > > > --- a/arch/arm64/mm/init.c > > > > +++ b/arch/arm64/mm/init.c > > > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > > > > > #ifdef CONFIG_BLK_DEV_INITRD > > > > + > > > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > > > + > > > > static int __init early_initrd(char *p) > > > > { > > > > unsigned long start, size; > > > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > > > if (*endp == ',') { > > > > size = memparse(endp + 1, NULL); > > > > > > > > - initrd_start = start; > > > > - initrd_end = start + size; > > > > + initrd_start_phys = start; > > > > + initrd_end_phys = end; > > > > } > > > > return 0; > > > > } > > > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > > > } > > > > > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > > > + (initrd_start || initrd_start_phys)) { > > > > + /* > > > > + * FIXME: ensure proper precendence between > > > > + * early_initrd and DT when both are present > > > > > > Command line takes precedence, so just reverse the order. > > > > > > > + */ > > > > + if (initrd_start) { > > > > + initrd_start_phys = __phys_to_virt(initrd_start); > > > > + initrd_end_phys = __phys_to_virt(initrd_end); > > BTW, I think you meant virt_to_phys() here? Right, and then there is no problem at all do the conversion here :) > > > > > > AIUI, the original issue was doing the P2V translation was happening > > > too early and the VA could be wrong if the linear range is adjusted. > > > So I don't think this would work. > > > > Probably things have changed since then, but in the current code there is > > > > initrd_start = __phys_to_virt(initrd_start); > > > > and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe > > it's safe to use __phys_to_virt() here as well. > > Here is fine yes, but I believe it was the the phys to virt in the DT > code before adjusting the linear range that was the problem. > > Rob > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 168+ messages in thread
* Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD @ 2018-10-26 8:12 ` Mike Rapoport 0 siblings, 0 replies; 168+ messages in thread From: Mike Rapoport @ 2018-10-26 8:12 UTC (permalink / raw) To: Rob Herring Cc: Ard Biesheuvel, Florian Fainelli, linux-kernel, Catalin Marinas, Will Deacon, Arnd Bergmann, Greg Kroah-Hartman, Marc Zyngier, Olof Johansson, linux-alpha, arcml, moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE, linux-c6x-dev, moderated list:H8/300 ARCHITECTURE, linux-hexagon, linux-ia64, linux-m68k, Linux-MIPS On Thu, Oct 25, 2018 at 04:13:10PM -0500, Rob Herring wrote: > On Thu, Oct 25, 2018 at 12:30 PM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > On Thu, Oct 25, 2018 at 08:15:15AM -0500, Rob Herring wrote: > > > +Ard > > > > > > On Thu, Oct 25, 2018 at 4:38 AM Mike Rapoport <rppt@linux.ibm.com> wrote: > > > > > > > > On Wed, Oct 24, 2018 at 02:55:17PM -0500, Rob Herring wrote: > > > > > On Wed, Oct 24, 2018 at 2:33 PM Florian Fainelli <f.fainelli@gmail.com> wrote: > > > > > > > > > > > > Hi all, > > > > > > > > > > > > While investigating why ARM64 required a ton of objects to be rebuilt > > > > > > when toggling CONFIG_DEV_BLK_INITRD, it became clear that this was > > > > > > because we define __early_init_dt_declare_initrd() differently and we do > > > > > > that in arch/arm64/include/asm/memory.h which gets included by a fair > > > > > > amount of other header files, and translation units as well. > > > > > > > > > > I scratch my head sometimes as to why some config options rebuild so > > > > > much stuff. One down, ? to go. :) > > > > > > > > > > > Changing the value of CONFIG_DEV_BLK_INITRD is a common thing with build > > > > > > systems that generate two kernels: one with the initramfs and one > > > > > > without. buildroot is one of these build systems, OpenWrt is also > > > > > > another one that does this. > > > > > > > > > > > > This patch series proposes adding an empty initrd.h to satisfy the need > > > > > > for drivers/of/fdt.c to unconditionally include that file, and moves the > > > > > > custom __early_init_dt_declare_initrd() definition away from > > > > > > asm/memory.h > > > > > > > > > > > > This cuts the number of objects rebuilds from 1920 down to 26, so a > > > > > > factor 73 approximately. > > > > > > > > > > > > Apologies for the long CC list, please let me know how you would go > > > > > > about merging that and if another approach would be preferable, e.g: > > > > > > introducing a CONFIG_ARCH_INITRD_BELOW_START_OK Kconfig option or > > > > > > something like that. > > > > > > > > > > There may be a better way as of 4.20 because bootmem is now gone and > > > > > only memblock is used. This should unify what each arch needs to do > > > > > with initrd early. We need the physical address early for memblock > > > > > reserving. Then later on we need the virtual address to access the > > > > > initrd. Perhaps we should just change initrd_start and initrd_end to > > > > > physical addresses (or add 2 new variables would be less invasive and > > > > > allow for different translation than __va()). The sanity checks and > > > > > memblock reserve could also perhaps be moved to a common location. > > > > > > > > > > Alternatively, given arm64 is the only oddball, I'd be fine with an > > > > > "if (IS_ENABLED(CONFIG_ARM64))" condition in the default > > > > > __early_init_dt_declare_initrd as long as we have a path to removing > > > > > it like the above option. > > > > > > > > I think arm64 does not have to redefine __early_init_dt_declare_initrd(). > > > > Something like this might be just all we need (completely untested, > > > > probably it won't even compile): > > > > > > > > diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c > > > > index 9d9582c..e9ca238 100644 > > > > --- a/arch/arm64/mm/init.c > > > > +++ b/arch/arm64/mm/init.c > > > > @@ -62,6 +62,9 @@ s64 memstart_addr __ro_after_init = -1; > > > > phys_addr_t arm64_dma_phys_limit __ro_after_init; > > > > > > > > #ifdef CONFIG_BLK_DEV_INITRD > > > > + > > > > +static phys_addr_t initrd_start_phys, initrd_end_phys; > > > > + > > > > static int __init early_initrd(char *p) > > > > { > > > > unsigned long start, size; > > > > @@ -71,8 +74,8 @@ static int __init early_initrd(char *p) > > > > if (*endp == ',') { > > > > size = memparse(endp + 1, NULL); > > > > > > > > - initrd_start = start; > > > > - initrd_end = start + size; > > > > + initrd_start_phys = start; > > > > + initrd_end_phys = end; > > > > } > > > > return 0; > > > > } > > > > @@ -407,14 +410,27 @@ void __init arm64_memblock_init(void) > > > > memblock_add(__pa_symbol(_text), (u64)(_end - _text)); > > > > } > > > > > > > > - if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && initrd_start) { > > > > + if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) && > > > > + (initrd_start || initrd_start_phys)) { > > > > + /* > > > > + * FIXME: ensure proper precendence between > > > > + * early_initrd and DT when both are present > > > > > > Command line takes precedence, so just reverse the order. > > > > > > > + */ > > > > + if (initrd_start) { > > > > + initrd_start_phys = __phys_to_virt(initrd_start); > > > > + initrd_end_phys = __phys_to_virt(initrd_end); > > BTW, I think you meant virt_to_phys() here? Right, and then there is no problem at all do the conversion here :) > > > > > > AIUI, the original issue was doing the P2V translation was happening > > > too early and the VA could be wrong if the linear range is adjusted. > > > So I don't think this would work. > > > > Probably things have changed since then, but in the current code there is > > > > initrd_start = __phys_to_virt(initrd_start); > > > > and in between only the code related to CONFIG_RANDOMIZE_BASE, so I believe > > it's safe to use __phys_to_virt() here as well. > > Here is fine yes, but I believe it was the the phys to virt in the DT > code before adjusting the linear range that was the problem. > > Rob > -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 168+ messages in thread
end of thread, other threads:[~2018-10-27 3:43 UTC | newest] Thread overview: 168+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2018-10-24 19:32 [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD Florian Fainelli 2018-10-24 19:32 ` Florian Fainelli 2018-10-24 19:32 ` [OpenRISC] " Florian Fainelli 2018-10-24 19:32 ` Florian Fainelli 2018-10-24 19:32 ` Florian Fainelli 2018-10-24 19:32 ` Florian Fainelli 2018-10-24 19:32 ` Florian Fainelli 2018-10-24 19:32 ` Florian Fainelli 2018-10-24 19:32 ` Florian Fainelli 2018-10-24 19:32 ` Florian Fainelli 2018-10-24 19:32 ` Florian Fainelli 2018-10-24 19:32 ` Florian Fainelli 2018-10-24 19:32 ` [PATCH v2 1/2] arch: Add asm-generic/initrd.h and make use of it for most architectures Florian Fainelli 2018-10-24 19:32 ` Florian Fainelli 2018-10-24 19:32 ` [OpenRISC] " Florian Fainelli 2018-10-24 19:32 ` Florian Fainelli 2018-10-24 19:32 ` Florian Fainelli 2018-10-24 19:32 ` Florian Fainelli 2018-10-24 19:32 ` Florian Fainelli 2018-10-24 19:32 ` Florian Fainelli 2018-10-24 19:32 ` Florian Fainelli 2018-10-24 19:32 ` Florian Fainelli 2018-10-24 19:32 ` Florian Fainelli 2018-10-24 19:32 ` Florian Fainelli 2018-10-24 19:32 ` [PATCH v2 2/2] arm64: Create asm/initrd.h Florian Fainelli 2018-10-24 19:32 ` Florian Fainelli 2018-10-24 19:32 ` [OpenRISC] " Florian Fainelli 2018-10-24 19:32 ` Florian Fainelli 2018-10-24 19:32 ` Florian Fainelli 2018-10-24 19:32 ` Florian Fainelli 2018-10-24 19:32 ` Florian Fainelli 2018-10-24 19:32 ` Florian Fainelli 2018-10-24 19:32 ` Florian Fainelli 2018-10-24 19:32 ` Florian Fainelli 2018-10-24 19:32 ` Florian Fainelli 2018-10-24 19:32 ` Florian Fainelli 2018-10-24 19:55 ` [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD Rob Herring 2018-10-24 19:55 ` [OpenRISC] " Rob Herring 2018-10-24 19:55 ` Rob Herring 2018-10-24 19:55 ` Rob Herring 2018-10-24 19:55 ` Rob Herring 2018-10-24 19:55 ` Rob Herring 2018-10-24 19:55 ` Rob Herring 2018-10-24 19:55 ` Rob Herring 2018-10-24 19:55 ` Rob Herring 2018-10-24 19:55 ` Rob Herring 2018-10-24 19:55 ` Rob Herring 2018-10-24 20:01 ` Florian Fainelli 2018-10-24 20:01 ` [OpenRISC] " Florian Fainelli 2018-10-24 20:01 ` Florian Fainelli 2018-10-24 20:01 ` Florian Fainelli 2018-10-24 20:01 ` Florian Fainelli 2018-10-24 20:01 ` Florian Fainelli 2018-10-24 20:01 ` Florian Fainelli 2018-10-24 20:01 ` Florian Fainelli 2018-10-24 20:01 ` Florian Fainelli 2018-10-24 20:01 ` Florian Fainelli 2018-10-24 20:01 ` Florian Fainelli 2018-10-24 21:25 ` Rob Herring 2018-10-24 21:25 ` [OpenRISC] " Rob Herring 2018-10-24 21:25 ` Rob Herring 2018-10-24 21:25 ` Rob Herring 2018-10-24 21:25 ` Rob Herring 2018-10-24 21:25 ` Rob Herring 2018-10-24 21:25 ` Rob Herring 2018-10-24 21:25 ` Rob Herring 2018-10-24 21:25 ` Rob Herring 2018-10-24 21:25 ` Rob Herring 2018-10-24 21:25 ` Rob Herring 2018-10-25 9:38 ` Mike Rapoport 2018-10-25 9:38 ` Mike Rapoport 2018-10-25 9:38 ` [OpenRISC] " Mike Rapoport 2018-10-25 9:38 ` Mike Rapoport 2018-10-25 9:38 ` Mike Rapoport 2018-10-25 9:38 ` Mike Rapoport 2018-10-25 9:38 ` Mike Rapoport 2018-10-25 9:38 ` Mike Rapoport 2018-10-25 9:38 ` Mike Rapoport 2018-10-25 9:38 ` Mike Rapoport 2018-10-25 9:38 ` Mike Rapoport 2018-10-25 9:51 ` Russell King - ARM Linux 2018-10-25 9:51 ` [OpenRISC] " Russell King - ARM Linux 2018-10-25 9:51 ` Russell King - ARM Linux 2018-10-25 9:51 ` Russell King - ARM Linux 2018-10-25 9:51 ` Russell King - ARM Linux 2018-10-25 9:51 ` Russell King - ARM Linux 2018-10-25 9:51 ` Russell King - ARM Linux 2018-10-25 9:51 ` Russell King - ARM Linux 2018-10-25 9:51 ` Russell King - ARM Linux 2018-10-25 9:51 ` Russell King - ARM Linux 2018-10-25 13:15 ` Rob Herring 2018-10-25 13:15 ` [OpenRISC] " Rob Herring 2018-10-25 13:15 ` Rob Herring 2018-10-25 13:15 ` Rob Herring 2018-10-25 13:15 ` Rob Herring 2018-10-25 13:15 ` Rob Herring 2018-10-25 13:15 ` Rob Herring 2018-10-25 13:15 ` Rob Herring 2018-10-25 13:15 ` Rob Herring 2018-10-25 13:15 ` Rob Herring 2018-10-25 17:29 ` Mike Rapoport 2018-10-25 17:29 ` Mike Rapoport 2018-10-25 17:29 ` [OpenRISC] " Mike Rapoport 2018-10-25 17:29 ` Mike Rapoport 2018-10-25 17:29 ` Mike Rapoport 2018-10-25 17:29 ` Mike Rapoport 2018-10-25 17:29 ` Mike Rapoport 2018-10-25 17:29 ` Mike Rapoport 2018-10-25 17:29 ` Mike Rapoport 2018-10-25 17:29 ` Mike Rapoport 2018-10-25 17:29 ` Mike Rapoport 2018-10-25 17:29 ` Mike Rapoport 2018-10-25 21:13 ` Rob Herring 2018-10-25 21:13 ` Rob Herring 2018-10-25 21:13 ` [OpenRISC] " Rob Herring 2018-10-25 21:13 ` Rob Herring 2018-10-25 21:13 ` Rob Herring 2018-10-25 21:13 ` Rob Herring 2018-10-25 21:13 ` Rob Herring 2018-10-25 21:13 ` Rob Herring 2018-10-25 21:13 ` Rob Herring 2018-10-25 21:13 ` Rob Herring 2018-10-25 21:13 ` Rob Herring 2018-10-25 21:13 ` Rob Herring 2018-10-25 23:07 ` Florian Fainelli 2018-10-25 23:07 ` [OpenRISC] " Florian Fainelli 2018-10-25 23:07 ` Florian Fainelli 2018-10-25 23:07 ` Florian Fainelli 2018-10-25 23:07 ` Florian Fainelli 2018-10-25 23:07 ` Florian Fainelli 2018-10-25 23:07 ` Florian Fainelli 2018-10-25 23:07 ` Florian Fainelli 2018-10-25 23:07 ` Florian Fainelli 2018-10-25 23:07 ` Florian Fainelli 2018-10-26 11:07 ` Mike Rapoport 2018-10-26 11:07 ` [OpenRISC] " Mike Rapoport 2018-10-26 11:07 ` Mike Rapoport 2018-10-26 11:07 ` Mike Rapoport 2018-10-26 11:07 ` Mike Rapoport 2018-10-26 11:07 ` Mike Rapoport 2018-10-26 11:07 ` Mike Rapoport 2018-10-26 11:07 ` Mike Rapoport 2018-10-26 11:07 ` Mike Rapoport 2018-10-26 11:07 ` Mike Rapoport 2018-10-26 11:07 ` Mike Rapoport 2018-10-26 19:05 ` Florian Fainelli 2018-10-26 19:05 ` [OpenRISC] " Florian Fainelli 2018-10-26 19:05 ` Florian Fainelli 2018-10-26 19:05 ` Florian Fainelli 2018-10-26 19:05 ` Florian Fainelli 2018-10-26 19:05 ` Florian Fainelli 2018-10-26 19:05 ` Florian Fainelli 2018-10-26 19:05 ` Florian Fainelli 2018-10-26 19:05 ` Florian Fainelli 2018-10-26 19:05 ` Florian Fainelli 2018-10-26 19:05 ` Florian Fainelli 2018-10-26 8:12 ` Mike Rapoport 2018-10-26 8:12 ` Mike Rapoport 2018-10-26 8:12 ` [OpenRISC] " Mike Rapoport 2018-10-26 8:12 ` Mike Rapoport 2018-10-26 8:12 ` Mike Rapoport 2018-10-26 8:12 ` Mike Rapoport 2018-10-26 8:12 ` Mike Rapoport 2018-10-26 8:12 ` Mike Rapoport 2018-10-26 8:12 ` Mike Rapoport 2018-10-26 8:12 ` Mike Rapoport 2018-10-26 8:12 ` Mike Rapoport 2018-10-26 8:12 ` Mike Rapoport
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.