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,
but yes printk_once is good, and we can use printk_once for the first
printk too, these two tests (feat_dummy and amd_erratum_400) will be
true for all cpus, so, printing the message for all cpus has no added value.

> 
> Jan
> 



-- 
                                                                Gilles.

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

Reply via email to