mirror of https://gitee.com/openkylin/linux.git
virtio_ring: update weak barriers to use virt_xxx
virtio ring uses smp_wmb on SMP and wmb on !SMP, the reason for the later being that it might be talking to another kernel on the same SMP machine. This is exactly what virt_xxx barriers do, so switch to these instead of homegrown ifdef hacks. Cc: Peter Zijlstra <peterz@infradead.org> Cc: Alexander Duyck <alexander.duyck@gmail.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
This commit is contained in:
parent
d307fb16f7
commit
a65961272e
|
@ -12,7 +12,7 @@
|
|||
* anyone care?
|
||||
*
|
||||
* For virtio_pci on SMP, we don't need to order with respect to MMIO
|
||||
* accesses through relaxed memory I/O windows, so smp_mb() et al are
|
||||
* accesses through relaxed memory I/O windows, so virt_mb() et al are
|
||||
* sufficient.
|
||||
*
|
||||
* For using virtio to talk to real devices (eg. other heterogeneous
|
||||
|
@ -21,11 +21,10 @@
|
|||
* actually quite cheap.
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
static inline void virtio_mb(bool weak_barriers)
|
||||
{
|
||||
if (weak_barriers)
|
||||
smp_mb();
|
||||
virt_mb();
|
||||
else
|
||||
mb();
|
||||
}
|
||||
|
@ -33,7 +32,7 @@ static inline void virtio_mb(bool weak_barriers)
|
|||
static inline void virtio_rmb(bool weak_barriers)
|
||||
{
|
||||
if (weak_barriers)
|
||||
smp_rmb();
|
||||
virt_rmb();
|
||||
else
|
||||
rmb();
|
||||
}
|
||||
|
@ -41,26 +40,10 @@ static inline void virtio_rmb(bool weak_barriers)
|
|||
static inline void virtio_wmb(bool weak_barriers)
|
||||
{
|
||||
if (weak_barriers)
|
||||
smp_wmb();
|
||||
virt_wmb();
|
||||
else
|
||||
wmb();
|
||||
}
|
||||
#else
|
||||
static inline void virtio_mb(bool weak_barriers)
|
||||
{
|
||||
mb();
|
||||
}
|
||||
|
||||
static inline void virtio_rmb(bool weak_barriers)
|
||||
{
|
||||
rmb();
|
||||
}
|
||||
|
||||
static inline void virtio_wmb(bool weak_barriers)
|
||||
{
|
||||
wmb();
|
||||
}
|
||||
#endif
|
||||
|
||||
struct virtio_device;
|
||||
struct virtqueue;
|
||||
|
|
Loading…
Reference in New Issue