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

Reply via email to