Index: ulp/ipoib/kernel/ipoib_port.c
===================================================================
--- ulp/ipoib/kernel/ipoib_port.c	(revision 1521)
+++ ulp/ipoib/kernel/ipoib_port.c	(working copy)
@@ -2582,8 +2582,17 @@
 	}
 
 	/* Get the checksums directly from packet information. */
+	if ( !p_port->p_adapter->params.recv_chksum_offload )
+	{
+		p_desc->ndis_csum.Value = 0;
+		p_desc->ndis_csum.Receive.NdisPacketTcpChecksumSucceeded = TRUE;
+		p_desc->ndis_csum.Receive.NdisPacketUdpChecksumSucceeded = TRUE;
+		p_desc->ndis_csum.Receive.NdisPacketIpChecksumSucceeded = TRUE;
+	}
+
 	NDIS_PER_PACKET_INFO_FROM_PACKET( *pp_packet, TcpIpChecksumPacketInfo ) = 
 		(PVOID) (uintn_t) (p_desc->ndis_csum.Value);
+
 	ipoib_inc_recv_stat( p_port->p_adapter, type, p_desc->len );
 
 	IPOIB_EXIT( IPOIB_DBG_RECV );
@@ -3862,7 +3871,7 @@
 	p_desc->wr.p_next = NULL;
 	p_desc->wr.wr_id = (uintn_t)p_desc->p_pkt;
 
-	if(p_port->p_adapter->params.send_chksum_offload & 
+	if(p_port->p_adapter->params.send_chksum_offload && 
 		(pChecksumPktInfo->Transmit.NdisPacketChecksumV4 || pChecksumPktInfo->Transmit.NdisPacketChecksumV6))
 	{
 		// Set transimition checksum offloading 
