[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH 06/10] Dont call through to inactive queues
Queues where Index >= QueueCount are inactive, and should not Connect, Disconnect, Enable, Disable or write to the store. Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx> --- include/vif_interface.h | 2 ++ src/xenvif/receiver.c | 22 ++++++++++++++++++++++ src/xenvif/transmitter.c | 26 ++++++++++++++++++++++++++ 3 files changed, 50 insertions(+) diff --git a/include/vif_interface.h b/include/vif_interface.h index 4ce61c4..83e3846 100644 --- a/include/vif_interface.h +++ b/include/vif_interface.h @@ -280,6 +280,8 @@ struct _XENVIF_TRANSMITTER_PACKET_V2 { ULONG Length; /*! Opaque cookie used to store context information for packet return */ PVOID Cookie; + /*! Hash value calculated from packet's headers */ + ULONGLONG HashValue; /*! Packet information passed down to subscriber */ XENVIF_TRANSMITTER_PACKET_SEND_INFO Send; /*! Information passed up from subscriber for packet completion */ diff --git a/src/xenvif/receiver.c b/src/xenvif/receiver.c index 85ebcf9..4d7f19b 100644 --- a/src/xenvif/receiver.c +++ b/src/xenvif/receiver.c @@ -2477,6 +2477,8 @@ ReceiverConnect( PXENVIF_RECEIVER_RING Ring; Ring = CONTAINING_RECORD(ListEntry, XENVIF_RECEIVER_RING, ListEntry); + if (Ring->Index >= FrontendGetQueueCount(Frontend)) + continue; status = __ReceiverRingConnect(Ring); if (!NT_SUCCESS(status)) @@ -2509,6 +2511,8 @@ fail3: PXENVIF_RECEIVER_RING Ring; Ring = CONTAINING_RECORD(ListEntry, XENVIF_RECEIVER_RING, ListEntry); + if (Ring->Index >= FrontendGetQueueCount(Frontend)) + continue; __ReceiverRingDisconnect(Ring); @@ -2668,6 +2672,8 @@ ReceiverStoreWrite( PXENVIF_RECEIVER_RING Ring; Ring = CONTAINING_RECORD(ListEntry, XENVIF_RECEIVER_RING, ListEntry); + if (Ring->Index >= FrontendGetQueueCount(Frontend)) + continue; status = __ReceiverRingStoreWrite(Ring, Transaction); if (!NT_SUCCESS(status)) @@ -2714,6 +2720,8 @@ ReceiverEnable( PXENVIF_RECEIVER_RING Ring; Ring = CONTAINING_RECORD(ListEntry, XENVIF_RECEIVER_RING, ListEntry); + if (Ring->Index >= FrontendGetQueueCount(Frontend)) + continue; status = __ReceiverRingEnable(Ring); if (!NT_SUCCESS(status)) @@ -2731,6 +2739,8 @@ fail1: PXENVIF_RECEIVER_RING Ring; Ring = CONTAINING_RECORD(ListEntry, XENVIF_RECEIVER_RING, ListEntry); + if (Ring->Index >= FrontendGetQueueCount(Frontend)) + continue; __ReceiverRingDisable(Ring); } @@ -2744,6 +2754,9 @@ ReceiverDisable( ) { PLIST_ENTRY ListEntry; + PXENVIF_FRONTEND Frontend; + + Frontend = Receiver->Frontend; for (ListEntry = Receiver->List.Blink; ListEntry != &Receiver->List; @@ -2751,6 +2764,8 @@ ReceiverDisable( PXENVIF_RECEIVER_RING Ring; Ring = CONTAINING_RECORD(ListEntry, XENVIF_RECEIVER_RING, ListEntry); + if (Ring->Index >= FrontendGetQueueCount(Frontend)) + continue; __ReceiverRingDisable(Ring); } @@ -2777,6 +2792,8 @@ ReceiverDisconnect( PXENVIF_RECEIVER_RING Ring; Ring = CONTAINING_RECORD(ListEntry, XENVIF_RECEIVER_RING, ListEntry); + if (Ring->Index >= FrontendGetQueueCount(Frontend)) + continue; __ReceiverRingDisconnect(Ring); } @@ -2842,6 +2859,9 @@ ReceiverSetOffloadOptions( ) { PLIST_ENTRY ListEntry; + PXENVIF_FRONTEND Frontend; + + Frontend = Receiver->Frontend; if (Receiver->AllowGsoPackets == 0) { Warning("RECEIVER GSO DISALLOWED\n"); @@ -2855,6 +2875,8 @@ ReceiverSetOffloadOptions( PXENVIF_RECEIVER_RING Ring; Ring = CONTAINING_RECORD(ListEntry, XENVIF_RECEIVER_RING, ListEntry); + if (Ring->Index >= FrontendGetQueueCount(Frontend)) + continue; __ReceiverRingSetOffloadOptions(Ring, Options); } diff --git a/src/xenvif/transmitter.c b/src/xenvif/transmitter.c index 477fecc..c5b05b3 100644 --- a/src/xenvif/transmitter.c +++ b/src/xenvif/transmitter.c @@ -3494,6 +3494,8 @@ TransmitterConnect( PXENVIF_TRANSMITTER_RING Ring; Ring = CONTAINING_RECORD(ListEntry, XENVIF_TRANSMITTER_RING, ListEntry); + if (Ring->Index >= FrontendGetQueueCount(Frontend)) + continue; status = __TransmitterRingConnect(Ring); if (!NT_SUCCESS(status)) @@ -3526,6 +3528,8 @@ fail3: PXENVIF_TRANSMITTER_RING Ring; Ring = CONTAINING_RECORD(ListEntry, XENVIF_TRANSMITTER_RING, ListEntry); + if (Ring->Index >= FrontendGetQueueCount(Frontend)) + continue; __TransmitterRingDisconnect(Ring); @@ -3553,6 +3557,9 @@ TransmitterStoreWrite( { PLIST_ENTRY ListEntry; NTSTATUS status; + PXENVIF_FRONTEND Frontend; + + Frontend = Transmitter->Frontend; for (ListEntry = Transmitter->List.Flink; ListEntry != &Transmitter->List; @@ -3560,6 +3567,8 @@ TransmitterStoreWrite( PXENVIF_TRANSMITTER_RING Ring; Ring = CONTAINING_RECORD(ListEntry, XENVIF_TRANSMITTER_RING, ListEntry); + if (Ring->Index >= FrontendGetQueueCount(Frontend)) + continue; status = __TransmitterRingStoreWrite(Ring, Transaction); if (!NT_SUCCESS(status)) @@ -3580,6 +3589,9 @@ TransmitterEnable( ) { PLIST_ENTRY ListEntry; + PXENVIF_FRONTEND Frontend; + + Frontend = Transmitter->Frontend; for (ListEntry = Transmitter->List.Flink; ListEntry != &Transmitter->List; @@ -3587,6 +3599,8 @@ TransmitterEnable( PXENVIF_TRANSMITTER_RING Ring; Ring = CONTAINING_RECORD(ListEntry, XENVIF_TRANSMITTER_RING, ListEntry); + if (Ring->Index >= FrontendGetQueueCount(Frontend)) + continue; __TransmitterRingEnable(Ring); } @@ -3600,6 +3614,9 @@ TransmitterDisable( ) { PLIST_ENTRY ListEntry; + PXENVIF_FRONTEND Frontend; + + Frontend = Transmitter->Frontend; for (ListEntry = Transmitter->List.Blink; ListEntry != &Transmitter->List; @@ -3607,6 +3624,8 @@ TransmitterDisable( PXENVIF_TRANSMITTER_RING Ring; Ring = CONTAINING_RECORD(ListEntry, XENVIF_TRANSMITTER_RING, ListEntry); + if (Ring->Index >= FrontendGetQueueCount(Frontend)) + continue; __TransmitterRingDisable(Ring); } @@ -3633,6 +3652,8 @@ TransmitterDisconnect( PXENVIF_TRANSMITTER_RING Ring; Ring = CONTAINING_RECORD(ListEntry, XENVIF_TRANSMITTER_RING, ListEntry); + if (Ring->Index >= FrontendGetQueueCount(Frontend)) + continue; __TransmitterRingDisconnect(Ring); } @@ -3943,6 +3964,9 @@ TransmitterAbortPackets( { PLIST_ENTRY ListEntry; KIRQL Irql; + PXENVIF_FRONTEND Frontend; + + Frontend = Transmitter->Frontend; KeRaiseIrql(DISPATCH_LEVEL, &Irql); @@ -3952,6 +3976,8 @@ TransmitterAbortPackets( PXENVIF_TRANSMITTER_RING Ring; Ring = CONTAINING_RECORD(ListEntry, XENVIF_TRANSMITTER_RING, ListEntry); + if (Ring->Index >= FrontendGetQueueCount(Frontend)) + continue; __TransmitterRingAbortPackets(Ring); } -- 1.9.4.msysgit.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 |