diff options
| author | Ron Mercer <ron.mercer@qlogic.com> | 2009-02-12 16:38:03 -0800 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2009-02-12 16:38:03 -0800 | 
| commit | 0d979f74a920bcc18eb451d363f02083a625294c (patch) | |
| tree | 944bbf8282c99fc3d71b94559e7dc74af263604a | |
| parent | 06a3d510faf6fdec43daaf6f4d94fe24edf650cd (diff) | |
qlge: bugfix: Fix TSO breakage.
Moved the buffer mapping to a point after TSO logic has modified the
iph->check field. We were seeing stale data on the PCIe bus.
Signed-off-by: Ron Mercer <ron.mercer@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | drivers/net/qlge/qlge_main.c | 10 | 
1 files changed, 6 insertions, 4 deletions
| diff --git a/drivers/net/qlge/qlge_main.c b/drivers/net/qlge/qlge_main.c index fc7d210ec96b..54b0a9e9d898 100644 --- a/drivers/net/qlge/qlge_main.c +++ b/drivers/net/qlge/qlge_main.c @@ -1936,10 +1936,6 @@ static int qlge_send(struct sk_buff *skb, struct net_device *ndev)  	tx_ring_desc = &tx_ring->q[tx_ring->prod_idx];  	mac_iocb_ptr = tx_ring_desc->queue_entry;  	memset((void *)mac_iocb_ptr, 0, sizeof(mac_iocb_ptr)); -	if (ql_map_send(qdev, mac_iocb_ptr, skb, tx_ring_desc) != NETDEV_TX_OK) { -		QPRINTK(qdev, TX_QUEUED, ERR, "Could not map the segments.\n"); -		return NETDEV_TX_BUSY; -	}  	mac_iocb_ptr->opcode = OPCODE_OB_MAC_IOCB;  	mac_iocb_ptr->tid = tx_ring_desc->index; @@ -1965,6 +1961,12 @@ static int qlge_send(struct sk_buff *skb, struct net_device *ndev)  		ql_hw_csum_setup(skb,  				 (struct ob_mac_tso_iocb_req *)mac_iocb_ptr);  	} +	if (ql_map_send(qdev, mac_iocb_ptr, skb, tx_ring_desc) != +			NETDEV_TX_OK) { +		QPRINTK(qdev, TX_QUEUED, ERR, +				"Could not map the segments.\n"); +		return NETDEV_TX_BUSY; +	}  	QL_DUMP_OB_MAC_IOCB(mac_iocb_ptr);  	tx_ring->prod_idx++;  	if (tx_ring->prod_idx == tx_ring->wq_len) | 
