Sfoglia il codice sorgente

virtio_ring: Update weak barriers to use dma_wmb/rmb

This change makes it so that instead of using smp_wmb/rmb which varies
depending on the kernel configuration we can can use dma_wmb/rmb which for
most architectures should be equal to or slightly more strict than
smp_wmb/rmb.

The advantage to this is that these barriers are available to uniprocessor
builds as well so the performance should improve under such a
configuration.

Signed-off-by: Alexander Duyck <alexander.h.duyck@redhat.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Alexander Duyck 10 anni fa
parent
commit
9e1a27ea42
1 ha cambiato i file con 4 aggiunte e 19 eliminazioni
  1. 4 19
      include/linux/virtio_ring.h

+ 4 - 19
include/linux/virtio_ring.h

@@ -21,19 +21,20 @@
  * actually quite cheap.
  * actually quite cheap.
  */
  */
 
 
-#ifdef CONFIG_SMP
 static inline void virtio_mb(bool weak_barriers)
 static inline void virtio_mb(bool weak_barriers)
 {
 {
+#ifdef CONFIG_SMP
 	if (weak_barriers)
 	if (weak_barriers)
 		smp_mb();
 		smp_mb();
 	else
 	else
+#endif
 		mb();
 		mb();
 }
 }
 
 
 static inline void virtio_rmb(bool weak_barriers)
 static inline void virtio_rmb(bool weak_barriers)
 {
 {
 	if (weak_barriers)
 	if (weak_barriers)
-		smp_rmb();
+		dma_rmb();
 	else
 	else
 		rmb();
 		rmb();
 }
 }
@@ -41,26 +42,10 @@ static inline void virtio_rmb(bool weak_barriers)
 static inline void virtio_wmb(bool weak_barriers)
 static inline void virtio_wmb(bool weak_barriers)
 {
 {
 	if (weak_barriers)
 	if (weak_barriers)
-		smp_wmb();
+		dma_wmb();
 	else
 	else
 		wmb();
 		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 virtio_device;
 struct virtqueue;
 struct virtqueue;