From: Jiri Slaby on
On 05/26/2010 11:25 PM, Haiyang Zhang wrote:
>> From: Greg KH [mailto:gregkh(a)suse.de]
>>> + 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(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/