Re: v3.13-rc6+ regression (ARM board)

From: Stephen Boyd
Date: Thu Jan 02 2014 - 15:42:39 EST


On 01/02/14 12:30, John Stultz wrote:
> On 01/02/2014 12:03 PM, John Stultz wrote:
>> On 01/02/2014 11:38 AM, Linus Torvalds wrote:
>>> On Thu, Jan 2, 2014 at 4:07 AM, Krzysztof HaÅasa <khalasa@xxxxxxx> wrote:
>>>> This means these two commits don't like each other:
>>>>
>>>> seqcount: Add lockdep functionality to seqcount/seqlock structures
>>>> sched_clock: Use seqcount instead of rolling our own
>>> Does something like this fix it for you?
>>>
>>> --- a/kernel/time/sched_clock.c
>>> +++ b/kernel/time/sched_clock.c
>>> @@ -36,6 +36,7 @@ core_param(irqtime, irqtime, int, 0400);
>>>
>>> static struct clock_data cd = {
>>> .mult = NSEC_PER_SEC / HZ,
>>> + .seq = SEQCNT_ZERO(cd.seq),
>>> };
>>>
>>> static u64 __read_mostly sched_clock_mask;
>>>
>>> (The above is not even compile-tested, because x86 doesn't use
>>> GENERIC_SCHED_CLOCK. So I did the patch blindly, but I think you get
>>> the idea..)
>> Sheesh. Just finishing up holiday email backlog and Linus already has a
>> fix. :)
>>
>> This looks like it should fix the issue, and does build for me.
>>
>> Assuming it works for Krzysztof,
> So something else may be at play. Even with Linus' patch I reproduced a
> similar hang here.
>
> Still chasing it down, but it looks like a seqlock deadlock where we're
> calling read while holding the lock.
>

Do you have tracing enabled? When I moved this code over to use
seqcounts it relied on the fact that the compiler wouldn't be generating
any function calls to the tracing code. Before seqcounts got lockdep
support it all collapsed down into sched_clock() due to the use of
inline on the seqlock API.

--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
hosted by The Linux Foundation

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/