All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mike Rapoport <rppt@linux.ibm.com>
To: Rob Herring <robh@kernel.org>
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>,
	Florian Fainelli <f.fainelli@gmail.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will.deacon@arm.com>, Arnd Bergmann <arnd@arndb.de>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Marc Zyngier <marc.zyngier@arm.com>,
	Olof Johansson <olof@lixom.net>,
	linux-alpha@vger.kernel.org,
	arcml <linux-snps-arc@lists.infradead.org>,
	"moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE"
	<linux-arm-kernel@lists.infradead.org>,
	linux-c6x-dev@linux-c6x.org,
	"moderated list:H8/300 ARCHITECTURE"
	<uclinux-h8-devel@lists.sourceforge.jp>,
	linux-hexagon@vger.kernel.org, linux-ia64@vger.kernel.org,
	linux-m68k@lists.linux-m68k.org
Subject: Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD
Date: Fri, 26 Oct 2018 08:12:25 +0000	[thread overview]
Message-ID: <20181026081224.GB27364@rapoport-lnx> (raw)
In-Reply-To: <CAL_JsqJrMq+QHvuOsqEdCFchmXsd4s2XKUD_TboKzeEQprJvjg@mail.gmail.com>

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.

WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@linux.ibm.com>
To: Rob Herring <robh@kernel.org>
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>,
	Florian Fainelli <f.fainelli@gmail.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will.deacon@arm.com>, Arnd Bergmann <arnd@arndb.de>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Marc Zyngier <marc.zyngier@arm.com>,
	Olof Johansson <olof@lixom.net>,
	linux-alpha@vger.kernel.org,
	arcml <linux-snps-arc@lists.infradead.org>,
	"moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE"
	<linux-arm-kernel@lists.infradead.org>,
	linux-c6x-dev@linux-c6x.org,
	"moderated list:H8/300 ARCHITECTURE"
	<uclinux-h8-devel@lists.sourceforge.jp>,
	linux-hexagon@vger.kernel.org, linux-ia64@vger.kernel.org,
	linux-m68k@lists.linux-m68k.org, Linux-MIPS <
Subject: Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD
Date: Fri, 26 Oct 2018 09:12:25 +0100	[thread overview]
Message-ID: <20181026081224.GB27364@rapoport-lnx> (raw)
In-Reply-To: <CAL_JsqJrMq+QHvuOsqEdCFchmXsd4s2XKUD_TboKzeEQprJvjg@mail.gmail.com>

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.

WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@linux.ibm.com>
To: Rob Herring <robh@kernel.org>
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>,
	Florian Fainelli <f.fainelli@gmail.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will.deacon@arm.com>, Arnd Bergmann <arnd@arndb.de>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Marc Zyngier <marc.zyngier@arm.com>,
	Olof Johansson <olof@lixom.net>,
	linux-alpha@vger.kernel.org,
	arcml <linux-snps-arc@lists.infradead.org>,
	"moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" 
	<linux-arm-kernel@lists.infradead.org>,
	linux-c6x-dev@linux-c6x.org,
	"moderated list:H8/300 ARCHITECTURE" 
	<uclinux-h8-devel@lists.sourceforge.jp>,
	linux-hexagon@vger.kernel.org, linux-ia64@vger.kernel.org,
	linux-m68k@lists.linux-m68k.org,
	Linux-MIPS <linux-mips@linux-mips.org>,
	nios2-dev@lists.rocketboards.org,
	Openrisc <openrisc@lists.librecores.org>,
	linux-parisc@vger.kernel.org,
	linuxppc-dev <linuxppc-dev@lists.ozlabs.org>,
	linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org,
	SH-Linux <linux-sh@vger.kernel.org>,
	sparclinux@vger.kernel.org, linux-um@lists.infradead.org,
	linux-xtensa@linux-xtensa.org, devicetree@vger.kernel.org,
	"open list:GENERIC INCLUDE/ASM HEADER FILES" 
	<linux-arch@vger.kernel.org>
Subject: Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD
Date: Fri, 26 Oct 2018 09:12:25 +0100	[thread overview]
Message-ID: <20181026081224.GB27364@rapoport-lnx> (raw)
In-Reply-To: <CAL_JsqJrMq+QHvuOsqEdCFchmXsd4s2XKUD_TboKzeEQprJvjg@mail.gmail.com>

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.


WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@linux.ibm.com>
To: Rob Herring <robh@kernel.org>
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>,
	Florian Fainelli <f.fainelli@gmail.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will.deacon@arm.com>, Arnd Bergmann <arnd@arndb.de>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Marc Zyngier <marc.zyngier@arm.com>,
	Olof Johansson <olof@lixom.net>,
	linux-alpha@vger.kernel.org,
	arcml <linux-snps-arc@lists.infradead.org>,
	"moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE"
	<linux-arm-kernel@lists.infradead.org>,
	linux-c6x-dev@linux-c6x.org,
	"moderated list:H8/300 ARCHITECTURE"
	<uclinux-h8-devel@lists.sourceforge.jp>,
	linux-hexagon@vger.kernel.org, linux-ia64@vger.kernel.org,
	linux-m68k@lists.linux-m68k.org,
	Linux-MIPS <linux-mips@linux-mips.org>,
	nios2-dev@lists.rocketboards.org,
	Openrisc <openrisc@lists.librecores.org>,
	linux-parisc@vger.kernel.org,
	linuxppc-dev <linuxppc-dev@lists.ozlabs.org>,
	linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org,
	SH-Linux <linux-sh@vger.kernel.org>,
	sparclinux@vger.kernel.org, linux-um@lists.infradead.org,
	linux-xtensa@linux-xtensa.org, devicetree@vger.kernel.org,
	"open list:GENERIC INCLUDE/ASM HEADER FILES"
	<linux-arch@vger.kernel.org>
Subject: Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD
Date: Fri, 26 Oct 2018 09:12:25 +0100	[thread overview]
Message-ID: <20181026081224.GB27364@rapoport-lnx> (raw)
Message-ID: <20181026081225.fDVGm0uZwxBgIc36762qbR-rrlgAlJo3_4nrCYU552E@z> (raw)
In-Reply-To: <CAL_JsqJrMq+QHvuOsqEdCFchmXsd4s2XKUD_TboKzeEQprJvjg@mail.gmail.com>

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.

WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@linux.ibm.com>
To: Rob Herring <robh@kernel.org>
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>,
	Florian Fainelli <f.fainelli@gmail.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will.deacon@arm.com>, Arnd Bergmann <arnd@arndb.de>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Marc Zyngier <marc.zyngier@arm.com>,
	Olof Johansson <olof@lixom.net>,
	linux-alpha@vger.kernel.org,
	arcml <linux-snps-arc@lists.infradead.org>,
	"moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE"
	<linux-arm-kernel@lists.infradead.org>,
	linux-c6x-dev@linux-c6x.org,
	"moderated list:H8/300 ARCHITECTURE"
	<uclinux-h8-devel@lists.sourceforge.jp>,
	linux-hexagon@vger.kernel.org, linux-ia64@vger.kernel.org,
	linux-m68k@lists.linux-m68k.org
Subject: Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD
Date: Fri, 26 Oct 2018 09:12:25 +0100	[thread overview]
Message-ID: <20181026081224.GB27364@rapoport-lnx> (raw)
In-Reply-To: <CAL_JsqJrMq+QHvuOsqEdCFchmXsd4s2XKUD_TboKzeEQprJvjg@mail.gmail.com>

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.

WARNING: multiple messages have this Message-ID (diff)
From: rppt@linux.ibm.com (Mike Rapoport)
To: linux-riscv@lists.infradead.org
Subject: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD
Date: Fri, 26 Oct 2018 09:12:25 +0100	[thread overview]
Message-ID: <20181026081224.GB27364@rapoport-lnx> (raw)
In-Reply-To: <CAL_JsqJrMq+QHvuOsqEdCFchmXsd4s2XKUD_TboKzeEQprJvjg@mail.gmail.com>

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.

WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@linux.ibm.com>
To: Rob Herring <robh@kernel.org>
Cc: Linux-MIPS <linux-mips@linux-mips.org>,
	linux-ia64@vger.kernel.org, SH-Linux <linux-sh@vger.kernel.org>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will.deacon@arm.com>,
	devicetree@vger.kernel.org, sparclinux@vger.kernel.org,
	linux-riscv@lists.infradead.org,
	"open list:GENERIC INCLUDE/ASM HEADER FILES"
	<linux-arch@vger.kernel.org>,
	linux-s390@vger.kernel.org,
	Florian Fainelli <f.fainelli@gmail.com>,
	linux-c6x-dev@linux-c6x.org, linux-hexagon@vger.kernel.org,
	arcml <linux-snps-arc@lists.infradead.org>,
	"moderated list:H8/300 ARCHITECTURE"
	<uclinux-h8-devel@lists.sourceforge.jp>,
	linux-xtensa@linux-xtensa.org, Arnd Bergmann <arnd@arndb.de>,
	Marc Zyngier <marc.zyngier@arm.com>,
	linux-um@lists.infradead.org, linux-m68k@lists.linux-m68k.org,
	Openrisc <openrisc@lists.librecores.org>,
	"moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE"
	<linux-arm-kernel@lists.infradead.org>,
	linux-parisc@vger.kernel.org,
	Ard Biesheuvel <ard.biesheuvel@linaro.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	linux-alpha@vger.kernel.org, Olof Johansson <olof@lixom.net>,
	nios2-dev@lists.rocketboards.org,
	linuxppc-dev <linuxppc-dev@lists.ozlabs.org>
Subject: Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD
Date: Fri, 26 Oct 2018 09:12:25 +0100	[thread overview]
Message-ID: <20181026081224.GB27364@rapoport-lnx> (raw)
Message-ID: <20181026081225.8Hv-VZU8kBGOybeDsYNgtan4aUR5eH_1AtQ-khWhQmc@z> (raw)
In-Reply-To: <CAL_JsqJrMq+QHvuOsqEdCFchmXsd4s2XKUD_TboKzeEQprJvjg@mail.gmail.com>

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

WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@linux.ibm.com>
To: Rob Herring <robh@kernel.org>
Cc: Linux-MIPS <linux-mips@linux-mips.org>,
	linux-ia64@vger.kernel.org, SH-Linux <linux-sh@vger.kernel.org>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will.deacon@arm.com>,
	devicetree@vger.kernel.org, sparclinux@vger.kernel.org,
	linux-riscv@lists.infradead.org,
	"open list:GENERIC INCLUDE/ASM HEADER FILES"
	<linux-arch@vger.kernel.org>,
	linux-s390@vger.kernel.org,
	Florian Fainelli <f.fainelli@gmail.com>,
	linux-c6x-dev@linux-c6x.org, linux-hexagon@vger.kernel.org,
	arcml <linux-snps-arc@lists.infradead.org>,
	"moderated list:H8/300 ARCHITECTURE"
	<uclinux-h8-devel@lists.sourceforge.jp>,
	linux-xtensa@linux-xtensa.org, Arnd Bergmann <arnd@arndb.de>,
	Marc Zyngier <marc.zyngier@arm.com>,
	linux-um@lists.infradead.org, linux-m68k@lists.linux-m68k.org,
	Openrisc <openrisc@lists.librecores.org>,
	"moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE"
	<linux-arm-kernel@lists.infradead.org>,
	linux-parisc@vger.kernel.org,
	Ard Biesheuvel <ard.biesheuvel@linaro.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	linux-alpha@vger.kernel.org, Olof Johansson <olof@lixom.net>,
	nios2-dev@lists.rocketboards.org,
	linuxppc-dev <linuxppc-dev@lists.ozlabs.org>
Subject: Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD
Date: Fri, 26 Oct 2018 09:12:25 +0100	[thread overview]
Message-ID: <20181026081224.GB27364@rapoport-lnx> (raw)
In-Reply-To: <CAL_JsqJrMq+QHvuOsqEdCFchmXsd4s2XKUD_TboKzeEQprJvjg@mail.gmail.com>

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.


WARNING: multiple messages have this Message-ID (diff)
From: rppt@linux.ibm.com (Mike Rapoport)
To: linux-snps-arc@lists.infradead.org
Subject: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD
Date: Fri, 26 Oct 2018 09:12:25 +0100	[thread overview]
Message-ID: <20181026081224.GB27364@rapoport-lnx> (raw)
In-Reply-To: <CAL_JsqJrMq+QHvuOsqEdCFchmXsd4s2XKUD_TboKzeEQprJvjg@mail.gmail.com>

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.

WARNING: multiple messages have this Message-ID (diff)
From: rppt@linux.ibm.com (Mike Rapoport)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD
Date: Fri, 26 Oct 2018 09:12:25 +0100	[thread overview]
Message-ID: <20181026081224.GB27364@rapoport-lnx> (raw)
In-Reply-To: <CAL_JsqJrMq+QHvuOsqEdCFchmXsd4s2XKUD_TboKzeEQprJvjg@mail.gmail.com>

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.

WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@linux.ibm.com>
To: openrisc@lists.librecores.org
Subject: [OpenRISC] [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD
Date: Fri, 26 Oct 2018 09:12:25 +0100	[thread overview]
Message-ID: <20181026081224.GB27364@rapoport-lnx> (raw)
In-Reply-To: <CAL_JsqJrMq+QHvuOsqEdCFchmXsd4s2XKUD_TboKzeEQprJvjg@mail.gmail.com>

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.


WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@linux.ibm.com>
To: Rob Herring <robh@kernel.org>
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>,
	Florian Fainelli <f.fainelli@gmail.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will.deacon@arm.com>, Arnd Bergmann <arnd@arndb.de>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Marc Zyngier <marc.zyngier@arm.com>,
	Olof Johansson <olof@lixom.net>,
	linux-alpha@vger.kernel.org,
	arcml <linux-snps-arc@lists.infradead.org>,
	"moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE"
	<linux-arm-kernel@lists.infradead.org>,
	linux-c6x-dev@linux-c6x.org,
	"moderated list:H8/300 ARCHITECTURE"
	<uclinux-h8-devel@lists.sourceforge.jp>,
	linux-hexagon@vger.kernel.org, linux-ia64@vger.kernel.org,
	linux-m68k@lists.linux-m68k.org, Linux-MIPS <>
Subject: Re: [PATCH v2 0/2] arm64: Cut rebuild time when changing CONFIG_BLK_DEV_INITRD
Date: Fri, 26 Oct 2018 09:12:25 +0100	[thread overview]
Message-ID: <20181026081224.GB27364@rapoport-lnx> (raw)
In-Reply-To: <CAL_JsqJrMq+QHvuOsqEdCFchmXsd4s2XKUD_TboKzeEQprJvjg@mail.gmail.com>

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.


  parent reply	other threads:[~2018-10-26  8:12 UTC|newest]

Thread overview: 168+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 [this message]
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

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20181026081224.GB27364@rapoport-lnx \
    --to=rppt@linux.ibm.com \
    --cc=ard.biesheuvel@linaro.org \
    --cc=arnd@arndb.de \
    --cc=catalin.marinas@arm.com \
    --cc=f.fainelli@gmail.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-alpha@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-c6x-dev@linux-c6x.org \
    --cc=linux-hexagon@vger.kernel.org \
    --cc=linux-ia64@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-m68k@lists.linux-m68k.org \
    --cc=linux-snps-arc@lists.infradead.org \
    --cc=marc.zyngier@arm.com \
    --cc=olof@lixom.net \
    --cc=robh@kernel.org \
    --cc=uclinux-h8-devel@lists.sourceforge.jp \
    --cc=will.deacon@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.