[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH] Update to VIF interface version 5
Use version 5 of the interface to avoid the shutdown race present in version 4. Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx> --- include/vif_interface.h | 48 +++++++++++++++++++++++++++++++++++++++++++++--- src/xennet.inf | 6 +++--- src/xennet/transmitter.c | 26 ++++++++++++++++---------- 3 files changed, 64 insertions(+), 16 deletions(-) diff --git a/include/vif_interface.h b/include/vif_interface.h index 27c5d2d..5a064fd 100644 --- a/include/vif_interface.h +++ b/include/vif_interface.h @@ -460,6 +460,19 @@ typedef NTSTATUS IN PLIST_ENTRY List ); +typedef VOID +(*XENVIF_VIF_TRANSMITTER_QUEUE_PACKET_V4)( + IN PINTERFACE Interface, + IN PMDL Mdl, + IN ULONG Offset, + IN ULONG Length, + IN XENVIF_VIF_OFFLOAD_OPTIONS OffloadOptions, + IN USHORT MaximumSegmentSize, + IN USHORT TagControlInformation, + IN PXENVIF_PACKET_HASH Hash, + IN PVOID Cookie + ); + /*! \typedef XENVIF_VIF_TRANSMITTER_QUEUE_PACKET \brief Queue a packet at the provider's transmit side @@ -473,7 +486,7 @@ typedef NTSTATUS \param Hash Hash information for the packet \param Cookie A cookie specified by the caller that will be passed to the XENVIF_TRANSMITTER_RETURN_PACKET callback */ -typedef VOID +typedef NTSTATUS (*XENVIF_VIF_TRANSMITTER_QUEUE_PACKET)( IN PINTERFACE Interface, IN PMDL Mdl, @@ -766,6 +779,35 @@ struct _XENVIF_VIF_INTERFACE_V4 { XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS ReceiverSetOffloadOptions; XENVIF_VIF_RECEIVER_SET_BACKFILL_SIZE ReceiverSetBackfillSize; XENVIF_VIF_RECEIVER_QUERY_RING_SIZE ReceiverQueryRingSize; + XENVIF_VIF_TRANSMITTER_QUEUE_PACKET_V4 TransmitterQueuePacketVersion4; + XENVIF_VIF_TRANSMITTER_QUERY_OFFLOAD_OPTIONS TransmitterQueryOffloadOptions; + XENVIF_VIF_TRANSMITTER_QUERY_LARGE_PACKET_SIZE TransmitterQueryLargePacketSize; + XENVIF_VIF_TRANSMITTER_QUERY_RING_SIZE TransmitterQueryRingSize; + XENVIF_VIF_MAC_QUERY_STATE MacQueryState; + XENVIF_VIF_MAC_QUERY_MAXIMUM_FRAME_SIZE MacQueryMaximumFrameSize; + XENVIF_VIF_MAC_QUERY_PERMANENT_ADDRESS MacQueryPermanentAddress; + XENVIF_VIF_MAC_QUERY_CURRENT_ADDRESS MacQueryCurrentAddress; + XENVIF_VIF_MAC_QUERY_MULTICAST_ADDRESSES MacQueryMulticastAddresses; + XENVIF_VIF_MAC_SET_MULTICAST_ADDRESSES MacSetMulticastAddresses; + XENVIF_VIF_MAC_SET_FILTER_LEVEL MacSetFilterLevel; + XENVIF_VIF_MAC_QUERY_FILTER_LEVEL MacQueryFilterLevel; +}; + +/*! \struct _XENVIF_VIF_INTERFACE_V5 + \brief VIF interface version 5 + \ingroup interfaces +*/ +struct _XENVIF_VIF_INTERFACE_V5 { + INTERFACE Interface; + XENVIF_VIF_ACQUIRE Acquire; + XENVIF_VIF_RELEASE Release; + XENVIF_VIF_ENABLE Enable; + XENVIF_VIF_DISABLE Disable; + XENVIF_VIF_QUERY_STATISTIC QueryStatistic; + XENVIF_VIF_RECEIVER_RETURN_PACKET ReceiverReturnPacket; + XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS ReceiverSetOffloadOptions; + XENVIF_VIF_RECEIVER_SET_BACKFILL_SIZE ReceiverSetBackfillSize; + XENVIF_VIF_RECEIVER_QUERY_RING_SIZE ReceiverQueryRingSize; XENVIF_VIF_TRANSMITTER_QUEUE_PACKET TransmitterQueuePacket; XENVIF_VIF_TRANSMITTER_QUERY_OFFLOAD_OPTIONS TransmitterQueryOffloadOptions; XENVIF_VIF_TRANSMITTER_QUERY_LARGE_PACKET_SIZE TransmitterQueryLargePacketSize; @@ -780,7 +822,7 @@ struct _XENVIF_VIF_INTERFACE_V4 { XENVIF_VIF_MAC_QUERY_FILTER_LEVEL MacQueryFilterLevel; }; -typedef struct _XENVIF_VIF_INTERFACE_V4 XENVIF_VIF_INTERFACE, *PXENVIF_VIF_INTERFACE; +typedef struct _XENVIF_VIF_INTERFACE_V5 XENVIF_VIF_INTERFACE, *PXENVIF_VIF_INTERFACE; /*! \def XENVIF_VIF \brief Macro at assist in method invocation @@ -791,6 +833,6 @@ typedef struct _XENVIF_VIF_INTERFACE_V4 XENVIF_VIF_INTERFACE, *PXENVIF_VIF_INTER #endif // _WINDLL #define XENVIF_VIF_INTERFACE_VERSION_MIN 2 -#define XENVIF_VIF_INTERFACE_VERSION_MAX 4 +#define XENVIF_VIF_INTERFACE_VERSION_MAX 5 #endif // _XENVIF_INTERFACE_H diff --git a/src/xennet.inf b/src/xennet.inf index 88aaac4..058b5ac 100644 --- a/src/xennet.inf +++ b/src/xennet.inf @@ -61,9 +61,9 @@ xennet_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@MICRO_VERSION@_@BUILD_NUMBER@.dll ; DisplayName Section DeviceID ; ----------- ------- -------- -%XenNetDesc% =XenNet_Inst, XENVIF\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_NET&REV_08000006 -%XenNetDesc% =XenNet_Inst, XENVIF\VEN_@VENDOR_PREFIX@0001&DEV_NET&REV_08000006 -%XenNetDesc% =XenNet_Inst, XENVIF\VEN_@VENDOR_PREFIX@0002&DEV_NET&REV_08000006 +%XenNetDesc% =XenNet_Inst, XENVIF\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_NET&REV_08000007 +%XenNetDesc% =XenNet_Inst, XENVIF\VEN_@VENDOR_PREFIX@0001&DEV_NET&REV_08000007 +%XenNetDesc% =XenNet_Inst, XENVIF\VEN_@VENDOR_PREFIX@0002&DEV_NET&REV_08000007 [XenNet_Inst] Characteristics=0x84 diff --git a/src/xennet/transmitter.c b/src/xennet/transmitter.c index 5574b9c..b5e110a 100644 --- a/src/xennet/transmitter.c +++ b/src/xennet/transmitter.c @@ -252,21 +252,27 @@ TransmitterSendNetBufferLists( while (NetBuffer != NULL) { PVOID Cookie = NetBufferList; XENVIF_PACKET_HASH Hash; + NTSTATUS status; ListReserved->Reference++; Hash.Algorithm = XENVIF_PACKET_HASH_ALGORITHM_NONE; - XENVIF_VIF(TransmitterQueuePacket, - AdapterGetVifInterface(Transmitter->Adapter), - NET_BUFFER_CURRENT_MDL(NetBuffer), - NET_BUFFER_CURRENT_MDL_OFFSET(NetBuffer), - NET_BUFFER_DATA_LENGTH(NetBuffer), - OffloadOptions, - MaximumSegmentSize, - TagControlInformation, - &Hash, - Cookie); + status = XENVIF_VIF(TransmitterQueuePacket, + AdapterGetVifInterface(Transmitter->Adapter), + NET_BUFFER_CURRENT_MDL(NetBuffer), + NET_BUFFER_CURRENT_MDL_OFFSET(NetBuffer), + NET_BUFFER_DATA_LENGTH(NetBuffer), + OffloadOptions, + MaximumSegmentSize, + TagControlInformation, + &Hash, + Cookie); + if (!NT_SUCCESS(status)) { + __TransmitterReturnPacket(Transmitter, Cookie, + NDIS_STATUS_NOT_ACCEPTED); + break; + } NetBuffer = NET_BUFFER_NEXT_NB(NetBuffer); } -- 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 |