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

From: [email-masked] (Stephen Boyd)
Date: Thu, 02 Jan 2014 12:42:32 -0800

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 <[email-masked]> 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