All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stephen Hemminger <shemminger@vyatta.com>
To: Masayuki Ohtake <masa-korg@dsn.okisemi.com>
Cc: LKML <linux-kernel@vger.kernel.org>,
	ML netdev <netdev@vger.kernel.org>,
	Greg Rose <gregory.v.rose@intel.com>,
	Maxime Bizon <mbizon@freebox.fr>,
	Kristoffer Glembo <kristoffer@gaisler.com>,
	Ralf Baechle <ralf@linux-mips.org>,
	John Linn <john.linn@xilinx.com>,
	Randy Dunlap <randy.dunlap@oracle.com>,
	"David S. Miller" <davem@davemloft.net>,
	MeeGo <meego-dev@meego.com>, "Wang, Qi" <qi.wang@intel.com>,
	"Wang, Yong Y" <yong.y.wang@intel.com>,
	Andrew <andrew.chih.howe.khor@intel.com>,
	Intel OTC <joel.clark@intel.com>,
	"Foster, Margie" <margie.foster@intel.com>,
	Toshiharu Okada <okada533@dsn.okisemi.com>,
	Tomoya Morinaga <morinaga526@dsn.okisemi.com>,
	Takahiro Shimizu <shimizu394@dsn.okisemi.com>
Subject: Re: [PATCH] Gigabit Ethernet driver of Topcliff PCH
Date: Thu, 26 Aug 2010 08:57:58 -0700	[thread overview]
Message-ID: <20100826085758.04ac4b44@nehalam> (raw)
In-Reply-To: <4C763A67.5040107@dsn.okisemi.com>

On Thu, 26 Aug 2010 18:56:55 +0900
Masayuki Ohtake <masa-korg@dsn.okisemi.com> wrote:

> +static void pch_gbe_tx_queue(struct pch_gbe_adapter *adapter,
> +		 struct pch_gbe_tx_ring *tx_ring, struct sk_buff *skb)
> +{
> +	struct pch_gbe_hw *hw = &adapter->hw;
> +	struct pch_gbe_tx_desc *tx_desc;
> +	struct pch_gbe_buffer *buffer_info;
> +	struct sk_buff *tmp_skb;
> +	unsigned int frame_ctrl;
> +	unsigned int ring_num;
> +	unsigned long flags;
> +
> +	PCH_GBE_DEBUG("%s\n", __func__);
> +
> +
> +	/*-- Set frame control --*/
> +	frame_ctrl = 0;
> +	if (unlikely(skb->len < PCH_GBE_SHORT_PKT))
> +		frame_ctrl |= PCH_GBE_TXD_CTRL_APAD;
> +	if (unlikely(adapter->tx_csum == FALSE))
> +		frame_ctrl |= PCH_GBE_TXD_CTRL_TCPIP_ACC_OFF;
> +
> +	/* Performs checksum processing */
> +	/*
> +	 * It is because the hardware accelerator does not support a checksum,
> +	 * when the received data size is less than 64 bytes.
> +	 */
> +	if ((skb->len < PCH_GBE_SHORT_PKT) && (adapter->tx_csum == TRUE)) {
> +		frame_ctrl |=
> +			PCH_GBE_TXD_CTRL_APAD | PCH_GBE_TXD_CTRL_TCPIP_ACC_OFF;
> +		if (skb->protocol == htons(ETH_P_IP)) {
> +			struct iphdr *iph = ip_hdr(skb);
> +			unsigned int offset;
> +			iph->check = 0;
> +			iph->check = ip_fast_csum((u8 *) iph, iph->ihl);
> +			offset = skb_transport_offset(skb);
> +			if (iph->protocol == IPPROTO_TCP) {
> +				skb->csum = 0;
> +				tcp_hdr(skb)->check = 0;
> +				skb->csum =
> +					skb_checksum(skb, offset,
> +						skb->len - offset, 0);
> +				tcp_hdr(skb)->check =
> +					csum_tcpudp_magic(iph->saddr,
> +							iph->daddr,
> +							skb->len - offset,
> +							IPPROTO_TCP, skb->csum);
> +			} else if (iph->protocol == IPPROTO_UDP) {
> +				skb->csum = 0;
> +				udp_hdr(skb)->check = 0;
> +				skb->csum =
> +					skb_checksum(skb, offset,
> +						skb->len - offset, 0);
> +				udp_hdr(skb)->check =
> +					csum_tcpudp_magic(iph->saddr,
> +							iph->daddr,
> +							skb->len - offset,
> +							IPPROTO_UDP, skb->csum);
> +			}
> +		}
> +	}


Why not something simpler using skb_checksum_help which is
safer since it handles case of shared skb correctly.

	if (skb->ip_summed = CHECKSUM_COMPLETE &&
            skb->len < PCH_GBE_SHORT_PKT) {
		frame_ctrl |=
			PCH_GBE_TXD_CTRL_APAD | PCH_GBE_TXD_CTRL_TCPIP_ACC_OFF;
		skb->ip_summed = CHECKSUM_NONE;
                if (skb_checksum_help(skb))
                      goto drop;  /* could not expand header to find space */
        }



-- 

  parent reply	other threads:[~2010-08-26 15:58 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-08-26  9:56 [PATCH] Gigabit Ethernet driver of Topcliff PCH Masayuki Ohtake
2010-08-26  9:56 ` Masayuki Ohtake
2010-08-26 10:28 ` Sam Ravnborg
2010-08-26 12:47   ` Masayuki Ohtake
2010-08-26 14:44 ` Joe Perches
2010-08-26 15:34 ` Stephen Hemminger
2010-08-26 15:40 ` Stephen Hemminger
2010-08-26 15:41 ` Stephen Hemminger
2010-08-26 15:42 ` Stephen Hemminger
2010-08-26 15:43 ` Stephen Hemminger
2010-08-26 15:45 ` Stephen Hemminger
2010-08-26 15:47 ` Stephen Hemminger
2010-08-26 15:57 ` Stephen Hemminger [this message]
2010-08-26 16:05 ` Stephen Hemminger
2010-08-26 16:16   ` Joe Perches
2010-08-26 16:29     ` Stephen Hemminger
2010-08-26 17:02       ` Joe Perches
2010-08-31 14:15 ` Masayuki Ohtake
2010-08-31 14:15   ` Masayuki Ohtake
2010-08-31 14:51   ` Eric Dumazet
2010-09-02 12:39     ` Masayuki Ohtake
2010-09-02 13:40       ` Eric Dumazet
2010-09-02 15:10         ` Stephen Hemminger
2010-09-03 13:32           ` Masayuki Ohtake
2010-09-03 13:43             ` Eric Dumazet
2010-09-03 14:11               ` Masayuki Ohtake
2010-08-31 15:08   ` Randy Dunlap
2010-08-31 16:10   ` Joe Perches
2010-08-31 17:25     ` [PATCH] drivers/net/pch_gbe: Use bool not unsigned char Joe Perches
2010-08-31 18:38       ` [PATCH] drivers/net/pch_gbe: Cleanup stats use Joe Perches
2010-09-01  1:33         ` Stephen Hemminger
2010-09-01  1:38           ` Joe Perches
2010-09-03  2:23   ` [PATCH] Gigabit Ethernet driver of Topcliff PCH FUJITA Tomonori
2010-09-07  1:13     ` Masayuki Ohtake
2010-09-07  3:21       ` FUJITA Tomonori
2010-09-07  4:06         ` Masayuki Ohtake
  -- strict thread matches above, loose matches on Subject: below --
2010-09-03 14:09 Masayuki Ohtake
2010-09-03 14:09 ` Masayuki Ohtake
2010-09-03 16:35 ` Jiri Slaby
2010-09-07  1:13   ` Masayuki Ohtake
2010-09-08 13:52   ` Masayuki Ohtake
2010-09-08 14:16     ` Jiri Slaby
2010-09-08 14:54       ` Stephen Hemminger
2010-09-08 14:55       ` Stephen Hemminger
2010-09-09 13:37         ` Masayuki Ohtake
2010-09-09 13:38       ` Masayuki Ohtake
2010-09-03 20:00 ` Joe Perches
2010-09-07  2:42 ` Masayuki Ohtake
2010-09-07  2:42   ` Masayuki Ohtake
2010-09-08 20:36   ` David Miller
2010-09-15 12:19     ` Masayuki Ohtake

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20100826085758.04ac4b44@nehalam \
    --to=shemminger@vyatta.com \
    --cc=andrew.chih.howe.khor@intel.com \
    --cc=davem@davemloft.net \
    --cc=gregory.v.rose@intel.com \
    --cc=joel.clark@intel.com \
    --cc=john.linn@xilinx.com \
    --cc=kristoffer@gaisler.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=margie.foster@intel.com \
    --cc=masa-korg@dsn.okisemi.com \
    --cc=mbizon@freebox.fr \
    --cc=meego-dev@meego.com \
    --cc=morinaga526@dsn.okisemi.com \
    --cc=netdev@vger.kernel.org \
    --cc=okada533@dsn.okisemi.com \
    --cc=qi.wang@intel.com \
    --cc=ralf@linux-mips.org \
    --cc=randy.dunlap@oracle.com \
    --cc=shimizu394@dsn.okisemi.com \
    --cc=yong.y.wang@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.