[ovs-dev] [PATCH] ofproto-dpif-upcall: Batch upcalls.
Jarno Rajahalme
jrajahalme at nicira.com
Wed Aug 28 18:55:30 UTC 2013
On Aug 28, 2013, at 9:39 AM, Jarno Rajahalme <jrajahalme at nicira.com> wrote:
>> One specific race that I was concerned about is:
>>
>> 1. This code in udpif_miss_handler() checks n_upcalls and sees that it
>> is zero.
>>
>> if (!handler->n_upcalls) {
>>
>> 2. This code in recv_upcalls() signals wake_cond:
>>
>> for (n = 0; n < udpif->n_handlers; ++n) {
>> handler = &udpif->handlers[n];
>> if (handler->n_new_upcalls) {
>> handler->n_new_upcalls = 0;
>> xpthread_cond_signal(&handler->wake_cond);
>> }
>> }
>>
>> 3. This code in udpif_miss_handler() starts waiting on wake_cond:
>>
>> ovs_mutex_cond_wait(&handler->wake_cond, &handler->mutex);
>>
>> Maybe this race cannot happen, because n_upcalls only changes with the
>> mutex taken. I guess that's the case.
>
On a second thought, I think it is better to be conservative here and lock while cond_signaling. That way there will be no nasty surprises if some of the other code gets reorganized.
Jarno
More information about the dev
mailing list