Re: [PATCH] watchdog: Fix a watchdog crash in some configurations

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> On May 5, 2015, at 9:35 AM, Don Zickus <dzickus@xxxxxxxxxx> wrote:
> 
>> On Mon, May 04, 2015 at 04:17:07PM -0700, john.hubbard@xxxxxxxxx wrote:
>> From: John Hubbard <jhubbard@xxxxxxxxxx>
>> 
>> Commit 8fcf2cc768acd845c1fed837bf9cfe2d7106336d in linux-next
>> introduced a regression in some configurations. Specifically,
>> with CONFIG_NO_HZ_FULL set, and CONFIG_NO_HZ_FULL_ALL *not* set,
>> the kernel will crash in lockup_detector_init(), due to a
>> NULL tick_nohz_full_mask pointer.
>> 
>> This is because the above commit uses tick_nohz_full_mask
>> (in lockup_detector_init), if CONFIG_NO_HZ_FULL is set, but
>> tick_nohz_full_mask only gets allocated if either:
>> 
>>    a) CONFIG_NO_HZ_FULL_ALL is set, or
>> 
>>    b) Someone passes in nohz_full=<any_value> on the boot
>>      args line.
>> 
>> To correct this, change lockup_detector_init so that it does
>> a runtime check (in addition to the ifdef check). This now
>> matches the way most of the other CONFIG_NO_HZ_FULL code does
>> it's checking. This fix is a little simpler than my original
>> proposed fix, thanks to Chris Metcalf for that.
> 
> Hi Chris,
> 
> If you are ok with this, I can forward it along.
> 
> Cheers,
> Don

With the new dynamic test, we don't actually need the ifdef anymore. I asked John if he could respin it without that. 

> 
>> 
>> Signed-off-by: John Hubbard <jhubbard@xxxxxxxxxx>
>> ---
>> kernel/watchdog.c | 12 ++++++++----
>> 1 file changed, 8 insertions(+), 4 deletions(-)
>> 
>> diff --git a/kernel/watchdog.c b/kernel/watchdog.c
>> index 40fda2f..910d73f 100644
>> --- a/kernel/watchdog.c
>> +++ b/kernel/watchdog.c
>> @@ -921,10 +921,14 @@ void __init lockup_detector_init(void)
>>    set_sample_period();
>> 
>> #ifdef CONFIG_NO_HZ_FULL
>> -    if (!cpumask_empty(tick_nohz_full_mask))
>> -        pr_info("Disabling watchdog on nohz_full cores by default\n");
>> -    cpumask_andnot(&watchdog_cpumask, cpu_possible_mask,
>> -               tick_nohz_full_mask);
>> +    if (tick_nohz_full_enabled()) {
>> +        if (!cpumask_empty(tick_nohz_full_mask))
>> +            pr_info("Disabling watchdog on nohz_full cores by default\n");
>> +        cpumask_andnot(&watchdog_cpumask, cpu_possible_mask,
>> +                   tick_nohz_full_mask);
>> +    }
>> +    else
>> +        cpumask_copy(&watchdog_cpumask, cpu_possible_mask);
>> #else
>>    cpumask_copy(&watchdog_cpumask, cpu_possible_mask);
>> #endif
>> -- 
>> 2.3.7
>> 
--
To unsubscribe from this list: send the line "unsubscribe linux-next" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel]     [Linux USB Development]     [Yosemite News]     [Linux SCSI]

  Powered by Linux