> From: Greg KH [mailto:gregkh@xxxxxxx] > > As discussed previously, I used atomic_t to handle more general case > > if vmbus interrupts happen on every cpu. > > Ok, but then you should use a lock to protect the variable, not an > atomic_t. > If you care about this, because some other thread is looking at it, > then > you really need to protect it with a lock. Don't rely on a mb() to get > it all correct for you (hint, I doubt it will...) Actually, since the interrupts only happen on cpu0, this is not a concern. How about use a simple int variable here? Also, remove the mb(). > > The ic_channel_ready variable is called by VmbusChannelProcessOffer / > > osd_WaitEventSet(ic_channel_ready) to wake up vmbus_init(). So it's > > not a local variable. > > But again, this logic should be within the init call, as it's part of > the proper init sequence. So just put it in that call please. The VmbusChannelProcessOffer() is called from interrupt context, and initialize the channels, wake up vmbus_init when all channels are ready. If using local variable only, how to pass the channel ready info to vmbus_init() which is in a different context? Thanks, - Haiyang _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/virtualization