Re: [PATCH 1/1] staging: hv: Fix race condition on IC channel initialization(modified)

From: Jiri Slaby
Date: Thu May 27 2010 - 02:17:14 EST


On 05/26/2010 11:25 PM, Haiyang Zhang wrote:
>> From: Greg KH [mailto:gregkh@xxxxxxx]
>>> + VmbusChannelOpen(newChannel, 2 * PAGE_SIZE,
>>> + 2 * PAGE_SIZE, NULL, 0,
>>> + hv_cb_utils[cnt].callback,
>>> + newChannel) == 0) {
>>> + hv_cb_utils[cnt].channel = newChannel;
>>> + mb();
>>
>> What is the mb() call for? Why is it necessary? (hint, if you need it,
>> something else is really wrong...)
>
> It ensures the channel assignment happens before the wakeup call:
> osd_WaitEventSet(ic_channel_ready), if the compiler optimization re-arrange
> the execution order.

wake_up() is a barrier, you don't need the mb() there.

BTW osd_WaitEventSet et al. can be easily converted to completion.

--
js
--
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/