Re: [PATCH] ARM: avoid mis-detecting some V7 cores in the decompressor

Russell King - ARM Linux
2013-06-03T22:38:46Z

On Mon, Jun 03, 2013 at 05:33:45PM -0400, Nicolas Pitre wrote:
> > On 05/24/13 15:05, Stephen Boyd wrote:
> > > I see a few solutions.
> > >
> > > 1) Relocate with caches off and then turn on caches after we're
> > > running in a location where we won't overwrite ourselves.
>
> Due to the cost of doing memory copy with the cache off, thisoption
> should be conditionally used and only when there is an actual conflict.
>
> > > 2) Have temporary page tables for the relocation phase that live
> > > just below the location we're going to relocate to.
> > >
> > > 3) Force bootloaders loading these types of images to load the
> > > zImage at least as high as the TEXT_OFFSET is compiled to.
> > >
> > > I don't think we can convince everyone that #3 is ok to do. I'm
> > > leaning towards #2 since we get all the benefits of the cache
> > > during the relocation phase but #1 is the obviously simple fix.
>
> I'd consider #2 too.

The problem with #2 is the added complexity it brings. The _whole_
point of loading the kernel at RAM+32K is so that we know that the
32K below the image is available for our use cheaply without playing
all sorts of stupid games with turning caches on and off multiple
times, or changing page tables and such like.

The initialization is already complicated enough, it doesn't need to
become any more complicated.

An even simpler solution to this would be to pad the decompressor
with a branch, and 32K-4 of zeros. That removes the whole problem
without adding much more code, but at the expense of 32K of bloat.
32K is nothing compared to the >1.5MB zImage size we have today.