|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH 3/3] Make transmitter robust against a possible completion race
It's possible that a transmission invoked on one CPU may complete on another
before the transmission invocation as finished. Therefore, once we have queued
a NET_BUFFER for transmission we should not use it's metadata again (including
the 'next' pointer).
Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx>
---
src/xennet/receiver.c | 2 ++
src/xennet/transmitter.c | 5 +++--
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/src/xennet/receiver.c b/src/xennet/receiver.c
index 08c6413..863dbd7 100644
--- a/src/xennet/receiver.c
+++ b/src/xennet/receiver.c
@@ -89,6 +89,8 @@ __ReceiverAllocateNetBufferList(
NET_BUFFER_DATA_OFFSET(NetBuffer) = Offset;
NET_BUFFER_DATA_LENGTH(NetBuffer) = Length;
NET_BUFFER_CURRENT_MDL_OFFSET(NetBuffer) = Offset;
+
+ ASSERT3P(NET_BUFFER_NEXT_NB(NetBuffer), ==, NULL);
} else {
NetBufferList =
NdisAllocateNetBufferAndNetBufferList(Receiver->NetBufferListPool,
0,
diff --git a/src/xennet/transmitter.c b/src/xennet/transmitter.c
index b5e110a..91ed5f2 100644
--- a/src/xennet/transmitter.c
+++ b/src/xennet/transmitter.c
@@ -250,11 +250,12 @@ TransmitterSendNetBufferLists(
NetBuffer = NET_BUFFER_LIST_FIRST_NB(NetBufferList);
while (NetBuffer != NULL) {
+ PNET_BUFFER NetBufferListNext =
NET_BUFFER_NEXT_NB(NetBuffer);
PVOID Cookie = NetBufferList;
XENVIF_PACKET_HASH Hash;
NTSTATUS status;
- ListReserved->Reference++;
+ InterlockedIncrement(&ListReserved->Reference);
Hash.Algorithm = XENVIF_PACKET_HASH_ALGORITHM_NONE;
@@ -274,7 +275,7 @@ TransmitterSendNetBufferLists(
break;
}
- NetBuffer = NET_BUFFER_NEXT_NB(NetBuffer);
+ NetBuffer = NetBufferListNext;
}
NetBufferList = ListNext;
--
2.1.1
_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |