[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [win-pv-devel] [PATCH 06/10] Dont call through to inactive queues
> -----Original Message----- > From: Owen Smith [mailto:owen.smith@xxxxxxxxxx] > Sent: 12 November 2014 16:39 > To: win-pv-devel@xxxxxxxxxxxxxxxxxxxx > Cc: Paul Durrant; Owen Smith > Subject: [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> In isolation, this is fine. Paul. > --- > 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 |