Re: [PATCH] x86: drop false warning of empty cpumask in IPI

From: Gilad Ben-Yossef
Date: Sun Feb 19 2012 - 03:14:08 EST


On Fri, Feb 17, 2012 at 2:01 PM, Ingo Molnar <mingo@xxxxxxx> wrote:
>
> * Gilad Ben-Yossef <gilad@xxxxxxxxxxxxx> wrote:
>
>> With current generic SMP infrastructure, it is feasible
>> for the target CPUs to begin processing an IPI work item
>> even before we sent them the actual IPI in the case that
>> an IPI from another CPU woke them first.
>>
>> This can lead to generating a false warning in a valid
>> state of trying to send IPI with an empty cpumask when
>> multiple concurrent IPIs are being sent.
>>
>> This patch was triggered by the following LKML discussion:
>> https://lkml.org/lkml/2012/1/13/308
>>
>> Signed-off-by: Gilad Ben-Yossef <gilad@xxxxxxxxxxxxx>
>> CC: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
>> CC: Ingo Molnar <mingo@xxxxxxxxxx>
>> CC: "H. Peter Anvin" <hpa@xxxxxxxxx>
>> CC: Milton Miller <miltonm@xxxxxxx>
>> CC: x86@xxxxxxxxxx
>> ---
>>  arch/x86/kernel/apic/ipi.c |    5 ++++-
>>  1 files changed, 4 insertions(+), 1 deletions(-)
>>
>> diff --git a/arch/x86/kernel/apic/ipi.c b/arch/x86/kernel/apic/ipi.c
>> index cce91bf..00b68a3 100644
>> --- a/arch/x86/kernel/apic/ipi.c
>> +++ b/arch/x86/kernel/apic/ipi.c
>> @@ -106,7 +106,10 @@ void default_send_IPI_mask_logical(const struct cpumask *cpumask, int vector)
>>       unsigned long mask = cpumask_bits(cpumask)[0];
>>       unsigned long flags;
>>
>> -     if (WARN_ONCE(!mask, "empty IPI mask"))
>> +     if (!mask)
>> +             /* The target CPUs must have already processed the
>> +              * work items due to a concurrent IPI
>> +              */
>>               return;
>
> This could potentially hide real bugs on other callsites.
>
> So why not do the checking at the call site? In almost every
> other scenario it's invalid to send an empty mask.

hmm... isn't that racy? Also, none of the other send_IPI_maks
implementations do the check.

I can obviously add a warning at the "zero not OK" call sites, though.

Actually, the code is racy right now as well. I think we're
trying to program the APIC with a zero dest field from time to
time. How bad is that? :-)

Thanks,
Gilad




--
Gilad Ben-Yossef
Chief Coffee Drinker
gilad@xxxxxxxxxxxxx
Israel Cell: +972-52-8260388
US Cell: +1-973-8260388
http://benyossef.com

"If you take a class in large-scale robotics, can you end up in a
situation where the homework eats your dog?"
 -- Jean-Baptiste Queru
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/