From 781596b3e6e52de314d46fd69bcad40d7c7f6d58 Mon Sep 17 00:00:00 2001 From: sleybo Date: Mon, 20 Nov 2006 13:11:54 +0000 Subject: [PATCH] [IPOIB] payload MTU is configured from the registry values: 60-2044 bytes Singed-off-by:Anatoly Lisenko (anatolyl@voltaire.com) git-svn-id: svn://openib.tc.cornell.edu/gen1@545 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86 --- trunk/ulp/ipoib/kernel/ipoib_adapter.h | 2 ++ trunk/ulp/ipoib/kernel/ipoib_driver.c | 22 +++++++++++++++++----- trunk/ulp/ipoib/kernel/ipoib_driver.h | 6 ++++-- trunk/ulp/ipoib/kernel/ipoib_port.c | 8 ++++---- trunk/ulp/ipoib/kernel/netipoib.inf | 6 ++++++ 5 files changed, 33 insertions(+), 11 deletions(-) diff --git a/trunk/ulp/ipoib/kernel/ipoib_adapter.h b/trunk/ulp/ipoib/kernel/ipoib_adapter.h index 074f1b56..8497fe7b 100644 --- a/trunk/ulp/ipoib/kernel/ipoib_adapter.h +++ b/trunk/ulp/ipoib/kernel/ipoib_adapter.h @@ -70,6 +70,8 @@ typedef struct _ipoib_params uint32_t sa_timeout; uint32_t sa_retry_cnt; uint32_t recv_pool_ratio; + uint32_t payload_mtu; + uint32_t xfer_block_size; mac_addr_t conf_mac; } ipoib_params_t; diff --git a/trunk/ulp/ipoib/kernel/ipoib_driver.c b/trunk/ulp/ipoib/kernel/ipoib_driver.c index d791243d..c17d315f 100644 --- a/trunk/ulp/ipoib/kernel/ipoib_driver.c +++ b/trunk/ulp/ipoib/kernel/ipoib_driver.c @@ -525,6 +525,18 @@ ipoib_get_adapter_params( } p_adapter->params.recv_pool_ratio = p_param->ParameterData.IntegerData; + /* required: MTU size. */ + RtlInitUnicodeString( &keyword, L"PayloadMtu" ); + NdisReadConfiguration( + &status, &p_param, h_config, &keyword, NdisParameterInteger ); + if( status != NDIS_STATUS_SUCCESS ) + { + IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR, + ("PayloadMtu parameter missing. Use the default.\n") ); + return status; + } + p_adapter->params.payload_mtu = p_param->ParameterData.IntegerData; + p_adapter->params.xfer_block_size = (sizeof(eth_hdr_t) + p_adapter->params.payload_mtu); NdisReadNetworkAddress( &status, &mac, &len, h_config ); ETH_COPY_NETWORK_ADDRESS( p_adapter->params.conf_mac.addr, p_adapter->mac.addr ); @@ -705,7 +717,7 @@ ipoib_initialize( #if IPOIB_USE_DMA status = - NdisMInitializeScatterGatherDma( h_adapter, TRUE, XFER_BLOCK_SIZE ); + NdisMInitializeScatterGatherDma( h_adapter, TRUE, p_adapter->params.xfer_block_size ); if( status != NDIS_STATUS_SUCCESS ) { ipoib_destroy_adapter( p_adapter ); @@ -889,7 +901,7 @@ ipoib_query_info( case OID_GEN_MAXIMUM_FRAME_SIZE: IPOIB_PRINT( TRACE_LEVEL_INFORMATION,IPOIB_DBG_OID, ("Port %d received query for OID_GEN_MAXIMUM_FRAME_SIZE\n", port_num) ); - info = PAYLOAD_MTU; + info = p_adapter->params.payload_mtu; break; case OID_GEN_LINK_SPEED: @@ -927,14 +939,14 @@ ipoib_query_info( case OID_GEN_TRANSMIT_BUFFER_SPACE: IPOIB_PRINT( TRACE_LEVEL_INFORMATION,IPOIB_DBG_OID, ("Port %d received query for OID_GEN_TRANSMIT_BUFFER_SPACE\n", port_num) ); - info = p_adapter->params.sq_depth * XFER_BLOCK_SIZE; + info = p_adapter->params.sq_depth * p_adapter->params.xfer_block_size; break; case OID_GEN_RECEIVE_BUFFER_SPACE: IPOIB_PRINT( TRACE_LEVEL_INFORMATION,IPOIB_DBG_OID, ("Port %d received query for OID_GEN_TRANSMIT_BUFFER_SPACE " "or OID_GEN_RECEIVE_BUFFER_SPACE\n", port_num) ); - info = p_adapter->params.rq_depth * XFER_BLOCK_SIZE; + info = p_adapter->params.rq_depth * p_adapter->params.xfer_block_size; break; case OID_GEN_MAXIMUM_LOOKAHEAD: @@ -948,7 +960,7 @@ ipoib_query_info( "OID_GEN_TRANSMIT_BLOCK_SIZE or " "OID_GEN_RECEIVE_BLOCK_SIZE or " "OID_GEN_MAXIMUM_TOTAL_SIZE\n", port_num) ); - info = XFER_BLOCK_SIZE; + info = p_adapter->params.xfer_block_size; break; case OID_GEN_VENDOR_ID: diff --git a/trunk/ulp/ipoib/kernel/ipoib_driver.h b/trunk/ulp/ipoib/kernel/ipoib_driver.h index ee4f5888..f27c3885 100644 --- a/trunk/ulp/ipoib/kernel/ipoib_driver.h +++ b/trunk/ulp/ipoib/kernel/ipoib_driver.h @@ -52,14 +52,16 @@ * Header length as defined by IPoIB spec: * http://www.ietf.org/internet-drafts/draft-ietf-ipoib-ip-over-infiniband-04.txt */ -#define PAYLOAD_MTU (IB_MTU - sizeof(ipoib_hdr_t)) + +#define MAX_PAYLOAD_MTU (IB_MTU - sizeof(ipoib_hdr_t)) + /* * Only the protocol type is sent as part of the UD payload * since the rest of the Ethernet header is encapsulated in the * various IB headers. We report out buffer space as if we * transmit the ethernet headers. */ -#define XFER_BLOCK_SIZE (sizeof(eth_hdr_t) + PAYLOAD_MTU) +#define MAX_XFER_BLOCK_SIZE (sizeof(eth_hdr_t) + MAX_PAYLOAD_MTU) typedef struct _ipoib_globals diff --git a/trunk/ulp/ipoib/kernel/ipoib_port.c b/trunk/ulp/ipoib/kernel/ipoib_port.c index cb85fba5..36ef5861 100644 --- a/trunk/ulp/ipoib/kernel/ipoib_port.c +++ b/trunk/ulp/ipoib/kernel/ipoib_port.c @@ -955,7 +955,7 @@ __buf_mgr_construct( p_port->buf_mgr.h_buffer_pool = NULL; ExInitializeNPagedLookasideList( &p_port->buf_mgr.send_buf_list, - NULL, NULL, 0, XFER_BLOCK_SIZE, 'bipi', 0 ); + NULL, NULL, 0, MAX_XFER_BLOCK_SIZE, 'bipi', 0 ); p_port->buf_mgr.h_send_pkt_pool = NULL; p_port->buf_mgr.h_send_buf_pool = NULL; @@ -2715,7 +2715,7 @@ __send_copy( } NdisAllocateBuffer( &status, &p_buf, p_port->buf_mgr.h_send_buf_pool, - p_desc->p_buf, XFER_BLOCK_SIZE ); + p_desc->p_buf, p_port->p_adapter->params.xfer_block_size ); if( status != NDIS_STATUS_SUCCESS ) { NdisFreePacket( p_packet ); @@ -2798,7 +2798,7 @@ __send_gen( } CL_ASSERT( tot_len > sizeof(eth_hdr_t) ); - CL_ASSERT( tot_len <= XFER_BLOCK_SIZE ); + CL_ASSERT( tot_len <= p_port->p_adapter->params.xfer_block_size ); /* * Assume that the ethernet header is always fully contained * in the first page of the first MDL. This makes for much @@ -2818,7 +2818,7 @@ __send_gen( CL_ASSERT( buf_len >= sizeof(eth_hdr_t) ); /* Skip the ethernet header. */ buf_len -= sizeof(eth_hdr_t); - CL_ASSERT( buf_len <= PAYLOAD_MTU ); + CL_ASSERT( buf_len <= p_port->p_adapter->params.payload_mtu ); if( buf_len ) { /* The ethernet header is a subset of this MDL. */ diff --git a/trunk/ulp/ipoib/kernel/netipoib.inf b/trunk/ulp/ipoib/kernel/netipoib.inf index 546a01b7..a2b91365 100644 --- a/trunk/ulp/ipoib/kernel/netipoib.inf +++ b/trunk/ulp/ipoib/kernel/netipoib.inf @@ -118,6 +118,12 @@ HKR, Ndi\Params\RecvRatio, Optional, 0, "0" HKR, Ndi\Params\RecvRatio, Min, 0, "1" HKR, Ndi\Params\RecvRatio, Max, 0, "10" +HKR, Ndi\Params\PayloadMtu, ParamDesc, 0, "Payload Mtu size" +HKR, Ndi\Params\PayloadMtu, Type, 0, "dword" +HKR, Ndi\Params\PayloadMtu, Default, 0, "2044" +HKR, Ndi\Params\PayloadMtu, Min, 0, "60" +HKR, Ndi\Params\PayloadMtu, Max, 0, "2044" + [IpoibService] DisplayName = %IpoibServiceDispName% ServiceType = 1 ;%SERVICE_KERNEL_DRIVER% -- 2.41.0