[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH 2/3] Remove header/data split support
During logo testing it became apparent that: a) This is predicated on support VLAN ID, which is not something we really want in a PV driver (since the backend network may actually be a VLAN). b) Turning on Viridian flags causes NDIS to stop enabling header/data split. (There's a call to NdisGetHypervisorInfo() in NdisMSetHDSplitAttributes()). Issue a) makes it undesirable to implement and b) makes it pretty much pointless having the code around. Hence this patch removes it. Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx> --- src/xennet.inf | 7 ---- src/xennet/adapter.c | 88 +-------------------------------------------------- src/xennet/receiver.c | 56 +------------------------------- src/xennet/receiver.h | 6 ---- 4 files changed, 2 insertions(+), 155 deletions(-) diff --git a/src/xennet.inf b/src/xennet.inf index 31b2f64..ae194b7 100644 --- a/src/xennet.inf +++ b/src/xennet.inf @@ -159,13 +159,6 @@ HKR, Ndi\params\LROIPv6, Optional, 0, "0" HKR, Ndi\params\LROIPv6\enum, "0", 0, %Disabled% HKR, Ndi\params\LROIPv6\enum, "1", 0, %Enabled% -HKR, Ndi\params\*HeaderDataSplit, ParamDesc, 0, %HeaderDataSplit% -HKR, Ndi\params\*HeaderDataSplit, Type, 0, "enum" -HKR, Ndi\params\*HeaderDataSplit, Default, 0, "0" -HKR, Ndi\params\*HeaderDataSplit, Optional, 0, "0" -HKR, Ndi\params\*HeaderDataSplit\enum, "0", 0, %Disabled% -HKR, Ndi\params\*HeaderDataSplit\enum, "1", 0, %Enabled% - [XenNet_Inst.Services] AddService=xennet,0x02,XenNet_Service,XenNet_EventLog diff --git a/src/xennet/adapter.c b/src/xennet/adapter.c index 806b1e3..dca9b7b 100644 --- a/src/xennet/adapter.c +++ b/src/xennet/adapter.c @@ -60,7 +60,6 @@ typedef struct _PROPERTIES { int lsov6; int lrov4; int lrov6; - ULONG HeaderDataSplit; } PROPERTIES, *PPROPERTIES; struct _XENNET_ADAPTER { @@ -139,7 +138,6 @@ static NDIS_OID XennetSupportedOids[] = OID_PNP_CAPABILITIES, OID_PNP_QUERY_POWER, OID_PNP_SET_POWER, - OID_GEN_HD_SPLIT_PARAMETERS, }; #define ADAPTER_POOL_TAG 'AteN' @@ -561,6 +559,7 @@ AdapterGetOffloadEncapsulation( TxOptions->OffloadIpVersion6UdpChecksum = 1; RxOptions = ReceiverOffloadOptions(Adapter->Receiver); + RxOptions->Value = 0; RxOptions->OffloadTagManipulation = 1; @@ -672,18 +671,6 @@ invalid_parameter: #undef CHANGE static NDIS_STATUS -AdapterGetHeaderDataSplitParameters( - IN PXENNET_ADAPTER Adapter, - IN PNDIS_HD_SPLIT_PARAMETERS Split - ) -{ - if (Split->HDSplitCombineFlags == NDIS_HD_SPLIT_COMBINE_ALL_HEADERS) - ReceiverSplitHeaderData(Adapter->Receiver, 0); - - return NDIS_STATUS_SUCCESS; -} - -static NDIS_STATUS AdapterQueryGeneralStatistics( IN PXENNET_ADAPTER Adapter, IN PNDIS_STATISTICS_INFO Info, @@ -1693,16 +1680,6 @@ AdapterSetInformation( } break; - case OID_GEN_HD_SPLIT_PARAMETERS: - BytesNeeded = sizeof(NDIS_HD_SPLIT_PARAMETERS); - if (BufferLength >= BytesNeeded) { - ndisStatus = AdapterGetHeaderDataSplitParameters(Adapter, - (PNDIS_HD_SPLIT_PARAMETERS)Buffer); - if (ndisStatus == NDIS_STATUS_SUCCESS) - BytesRead = sizeof(NDIS_HD_SPLIT_PARAMETERS); - } - break; - case OID_GEN_INTERRUPT_MODERATION: case OID_GEN_MACHINE_NAME: Warn = FALSE; @@ -2393,7 +2370,6 @@ AdapterGetAdvancedSettings( READ_PROPERTY(Adapter->Properties.lrov4, L"LROIPv4", 1, Handle); READ_PROPERTY(Adapter->Properties.lrov6, L"LROIPv6", 1, Handle); READ_PROPERTY(Adapter->Properties.need_csum_value, L"NeedChecksumValue", 1, Handle); - READ_PROPERTY(Adapter->Properties.HeaderDataSplit, L"*HeaderDataSplit", 1, Handle); NdisCloseConfiguration(Handle); @@ -2678,63 +2654,6 @@ AdapterSetOffloadAttributes( return ndisStatus; } -static NDIS_STATUS -AdapterSetHeaderDataSplitAttributes( - IN PXENNET_ADAPTER Adapter - ) -{ - NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES Attribs; - NDIS_HD_SPLIT_ATTRIBUTES Split; - NDIS_STATUS NdisStatus; - - RtlZeroMemory(&Attribs, sizeof(Attribs)); - - Attribs.Header.Type = NDIS_OBJECT_TYPE_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES; - Attribs.Header.Revision = NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES_REVISION_1; - Attribs.Header.Size = NDIS_SIZEOF_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES_REVISION_1; - - RtlZeroMemory(&Split, sizeof(Split)); - - Split.Header.Type = NDIS_OBJECT_TYPE_HD_SPLIT_ATTRIBUTES; - Split.Header.Revision = NDIS_HD_SPLIT_ATTRIBUTES_REVISION_1; - Split.Header.Size = NDIS_SIZEOF_HD_SPLIT_ATTRIBUTES_REVISION_1; - Split.HardwareCapabilities = - NDIS_HD_SPLIT_CAPS_SUPPORTS_HEADER_DATA_SPLIT | - NDIS_HD_SPLIT_CAPS_SUPPORTS_IPV4_OPTIONS | - NDIS_HD_SPLIT_CAPS_SUPPORTS_IPV6_EXTENSION_HEADERS | - NDIS_HD_SPLIT_CAPS_SUPPORTS_TCP_OPTIONS; - - if (Adapter->Properties.HeaderDataSplit != 0) - Split.CurrentCapabilities = Split.HardwareCapabilities; - - Attribs.HDSplitAttributes = &Split; - - NdisStatus = NdisMSetMiniportAttributes(Adapter->NdisAdapterHandle, - (PNDIS_MINIPORT_ADAPTER_ATTRIBUTES)&Attribs); - if (NdisStatus != NDIS_STATUS_SUCCESS) - goto fail1; - - if (Split.HDSplitFlags == NDIS_HD_SPLIT_ENABLE_HEADER_DATA_SPLIT) { - ASSERT(Split.CurrentCapabilities & NDIS_HD_SPLIT_CAPS_SUPPORTS_HEADER_DATA_SPLIT); - - Info("BackfillSize = %u\n", Split.BackfillSize); - Info("MaxHeaderSize = %u\n", Split.MaxHeaderSize); - - XENVIF_VIF(ReceiverSetBackfillSize, - &Adapter->VifInterface, - Split.BackfillSize); - - ReceiverSplitHeaderData(Adapter->Receiver, Split.MaxHeaderSize); - } - - return NDIS_STATUS_SUCCESS; - -fail1: - Error("fail1 (%08x)\n", NdisStatus); - - return NdisStatus; -} - NDIS_STATUS AdapterInitialize( IN NDIS_HANDLE Handle, @@ -2821,10 +2740,6 @@ AdapterInitialize( if (ndisStatus != NDIS_STATUS_SUCCESS) goto fail11; - ndisStatus = AdapterSetHeaderDataSplitAttributes(*Adapter); - if (ndisStatus != NDIS_STATUS_SUCCESS) - goto fail12; - RtlZeroMemory(&Dma, sizeof(NDIS_SG_DMA_DESCRIPTION)); Dma.Header.Type = NDIS_OBJECT_TYPE_SG_DMA_DESCRIPTION; Dma.Header.Revision = NDIS_SG_DMA_DESCRIPTION_REVISION_1; @@ -2842,7 +2757,6 @@ AdapterInitialize( return NDIS_STATUS_SUCCESS; -fail12: fail11: fail10: fail9: diff --git a/src/xennet/receiver.c b/src/xennet/receiver.c index 9f5ac60..08c6413 100644 --- a/src/xennet/receiver.c +++ b/src/xennet/receiver.c @@ -47,7 +47,6 @@ struct _XENNET_RECEIVER { LONG InNDIS; LONG InNDISMax; XENVIF_VIF_OFFLOAD_OPTIONS OffloadOptions; - ULONG MaxHeaderSize; }; #define RECEIVER_POOL_TAG 'RteN' @@ -177,10 +176,10 @@ __ReceiverReceivePacket( ) { PNET_BUFFER_LIST NetBufferList; - PNET_BUFFER NetBuffer; NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO csumInfo; UNREFERENCED_PARAMETER(MaximumSegmentSize); + UNREFERENCED_PARAMETER(Info); NetBufferList = __ReceiverAllocateNetBufferList(Receiver, Mdl, @@ -190,8 +189,6 @@ __ReceiverReceivePacket( if (NetBufferList == NULL) goto fail1; - NetBuffer = NET_BUFFER_LIST_FIRST_NB(NetBufferList); - NetBufferList->SourceHandle = AdapterGetHandle(Receiver->Adapter); csumInfo.Value = 0; @@ -221,48 +218,6 @@ __ReceiverReceivePacket( NET_BUFFER_LIST_INFO(NetBufferList, Ieee8021QNetBufferListInfo) = Ieee8021QInfo.Value; } - if (Info->IpHeader.Offset != 0) { - ULONG NblFlags; - PUCHAR InfoVa; - PIP_HEADER IpHeader; - NDIS_PHYSICAL_ADDRESS DataPhysicalAddress; - - NblFlags = NET_BUFFER_LIST_NBL_FLAGS(NetBufferList); - - InfoVa = MmGetSystemAddressForMdlSafe(Mdl, NormalPagePriority); - ASSERT(InfoVa != NULL); - InfoVa += Offset; - - IpHeader = (PIP_HEADER)(InfoVa + Info->IpHeader.Offset); - - if (IpHeader->Version == 4) { - NblFlags |= NDIS_NBL_FLAGS_IS_IPV4; - } else { - ASSERT3U(IpHeader->Version, ==, 6); - NblFlags |= NDIS_NBL_FLAGS_IS_IPV6; - } - - if (Info->TcpHeader.Offset != 0) - NblFlags |= NDIS_NBL_FLAGS_IS_TCP; - else if (Info->UdpHeader.Offset != 0) - NblFlags |= NDIS_NBL_FLAGS_IS_UDP; - - if (Mdl->Next != NULL && Info->Length < Receiver->MaxHeaderSize) { - NblFlags |= NDIS_NBL_FLAGS_HD_SPLIT; - if (NblFlags & (NDIS_NBL_FLAGS_IS_TCP | NDIS_NBL_FLAGS_IS_UDP)) - NblFlags |= NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD; - else - NblFlags |= NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER; - - DataPhysicalAddress.QuadPart = (ULONGLONG)MmGetMdlPfnArray(Mdl->Next)[0] << PAGE_SHIFT; - DataPhysicalAddress.QuadPart += Mdl->Next->ByteOffset; - - NET_BUFFER_DATA_PHYSICAL_ADDRESS(NetBuffer) = DataPhysicalAddress; - } - - NET_BUFFER_LIST_NBL_FLAGS(NetBufferList) = NblFlags; - } - return NetBufferList; fail2: @@ -461,12 +416,3 @@ ReceiverOffloadOptions( { return &Receiver->OffloadOptions; } - -VOID -ReceiverSplitHeaderData( - IN PXENNET_RECEIVER Receiver, - IN ULONG MaxHeaderSize - ) -{ - Receiver->MaxHeaderSize = MaxHeaderSize; -} diff --git a/src/xennet/receiver.h b/src/xennet/receiver.h index fbc0151..e6b2af1 100644 --- a/src/xennet/receiver.h +++ b/src/xennet/receiver.h @@ -73,10 +73,4 @@ ReceiverOffloadOptions( IN PXENNET_RECEIVER Receiver ); -extern VOID -ReceiverSplitHeaderData( - IN PXENNET_RECEIVER Receiver, - IN ULONG MaxHeaderSize - ); - #endif // _XENNET_RECEIVER_H_ -- 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 |