I've debugged the issue under JTAG. I do believe it is compiler bug. Briefly: compiler miscalculated size of wonderful arrays in xhci_check_trb_in_td_math function as result this function corrupts registers saved on stack, upon restoring of those xhci_mem_init accesses not existent memory and crashes. At this point I think error is present in both 4.8 and 4.7 the only difference is registers allocation is a bit different so corruption does not manifest itself as severe problem in case of 4.7. Will double check 4.7 tomorrow, quite sure about 4.8.
I will file detailed bug report tomorrow PST, with test case and detailed explanation. Thanks, Victor On 18 October 2013 23:45, Fathi Boudra <fathi.bou...@linaro.org> wrote: > Hi, > > On 4 October 2013 19:01, Maxim Uvarov <maxim.uva...@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 _______________________________________________ linaro-toolchain mailing list linaro-toolchain@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-toolchain