[PATCH v3 1/2] powerpc/timer - large decrementer support

oliver oohall at gmail.com
Tue May 31 17:05:34 AEST 2016


On Tue, May 31, 2016 at 4:25 PM, Michael Neuling <mikey at neuling.org> wrote:
> On Tue, 2016-05-10 at 14:57 +1000, Oliver O'Halloran wrote:
>>  static int decrementer_set_next_event(unsigned long evt,
>>                                     struct clock_event_device *dev);
>> @@ -503,7 +504,7 @@ static void __timer_interrupt(void)
>>               __this_cpu_inc(irq_stat.timer_irqs_event);
>>       } else {
>>               now = *next_tb - now;
>> -             if (now <= DECREMENTER_MAX)
>> +             if (now <= decrementer_max)
>>                       set_dec((int)now);
>
> You can remove the int cast here now since set_dec() takes a u64.

I thought I had fixed this, but it looks like I squashed the change to
into the second patch by accident, whoops.

>> +/* enables the large decrementer for the current CPU */
>> +static void enable_large_decrementer(void)
>> +{
>> +     /* do we have a large decrementer? */
>> +     if (!cpu_has_large_dec())
>> +             return;
>> +
>> +     /* do we need a large decrementer? */
>> +     if (decrementer_max <= DECREMENTER_DEFAULT_MAX)
>> +             return;
>> +
>> +     mtspr(SPRN_LPCR, mfspr(SPRN_LPCR) | LPCR_LD);
>> +
>> +     if (!large_dec_enabled()) {
>> +             decrementer_max = DECREMENTER_DEFAULT_MAX;
>> +
>> +             pr_warn("time_init: Failed to enable large decrementer on CPU %d\n",
>> +                     smp_processor_id());
>
> Can you make this pr_warn_once() since every CPU is going to call this?

Sure.


More information about the Linuxppc-dev mailing list