On 18.11.2021 07:51, Wei Chen wrote:
> On 2021/11/18 0:48, Andrew Cooper wrote:
>> --- a/xen/common/smp.c
>> +++ b/xen/common/smp.c
>> @@ -87,10 +87,14 @@ void smp_call_function_interrupt(void)
>>   
>>       irq_enter();
>>   
>> +    if ( unlikely(!func) )
>> +        goto no_func;
>> +
>>       if ( call_data.wait )
>>       {
>>           (*func)(info);
>>           smp_mb();
>> +    no_func:
>>           cpumask_clear_cpu(cpu, &call_data.selected);
>>       }
>>       else
> 
> Why only apply to call_data.wait non-zero case?
> Is it because func will not be NULL when call_data.wait is zero?

No. call_data.wait is irrelevant when no function is to be called.
If you look at the "else" branch, all that would be needed there
is again just the cpumask_clear_cpu() invocation. Hence easiest to
wire it like Andrew did (leaving aside my personal dislike of goto).

Jan


Reply via email to