Hi,
On 4 October 2013 19:01, Maxim Uvarov maxim.uvarov@linaro.org wrote:
On 10/04/2013 07:40 PM, Victor Kamensky wrote:
Hi Maxim,
readl and writel are stronger version of readl_realxed and writel_relaxed:
#define readl(c) ({ u32 __v = readl_relaxed(c); __iormb(); __v; }) #define writel(v,c) ({ __iowmb(); writel_relaxed(v,c); })
They just add __iormb and __iowmb, I think it is very dangerous thing to drop those memory barriers. I don't think your change is correct and/or it requires way better explanation.
I've run into the same crash while working on 3.12-rc3 BE issues. In fact I saw this failure on both BE and LE and on old versions of BE kernels when I tried to use 4.8 gcc version from 13.09 release. When I fall back to 4.7 (i.e 13.04) it works fine
I would think it is compiler issue or preexisting issue in the code uncovered by compiler change. Personally I think it is the first. Since I am chasing another problem I did not have time to look more deeply into the issue. IMHO it definitely require more digging. In mean time you can quickly check your current version and try another one if your looks as one described in this email.
Thanks, Victor
Ah, yes, it __raw_write has direct access and writel swaps bits.
If it's compiler issue then it has to be simple to compare objdump disasm output for that function.
I think I've hit this issue. We use latest Linaro GCC 4.8 in the CI loop to build Arndale BE kernel. Is there a bug reported to TCWG? If not, please create one: https://bugs.launchpad.net/gcc-linaro/+filebug
FYI, I'm using Linaro GCC 4.8-2013.09 (pre-built) and latest linaro-linaro (based on 3.12-rc5 with Victor's topic branch). Boot log attached.
Cheers, Fathi