From: Russell King - ARM Linux <linux@arm.linux.org.uk>
To: Stephen Boyd <sboyd@codeaurora.org>
Cc: Nicolas Pitre <nicolas.pitre@linaro.org>,
Brian Swetland <swetland@google.com>,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-arm-msm@vger.kernel.org
Subject: Re: [PATCH] ARM: avoid mis-detecting some V7 cores in the decompressor
Date: Mon, 3 Jun 2013 23:23:22 +0100 [thread overview]
Message-ID: <20130603222321.GP18614@n2100.arm.linux.org.uk> (raw)
In-Reply-To: <51AD0703.6050408@codeaurora.org>
On Mon, Jun 03, 2013 at 02:13:39PM -0700, Stephen Boyd wrote:
> Resending due to rmk's vacation.
>
> On 05/24/13 15:05, Stephen Boyd wrote:
> > I've noticed another problem now that our caches are used. On MSM
> > we have TEXT_OFFSET set to at least 0x208000 if we've built-in
> > support for MSM8x60/8960. If I boot a kernel with the MSM code
> > built-in that requires the higher text offset, but I load my
> > compressed kernel below that address (such as 0x0) the
> > decompression fails.
> >
> > This happens because the page tables are written into the
> > compressed data region before we relocate ourself to a higher
> > location.
We've always required kernel images to be loaded above RAM+32K for
exactly this issue.
> > This is bad because we just wrote our page tables into the
> > compressed data. Nobody notices though and we finish relocating
> > ourselves and then we call decompress_kernel() which fails
> > randomly. (BTW, why does error() sit in a while loop forever?
It loops forever because there is _nothing_ else to be done. It's
already printed a message explaining why stuff has failed:
void error(char *x)
{
arch_error(x);
putstr("\n\n");
putstr(x);
putstr("\n\n -- System halted");
while(1); /* Halt */
}
and the while loop is to prevent us trying to do something stupid
after failure. Basically, error() never returns.
I've no idea why you say the following:
> > We
> > can't get any information about why the decompression failed if
> > we have debug_ll enabled. I had to patch the error() routine to
> > not while loop forever to get that print after do_decompress to
> > be useful.)
Maybe your implementation of puts() for the decompressor is faulty then?
Because it works for me - when something goes wrong with the decompression,
I get a message such as:
Decompressing kernel...
CRC error
-- System halted
> > 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.
> >
> > 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.
(3) is what we've always required in the past. We already have code
to relocate the compressed image, so we _might_ be able to do (1).
The easy solution is to continue saying "minimum of RAM start + 32K"
as we've always had in the past though.
next prev parent reply other threads:[~2013-06-03 22:23 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-08 21:47 [PATCH] ARM: avoid mis-detecting some V7 cores in the decompressor Stephen Boyd
2013-05-08 21:50 ` Stephen Boyd
2013-05-15 19:38 ` Stephen Boyd
2013-05-23 17:54 ` Stephen Boyd
2013-05-23 23:15 ` Russell King - ARM Linux
2013-05-24 22:05 ` Stephen Boyd
2013-06-03 21:13 ` Stephen Boyd
2013-06-03 21:33 ` Nicolas Pitre
2013-06-03 22:38 ` Russell King - ARM Linux
2013-06-03 22:23 ` Russell King - ARM Linux [this message]
2013-06-03 22:37 ` Stephen Boyd
2013-06-03 22:45 ` Russell King - ARM Linux
2013-06-03 22:59 ` Stephen Boyd
2013-06-04 5:27 ` Nicolas Pitre
2013-06-04 19:47 ` Stephen Boyd
2013-06-04 21:13 ` Nicolas Pitre
2013-06-04 21:45 ` Stephen Boyd
2013-06-05 2:23 ` Nicolas Pitre
2013-06-06 1:29 ` Stephen Boyd
2013-06-06 4:21 ` Nicolas Pitre
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=20130603222321.GP18614@n2100.arm.linux.org.uk \
--to=linux@arm.linux.org.uk \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nicolas.pitre@linaro.org \
--cc=sboyd@codeaurora.org \
--cc=swetland@google.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).