On 01/11/2013 08:52 AM, Jan Kiszka wrote:

> On 2013-01-11 08:49, Gilles Chanteperdrix wrote:
>> On 01/11/2013 08:45 AM, Jan Kiszka wrote:
>>
>>> On 2013-01-11 08:37, Jan Kiszka wrote:
>>>>> From acc3c57390d275a1b28d66f1ec88c85e0f8c0890 Mon Sep 17 00:00:00 2001
>>>>> From: Gilles Chanteperdrix <[email protected]>
>>>>> Date: Sat, 29 Dec 2012 17:48:20 +0100
>>>>> Subject: [PATCH] x86/ipipe: restore warning with AMD erratum
>>>>>
>>>>> ---
>>>>>  arch/x86/kernel/apic/apic.c |   16 ++++++++++------
>>>>>  1 files changed, 10 insertions(+), 6 deletions(-)
>>>>>
>>>>> diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
>>>>> index 7f07610..91531bb 100644
>>>>> --- a/arch/x86/kernel/apic/apic.c
>>>>> +++ b/arch/x86/kernel/apic/apic.c
>>>>> @@ -545,14 +545,18 @@ static void __cpuinit setup_APIC_timer(void)
>>>>>   memcpy(levt, &lapic_clockevent, sizeof(*levt));
>>>>>   levt->cpumask = cpumask_of(smp_processor_id());
>>>>>  #ifdef CONFIG_IPIPE
>>>>> - if (!(lapic_clockevent.features & CLOCK_EVT_FEAT_DUMMY))
>>>>> + if (!(lapic_clockevent.features & CLOCK_EVT_FEAT_DUMMY)
>>>>> +     && !cpu_has_amd_erratum(amd_erratum_400))
>>>>>           levt->ipipe_timer = &__get_cpu_var(lapic_itimer);
>>>>>   else {
>>>>> -        printk(KERN_INFO
>>>>> -               "I-pipe: cannot use LAPIC as a tick device\n");
>>>>> -        if (cpu_has_amd_erratum(amd_erratum_400))
>>>>> -                printk(KERN_INFO
>>>>> -                       "I-pipe: disable C1E power state in your BIOS\n");
>>>>> +         static atomic_t printed = ATOMIC_INIT(-1);
>>>>> +         printk(KERN_INFO
>>>>> +                "I-pipe: cannot use LAPIC on cpu #%d as a tick device\n",
>>>>> +                smp_processor_id());
>>>>> +         if (cpu_has_amd_erratum(amd_erratum_400)
>>>>> +             && atomic_inc_and_test(&printed))
>>>>> +                 printk(KERN_INFO
>>>>> +                        "I-pipe: disable C1E power state in your 
>>>>> BIOS\n");
>>>>
>>>> printk_once should do the trick as well.
>>>
>>> In fact, it should actually do what you likely intended: print on first
>>> occurrence, not on second or later. ;)
>>
>>
>> printed is initialized at -1, so, the printk happens on first occurence,
> 
> inc_and_test increments first and then returns the result.


Yes, the other way around, the result used is the value before
incrementation, so printed should be initialized to 0, right...

-- 
                                                                Gilles.

_______________________________________________
Xenomai mailing list
[email protected]
http://www.xenomai.org/mailman/listinfo/xenomai

Reply via email to