Commit 1d179332 authored by Stephen Hemminger's avatar Stephen Hemminger Committed by Jeff Garzik
Browse files

[PATCH] sky2: optimize checksum offload information



Since many packets have the same checksum starting offset and insertion
location; the driver can save the last information and only tell hardware
when it changes.

Signed-off-by: default avatarStephen Hemminger <shemminger@osdl.org>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent e07560cd
Loading
Loading
Loading
Loading
+11 −6
Original line number Diff line number Diff line
@@ -1280,6 +1280,10 @@ static int sky2_xmit_frame(struct sk_buff *skb, struct net_device *dev)
		if (skb->nh.iph->protocol == IPPROTO_UDP)
			ctrl |= UDPTCP;

		if (hdr != sky2->tx_csum_start || offset != sky2->tx_csum_offset) {
			sky2->tx_csum_start = hdr;
			sky2->tx_csum_offset = offset;

			le = get_tx_le(sky2);
			le->tx.csum.start = cpu_to_le16(hdr);
			le->tx.csum.offset = cpu_to_le16(offset);
@@ -1287,6 +1291,7 @@ static int sky2_xmit_frame(struct sk_buff *skb, struct net_device *dev)
			le->ctrl = 1;	/* one packet */
			le->opcode = OP_TCPLISW | HW_OWNER;
		}
	}

	le = get_tx_le(sky2);
	le->tx.addr = cpu_to_le32((u32) mapping);
+2 −0
Original line number Diff line number Diff line
@@ -1843,6 +1843,8 @@ struct sky2_port {
	u32		     tx_addr64;
	u16		     tx_pending;
	u16		     tx_last_mss;
	u16		     tx_csum_start;
	u16		     tx_csum_offset;

	struct ring_info     *rx_ring ____cacheline_aligned_in_smp;
	struct sky2_rx_le    *rx_le;