Revision: 14601
http://sourceforge.net/p/edk2/code/14601
Author: jljusten
Date: 2013-08-23 18:46:03 +0000 (Fri, 23 Aug 2013)
Log Message:
-----------
OvmfPkg: Virtio: load used ring element strictly after loading used index
Enforce in-order execution of these steps even on not sequentially
consistent architectures, as discussed in [1]. These changes should be
unnecessary on x86 (the only architecture OVMF currently supports), but
they align the OVMF virtio code with the virtio specification and could be
necessary for future OVMF ports.
[1]
http://lists.linuxfoundation.org/pipermail/virtualization/2013-June/024547.html
Suggested-by: Stefan Hajnoczi <[email protected]>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Laszlo Ersek <[email protected]>
Reviewed-by: Stefan Hajnoczi <[email protected]>
Reviewed-by: Jordan Justen <[email protected]>
Modified Paths:
--------------
trunk/edk2/OvmfPkg/Library/VirtioLib/VirtioLib.c
trunk/edk2/OvmfPkg/VirtioNetDxe/Events.c
trunk/edk2/OvmfPkg/VirtioNetDxe/SnpGetStatus.c
trunk/edk2/OvmfPkg/VirtioNetDxe/SnpReceive.c
Modified: trunk/edk2/OvmfPkg/Library/VirtioLib/VirtioLib.c
===================================================================
--- trunk/edk2/OvmfPkg/Library/VirtioLib/VirtioLib.c 2013-08-23 18:45:47 UTC
(rev 14600)
+++ trunk/edk2/OvmfPkg/Library/VirtioLib/VirtioLib.c 2013-08-23 18:46:03 UTC
(rev 14601)
@@ -456,5 +456,6 @@
MemoryFence();
}
+ MemoryFence();
return EFI_SUCCESS;
}
Modified: trunk/edk2/OvmfPkg/VirtioNetDxe/Events.c
===================================================================
--- trunk/edk2/OvmfPkg/VirtioNetDxe/Events.c 2013-08-23 18:45:47 UTC (rev
14600)
+++ trunk/edk2/OvmfPkg/VirtioNetDxe/Events.c 2013-08-23 18:46:03 UTC (rev
14601)
@@ -61,6 +61,7 @@
//
MemoryFence ();
RxCurUsed = *Dev->RxRing.Used.Idx;
+ MemoryFence ();
if (Dev->RxLastUsed != RxCurUsed) {
gBS->SignalEvent (&Dev->Snp.WaitForPacket);
Modified: trunk/edk2/OvmfPkg/VirtioNetDxe/SnpGetStatus.c
===================================================================
--- trunk/edk2/OvmfPkg/VirtioNetDxe/SnpGetStatus.c 2013-08-23 18:45:47 UTC
(rev 14600)
+++ trunk/edk2/OvmfPkg/VirtioNetDxe/SnpGetStatus.c 2013-08-23 18:46:03 UTC
(rev 14601)
@@ -103,6 +103,7 @@
MemoryFence ();
RxCurUsed = *Dev->RxRing.Used.Idx;
TxCurUsed = *Dev->TxRing.Used.Idx;
+ MemoryFence ();
if (InterruptStatus != NULL) {
//
Modified: trunk/edk2/OvmfPkg/VirtioNetDxe/SnpReceive.c
===================================================================
--- trunk/edk2/OvmfPkg/VirtioNetDxe/SnpReceive.c 2013-08-23 18:45:47 UTC
(rev 14600)
+++ trunk/edk2/OvmfPkg/VirtioNetDxe/SnpReceive.c 2013-08-23 18:46:03 UTC
(rev 14601)
@@ -105,6 +105,7 @@
//
MemoryFence ();
RxCurUsed = *Dev->RxRing.Used.Idx;
+ MemoryFence ();
if (Dev->RxLastUsed == RxCurUsed) {
Status = EFI_NOT_READY;
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Introducing Performance Central, a new site from SourceForge and
AppDynamics. Performance Central is your source for news, insights,
analysis and resources for efficient Application Performance Management.
Visit us today!
http://pubads.g.doubleclick.net/gampad/clk?id=48897511&iu=/4140/ostg.clktrk
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits