[ofw] [IPoIB_CM] patch for two MTU parameters. Was [IPoIB_CM] Problems with large pings

Alex Estrin alex.estrin at qlogic.com
Tue Jan 20 11:08:51 PST 2009


Hello,

> -----Original Message-----
> From: Alex Naslednikov [mailto:xalex at mellanox.co.il] 
> Sent: Monday, January 12, 2009 2:09 PM
> To: Alex Estrin
> Cc: ofw at lists.openfabrics.org
> Subject: RE: [ofw] [IPoIB_CM] Problems with large pings
> 
> Hello, Alex,
> Thank you for the patch, it looks good.
> I still have one remark regards (ud) payload :
>    If one uses IPoIB in UD mode, he will not have the 
> possibility now to
> configure MTU to the value lower than DEFAULT_MTU.
> 
> I would like to propose 2 solutions:
> 1.  using 2 different parameters for UD and CM, or
> 2. If CM is disabled, ud payload will take the value from the 
> registry;
> otherwise, cm payload will take the value from the registry 
> and UD will
> take the maximum possible value 
> 
> XaleX
> 

I thought more about your proposal of using 2 MTU parameters instead of one.
I think it makes sense as it will be less confusing for a customer, 
also will simplify a bit initialization code.
Proposed patch will create and use two MTU parameters.

Please review.


Index: kernel/ipoib_driver.c
===================================================================
--- kernel/ipoib_driver.c	(revision 1856)
+++ kernel/ipoib_driver.c	(working copy)
@@ -160,11 +160,12 @@
 	{NDIS_STRING_CONST("SaTimeout"),        1, IPOIB_OFFSET(sa_timeout),            IPOIB_SIZE(sa_timeout),         1000,       250,    UINT_MAX},
 	{NDIS_STRING_CONST("SaRetries"),        1, IPOIB_OFFSET(sa_retry_cnt),          IPOIB_SIZE(sa_retry_cnt),       10,         1,      UINT_MAX},
 	{NDIS_STRING_CONST("RecvRatio"),        1, IPOIB_OFFSET(recv_pool_ratio),       IPOIB_SIZE(recv_pool_ratio),    1,          1,      10},
-	{NDIS_STRING_CONST("PayloadMtu"),       1, IPOIB_OFFSET(payload_mtu),           IPOIB_SIZE(payload_mtu),        2044,       512,   MAX_CM_PAYLOAD_MTU},
+	{NDIS_STRING_CONST("PayloadMtu"),       1, IPOIB_OFFSET(payload_mtu),           IPOIB_SIZE(payload_mtu),        2044,       512,   MAX_UD_PAYLOAD_MTU},
 	{NDIS_STRING_CONST("lso"),              0, IPOIB_OFFSET(lso),                   IPOIB_SIZE(lso),                0,          0,      1},
 	{NDIS_STRING_CONST("MCLeaveRescan"),    1, IPOIB_OFFSET(mc_leave_rescan),       IPOIB_SIZE(mc_leave_rescan),    260,        1,    3600},
 	{NDIS_STRING_CONST("BCJoinRetry"),	    1, IPOIB_OFFSET(bc_join_retry),		    IPOIB_SIZE(bc_join_retry),      50,         0,    1000},
-	{NDIS_STRING_CONST("CmEnabled"),        0, IPOIB_OFFSET(cm_enabled),            IPOIB_SIZE(cm_enabled),         FALSE,     FALSE, TRUE}
+	{NDIS_STRING_CONST("CmEnabled"),        0, IPOIB_OFFSET(cm_enabled),            IPOIB_SIZE(cm_enabled),         FALSE,     FALSE, TRUE},
+	{NDIS_STRING_CONST("CmPayloadMtu"),     1, IPOIB_OFFSET(cm_payload_mtu),        IPOIB_SIZE(cm_payload_mtu),     MAX_CM_PAYLOAD_MTU, 512, MAX_CM_PAYLOAD_MTU}
 
 };  
 
@@ -614,18 +615,18 @@
 				EVENT_IPOIB_CONNECTED_MODE_ERR, 1, 0xbadc0de0 );
 		}
 	}
-	/* adjust ud mtu upper limit if cm is disabled */
-	if( !p_adapter->params.cm_enabled )
+
+	if( p_adapter->params.cm_enabled )
 	{
-		p_adapter->params.payload_mtu = 
-			min( MAX_UD_PAYLOAD_MTU, p_adapter->params.payload_mtu );
-		p_adapter->params.xfer_block_size = 
-			(sizeof(eth_hdr_t) + p_adapter->params.payload_mtu);
+		p_adapter->params.cm_xfer_block_size = 
+			(sizeof(eth_hdr_t) + p_adapter->params.cm_payload_mtu);
 	}
 
+	p_adapter->params.xfer_block_size = 
+		(sizeof(eth_hdr_t) + p_adapter->params.payload_mtu);
+
 	NdisReadNetworkAddress( &status, p_mac, p_len, h_config );
 
-
 	NdisCloseConfiguration( h_config );
 
 	IPOIB_EXIT( IPOIB_DBG_INIT );
Index: kernel/ipoib_port.c
===================================================================
--- kernel/ipoib_port.c	(revision 1856)
+++ kernel/ipoib_port.c	(working copy)
@@ -899,18 +899,12 @@
 
 	if( p_port->p_adapter->params.cm_enabled )
 	{
-		uint32_t	ud_payload_mtu = __port_attr_to_mtu_size( 
-			p_port->p_ca_attrs->p_port_attr[p_port->port_num - 1].mtu );
-		/* setup CM payload mtu */
-		p_port->p_adapter->params.cm_payload_mtu =
-			min( MAX_CM_PAYLOAD_MTU, p_port->p_adapter->params.payload_mtu );
-		p_port->p_adapter->params.cm_xfer_block_size = 
-			p_port->p_adapter->params.cm_payload_mtu + sizeof(eth_hdr_t);
-		
+		uint32_t payload_mtu = __port_attr_to_mtu_size( 
+			p_port->p_ca_attrs->p_port_attr[p_port->port_num - 1].mtu )
+			- sizeof(ipoib_hdr_t);
 		/* adjust ipoib UD payload MTU to actual port MTU size.	*/
-		/* TODO: should initialization fail if port mtu < 2048 ? */
 		p_port->p_adapter->params.payload_mtu = 
-			( max( DEFAULT_MTU, ud_payload_mtu ) -	sizeof(ipoib_hdr_t) );
+				max( DEFAULT_PAYLOAD_MTU, payload_mtu );
 		p_port->p_adapter->params.xfer_block_size = 
 			(sizeof(eth_hdr_t) + p_port->p_adapter->params.payload_mtu);
 	}
@@ -919,14 +913,19 @@
 	if ( !p_port->p_adapter->reset )
 	{
 		ULONG max_phys_mapping;
-
-		max_phys_mapping = p_port->p_adapter->params.cm_enabled ?
-			p_port->p_adapter->params.cm_xfer_block_size :
-			p_port->p_adapter->params.xfer_block_size;
-		max_phys_mapping = p_port->p_adapter->params.lso ?
-			max(LARGE_SEND_OFFLOAD_SIZE, max_phys_mapping): max_phys_mapping;
-		status =
-			NdisMInitializeScatterGatherDma( 
+		if( p_port->p_adapter->params.cm_enabled )
+		{
+			max_phys_mapping = p_port->p_adapter->params.cm_xfer_block_size;
+		}
+		else if( p_port->p_adapter->params.lso )
+		{
+			max_phys_mapping = LARGE_SEND_OFFLOAD_SIZE;
+		}
+		else
+		{
+			max_phys_mapping = p_port->p_adapter->params.xfer_block_size;
+		}
+		status = NdisMInitializeScatterGatherDma( 
 			p_port->p_adapter->h_adapter, TRUE, max_phys_mapping );
 		if( status != NDIS_STATUS_SUCCESS )
 		{
Index: kernel/netipoib-xp32.inf
===================================================================
--- kernel/netipoib-xp32.inf	(revision 1856)
+++ kernel/netipoib-xp32.inf	(working copy)
@@ -138,7 +138,7 @@
 HKR, Ndi\Params\PayloadMtu,		Type,		0, "dword"
 HKR, Ndi\Params\PayloadMtu,		Default,	0, "2044"
 HKR, Ndi\Params\PayloadMtu,		Min,		0, "512"
-HKR, Ndi\Params\PayloadMtu,		Max,		0, "65520"
+HKR, Ndi\Params\PayloadMtu,		Max,		0, "4092"
 
 HKR, Ndi\Params\MCLeaveRescan,		ParamDesc,	0, %MC_RESCAN_STR%
 HKR, Ndi\Params\MCLeaveRescan,		Type,		0, "dword"
@@ -168,6 +168,12 @@
 HKR, Ndi\Params\CmEnabled\enum,	"0",	0,	%DISABLED_STR%
 HKR, Ndi\Params\CmEnabled\enum,	"1",	0,	%ENABLED_STR%
 
+HKR, Ndi\Params\CmPayloadMtu,		ParamDesc,	0, %CONNECTED_MODE_MTU_STR%
+HKR, Ndi\Params\CmPayloadMtu,		Type,		0, "dword"
+HKR, Ndi\Params\CmPayloadMtu,		Default,	0, "65520"
+HKR, Ndi\Params\CmPayloadMtu,		Min,		0, "512"
+HKR, Ndi\Params\CmPayloadMtu,		Max,		0, "65520"
+
 [IpoibService]
 DisplayName     = %IpoibServiceDispName%
 ServiceType     = 1 ;%SERVICE_KERNEL_DRIVER%
@@ -269,3 +275,5 @@
 DISABLED_STR		= "Disabled"
 BYPASS_STR		= "Bypass"
 CONNECTED_MODE_STR	= "Connected mode"
+CONNECTED_MODE_MTU_STR	= "Connected Mode Payload Mtu size"
+
Index: kernel/netipoib.inx
===================================================================
--- kernel/netipoib.inx	(revision 1856)
+++ kernel/netipoib.inx	(working copy)
@@ -141,7 +141,7 @@
 HKR, Ndi\Params\PayloadMtu,		Type,		0, "dword"
 HKR, Ndi\Params\PayloadMtu,		Default,	0, "2044"
 HKR, Ndi\Params\PayloadMtu,		Min,		0, "512"
-HKR, Ndi\Params\PayloadMtu,		Max,		0, "65520"
+HKR, Ndi\Params\PayloadMtu,		Max,		0, "4092"
 
 HKR, Ndi\Params\MCLeaveRescan,		ParamDesc,	0, %MC_RESCAN_STR%
 HKR, Ndi\Params\MCLeaveRescan,		Type,		0, "dword"
@@ -171,6 +171,12 @@
 HKR, Ndi\Params\CmEnabled\enum,	"0",	0,	%DISABLED_STR%
 HKR, Ndi\Params\CmEnabled\enum,	"1",	0,	%ENABLED_STR%
 
+HKR, Ndi\Params\CmPayloadMtu,		ParamDesc,	0, %CONNECTED_MODE_MTU_STR%
+HKR, Ndi\Params\CmPayloadMtu,		Type,		0, "dword"
+HKR, Ndi\Params\CmPayloadMtu,		Default,	0, "65520"
+HKR, Ndi\Params\CmPayloadMtu,		Min,		0, "512"
+HKR, Ndi\Params\CmPayloadMtu,		Max,		0, "65520"
+
 [IpoibService]
 DisplayName     = %IpoibServiceDispName%
 ServiceType     = 1 ;%SERVICE_KERNEL_DRIVER%
@@ -275,4 +281,5 @@
 ENABLED_STR		= "Enabled"
 DISABLED_STR		= "Disabled"
 BYPASS_STR		= "Bypass"
-CONNECTED_MODE_STR	= "Connected mode"
\ No newline at end of file
+CONNECTED_MODE_STR	= "Connected mode"
+CONNECTED_MODE_MTU_STR	= "Connected Mode Payload Mtu size"


-------------- next part --------------
A non-text attachment was scrubbed...
Name: two_mtu_paramters.patch
Type: application/octet-stream
Size: 7338 bytes
Desc: two_mtu_paramters.patch
URL: <http://lists.openfabrics.org/pipermail/ofw/attachments/20090120/92ac624f/attachment.obj>


More information about the ofw mailing list