diff options
author | Otavio Salvador <otavio@ossystems.com.br> | 2022-05-19 11:02:10 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-19 11:02:10 -0300 |
commit | b7007e1d615b8d4b71c28ebf790c5164fc4491d5 (patch) | |
tree | 48c35f63dc1101d0d528b5d79c81849b99ca7c6d /drivers/hv/ring_buffer.c | |
parent | 38955ef654554c94f4d91bafb9ef5c5f41a4c0f6 (diff) | |
parent | 0e61b511dd8474280ba674590daa55f30433b7d4 (diff) |
Merge pull request #565 from philschenker/update-to-5.4.193__update-to-2.3.7__5.4-2.3.x-imx
Update Patchlevel on Branch 5.4-2.3.x-imx from 5.4.161->5.4.193
Diffstat (limited to 'drivers/hv/ring_buffer.c')
-rw-r--r-- | drivers/hv/ring_buffer.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/hv/ring_buffer.c b/drivers/hv/ring_buffer.c index 9a03b163cbbd..59f1e64908b1 100644 --- a/drivers/hv/ring_buffer.c +++ b/drivers/hv/ring_buffer.c @@ -378,7 +378,16 @@ int hv_ringbuffer_read(struct vmbus_channel *channel, static u32 hv_pkt_iter_avail(const struct hv_ring_buffer_info *rbi) { u32 priv_read_loc = rbi->priv_read_index; - u32 write_loc = READ_ONCE(rbi->ring_buffer->write_index); + u32 write_loc; + + /* + * The Hyper-V host writes the packet data, then uses + * store_release() to update the write_index. Use load_acquire() + * here to prevent loads of the packet data from being re-ordered + * before the read of the write_index and potentially getting + * stale data. + */ + write_loc = virt_load_acquire(&rbi->ring_buffer->write_index); if (write_loc >= priv_read_loc) return write_loc - priv_read_loc; |