mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-15 01:24:33 +00:00
Drivers: hv: vmbus: Replace smp_store_mb() with virt_store_mb()
Following the recommendation in Documentation/memory-barriers.txt for virtual machine guests. Fixes: 8b6a877c060ed ("Drivers: hv: vmbus: Replace the per-CPU channel lists with a global array of channels") Signed-off-by: Andrea Parri (Microsoft) <parri.andrea@gmail.com> Link: https://lore.kernel.org/r/20220328154457.100872-1-parri.andrea@gmail.com Signed-off-by: Wei Liu <wei.liu@kernel.org>
This commit is contained in:
parent
be5802795c
commit
eaa03d3453
@ -380,7 +380,7 @@ void vmbus_channel_map_relid(struct vmbus_channel *channel)
|
|||||||
* execute:
|
* execute:
|
||||||
*
|
*
|
||||||
* (a) In the "normal (i.e., not resuming from hibernation)" path,
|
* (a) In the "normal (i.e., not resuming from hibernation)" path,
|
||||||
* the full barrier in smp_store_mb() guarantees that the store
|
* the full barrier in virt_store_mb() guarantees that the store
|
||||||
* is propagated to all CPUs before the add_channel_work work
|
* is propagated to all CPUs before the add_channel_work work
|
||||||
* is queued. In turn, add_channel_work is queued before the
|
* is queued. In turn, add_channel_work is queued before the
|
||||||
* channel's ring buffer is allocated/initialized and the
|
* channel's ring buffer is allocated/initialized and the
|
||||||
@ -392,14 +392,14 @@ void vmbus_channel_map_relid(struct vmbus_channel *channel)
|
|||||||
* recv_int_page before retrieving the channel pointer from the
|
* recv_int_page before retrieving the channel pointer from the
|
||||||
* array of channels.
|
* array of channels.
|
||||||
*
|
*
|
||||||
* (b) In the "resuming from hibernation" path, the smp_store_mb()
|
* (b) In the "resuming from hibernation" path, the virt_store_mb()
|
||||||
* guarantees that the store is propagated to all CPUs before
|
* guarantees that the store is propagated to all CPUs before
|
||||||
* the VMBus connection is marked as ready for the resume event
|
* the VMBus connection is marked as ready for the resume event
|
||||||
* (cf. check_ready_for_resume_event()). The interrupt handler
|
* (cf. check_ready_for_resume_event()). The interrupt handler
|
||||||
* of the VMBus driver and vmbus_chan_sched() can not run before
|
* of the VMBus driver and vmbus_chan_sched() can not run before
|
||||||
* vmbus_bus_resume() has completed execution (cf. resume_noirq).
|
* vmbus_bus_resume() has completed execution (cf. resume_noirq).
|
||||||
*/
|
*/
|
||||||
smp_store_mb(
|
virt_store_mb(
|
||||||
vmbus_connection.channels[channel->offermsg.child_relid],
|
vmbus_connection.channels[channel->offermsg.child_relid],
|
||||||
channel);
|
channel);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user