From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
alan@lxorguk.ukuu.org.uk, Chris Metcalf <cmetcalf@tilera.com>,
"David S. Miller" <davem@davemloft.net>
Subject: [ 082/101] tilegx: fix some issues in the SW TSO support
Date: Mon, 29 Oct 2012 14:35:35 -0700 [thread overview]
Message-ID: <20121029213249.422260574@linuxfoundation.org> (raw)
In-Reply-To: <20121029213240.128426598@linuxfoundation.org>
3.6-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chris Metcalf <cmetcalf@tilera.com>
commit 3da3fff8006c608f19a51859d44ba47ca8b41461 upstream.
This change correctly computes the header length and data length in
the fragments to avoid a bug where we would end up with extremely
slow performance. Also adopt use of skb_frag_size() accessor.
Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/ethernet/tile/tilegx.c | 35 +++++++++++++++++++----------------
1 file changed, 19 insertions(+), 16 deletions(-)
--- a/drivers/net/ethernet/tile/tilegx.c
+++ b/drivers/net/ethernet/tile/tilegx.c
@@ -1334,11 +1334,11 @@ static int tso_count_edescs(struct sk_bu
{
struct skb_shared_info *sh = skb_shinfo(skb);
unsigned int sh_len = skb_transport_offset(skb) + tcp_hdrlen(skb);
- unsigned int data_len = skb->data_len + skb->hdr_len - sh_len;
+ unsigned int data_len = skb->len - sh_len;
unsigned int p_len = sh->gso_size;
long f_id = -1; /* id of the current fragment */
- long f_size = skb->hdr_len; /* size of the current fragment */
- long f_used = sh_len; /* bytes used from the current fragment */
+ long f_size = skb_headlen(skb) - sh_len; /* current fragment size */
+ long f_used = 0; /* bytes used from the current fragment */
long n; /* size of the current piece of payload */
int num_edescs = 0;
int segment;
@@ -1353,7 +1353,7 @@ static int tso_count_edescs(struct sk_bu
/* Advance as needed. */
while (f_used >= f_size) {
f_id++;
- f_size = sh->frags[f_id].size;
+ f_size = skb_frag_size(&sh->frags[f_id]);
f_used = 0;
}
@@ -1384,13 +1384,13 @@ static void tso_headers_prepare(struct s
struct iphdr *ih;
struct tcphdr *th;
unsigned int sh_len = skb_transport_offset(skb) + tcp_hdrlen(skb);
- unsigned int data_len = skb->data_len + skb->hdr_len - sh_len;
+ unsigned int data_len = skb->len - sh_len;
unsigned char *data = skb->data;
unsigned int ih_off, th_off, p_len;
unsigned int isum_seed, tsum_seed, id, seq;
long f_id = -1; /* id of the current fragment */
- long f_size = skb->hdr_len; /* size of the current fragment */
- long f_used = sh_len; /* bytes used from the current fragment */
+ long f_size = skb_headlen(skb) - sh_len; /* current fragment size */
+ long f_used = 0; /* bytes used from the current fragment */
long n; /* size of the current piece of payload */
int segment;
@@ -1405,7 +1405,7 @@ static void tso_headers_prepare(struct s
isum_seed = ((0xFFFF - ih->check) +
(0xFFFF - ih->tot_len) +
(0xFFFF - ih->id));
- tsum_seed = th->check + (0xFFFF ^ htons(sh_len + data_len));
+ tsum_seed = th->check + (0xFFFF ^ htons(skb->len));
id = ntohs(ih->id);
seq = ntohl(th->seq);
@@ -1444,7 +1444,7 @@ static void tso_headers_prepare(struct s
/* Advance as needed. */
while (f_used >= f_size) {
f_id++;
- f_size = sh->frags[f_id].size;
+ f_size = skb_frag_size(&sh->frags[f_id]);
f_used = 0;
}
@@ -1478,14 +1478,14 @@ static void tso_egress(struct net_device
struct tile_net_priv *priv = netdev_priv(dev);
struct skb_shared_info *sh = skb_shinfo(skb);
unsigned int sh_len = skb_transport_offset(skb) + tcp_hdrlen(skb);
- unsigned int data_len = skb->data_len + skb->hdr_len - sh_len;
+ unsigned int data_len = skb->len - sh_len;
unsigned int p_len = sh->gso_size;
gxio_mpipe_edesc_t edesc_head = { { 0 } };
gxio_mpipe_edesc_t edesc_body = { { 0 } };
long f_id = -1; /* id of the current fragment */
- long f_size = skb->hdr_len; /* size of the current fragment */
- long f_used = sh_len; /* bytes used from the current fragment */
- void *f_data = skb->data;
+ long f_size = skb_headlen(skb) - sh_len; /* current fragment size */
+ long f_used = 0; /* bytes used from the current fragment */
+ void *f_data = skb->data + sh_len;
long n; /* size of the current piece of payload */
unsigned long tx_packets = 0, tx_bytes = 0;
unsigned int csum_start;
@@ -1516,15 +1516,18 @@ static void tso_egress(struct net_device
/* Egress the payload. */
while (p_used < p_len) {
+ void *va;
/* Advance as needed. */
while (f_used >= f_size) {
f_id++;
- f_size = sh->frags[f_id].size;
- f_used = 0;
+ f_size = skb_frag_size(&sh->frags[f_id]);
f_data = tile_net_frag_buf(&sh->frags[f_id]);
+ f_used = 0;
}
+ va = f_data + f_used;
+
/* Use bytes from the current fragment. */
n = p_len - p_used;
if (n > f_size - f_used)
@@ -1533,7 +1536,7 @@ static void tso_egress(struct net_device
p_used += n;
/* Egress a piece of the payload. */
- edesc_body.va = va_to_tile_io_addr(f_data) + f_used;
+ edesc_body.va = va_to_tile_io_addr(va);
edesc_body.xfer_size = n;
edesc_body.bound = !(p_used < p_len);
gxio_mpipe_equeue_put_at(equeue, edesc_body, slot);
next prev parent reply other threads:[~2012-10-29 21:35 UTC|newest]
Thread overview: 103+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-29 21:34 [ 000/101] 3.6.5-stable review Greg Kroah-Hartman
2012-10-29 21:34 ` [ 001/101] drm/radeon: add some new SI PCI ids Greg Kroah-Hartman
2012-10-29 21:34 ` [ 002/101] drm/radeon: add error output if VM CS fails on cayman Greg Kroah-Hartman
2012-10-29 21:34 ` [ 003/101] ALSA: hda - add dock support for Thinkpad T430 Greg Kroah-Hartman
2012-10-29 21:34 ` [ 004/101] ALSA: hda - Fix silent headphone output from Toshiba P200 Greg Kroah-Hartman
2012-10-29 21:34 ` [ 005/101] VFS: dont do protected {sym,hard}links by default Greg Kroah-Hartman
2012-10-29 21:34 ` [ 006/101] gen_init_cpio: avoid stack overflow when expanding Greg Kroah-Hartman
2012-10-29 21:34 ` [ 007/101] fs/compat_ioctl.c: VIDEO_SET_SPU_PALETTE missing error check Greg Kroah-Hartman
2012-10-29 21:34 ` [ 008/101] drivers/rtc/rtc-imxdi.c: add missing spin lock initialization Greg Kroah-Hartman
2012-10-29 21:34 ` [ 009/101] genalloc: stop crashing the system when destroying a pool Greg Kroah-Hartman
2012-10-29 21:34 ` [ 010/101] ARM: 7559/1: smp: switch away from the idmap before updating init_mm.mm_count Greg Kroah-Hartman
2012-10-29 21:34 ` [ 011/101] x86-64: Fix page table accounting Greg Kroah-Hartman
2012-10-29 21:34 ` [ 012/101] Revert "x86/mm: Fix the size calculation of mapping tables" Greg Kroah-Hartman
2012-10-29 21:34 ` [ 013/101] x86, mm: Trim memory in memblock to be page aligned Greg Kroah-Hartman
2012-10-29 21:34 ` [ 014/101] mm: fix XFS oops due to dirty pages without buffers on s390 Greg Kroah-Hartman
2012-10-29 21:34 ` [ 015/101] SUNRPC: Get rid of the xs_error_report socket callback Greg Kroah-Hartman
2012-10-29 21:34 ` [ 016/101] SUNRPC: Clear the connect flag when socket state is TCP_CLOSE_WAIT Greg Kroah-Hartman
2012-10-29 21:34 ` [ 017/101] Revert "SUNRPC: Ensure we close the socket on EPIPE errors too..." Greg Kroah-Hartman
2012-10-29 21:34 ` [ 018/101] LOCKD: fix races in nsm_client_get Greg Kroah-Hartman
2012-10-29 21:34 ` [ 019/101] SUNRPC: Prevent races in xs_abort_connection() Greg Kroah-Hartman
2012-10-29 21:34 ` [ 020/101] LOCKD: Clear ln->nsm_clnt only when ln->nsm_users is zero Greg Kroah-Hartman
2012-10-29 21:34 ` [ 021/101] xhci: Fix potential NULL ptr deref in command cancellation Greg Kroah-Hartman
2012-10-29 21:34 ` [ 022/101] xhci: fix integer overflow Greg Kroah-Hartman
2012-10-29 21:34 ` [ 023/101] xhci: endianness xhci_calculate_intel_u2_timeout Greg Kroah-Hartman
2012-10-29 21:34 ` [ 024/101] sysfs: sysfs_pathname/sysfs_add_one: Use strlcat() instead of strcat() Greg Kroah-Hartman
2012-10-29 21:34 ` [ 025/101] Staging: android: binder: Fix memory leak on thread/process exit Greg Kroah-Hartman
2012-10-29 21:34 ` [ 026/101] Staging: android: binder: Allow using highmem for binder buffers Greg Kroah-Hartman
2012-10-29 21:34 ` [ 027/101] staging: zram: Fix handling of incompressible pages Greg Kroah-Hartman
2012-10-29 21:34 ` [ 028/101] staging: comedi: das08: fix possible NULL deref during detach Greg Kroah-Hartman
2012-10-29 21:34 ` [ 029/101] staging: comedi: ni_daq_700: fix dio subdevice regression Greg Kroah-Hartman
2012-10-29 21:34 ` [ 030/101] staging: comedi: ni_labpc: fix possible NULL deref during detach Greg Kroah-Hartman
2012-10-29 21:34 ` [ 031/101] staging: comedi: amplc_dio200: " Greg Kroah-Hartman
2012-10-29 21:34 ` [ 032/101] staging: comedi: amplc_pc263: " Greg Kroah-Hartman
2012-10-29 21:34 ` [ 033/101] staging: comedi: amplc_pc236: fix invalid register access " Greg Kroah-Hartman
2012-10-29 21:34 ` [ 034/101] staging: comedi: amplc_pc236: fix possible NULL deref " Greg Kroah-Hartman
2012-10-29 21:34 ` [ 035/101] extcon: Unregister compat class at module unload to fix oops Greg Kroah-Hartman
2012-10-29 21:34 ` [ 036/101] extcon: unregister compat link on cleanup Greg Kroah-Hartman
2012-10-29 21:34 ` [ 037/101] Drivers: hv: Cleanup error handling in vmbus_open() Greg Kroah-Hartman
2012-10-29 21:34 ` [ 038/101] ehci: fix Lucid nohandoff pci quirk to be more generic with BIOS versions Greg Kroah-Hartman
2012-10-29 21:34 ` [ 039/101] ehci: Add yet-another Lucid nohandoff pci quirk Greg Kroah-Hartman
2012-10-29 21:34 ` [ 040/101] usb-storage: add unusual_devs entry for Casio EX-N1 digital camera Greg Kroah-Hartman
2012-10-29 21:34 ` [ 041/101] USB: usb-wwan: fix multiple memory leaks in error paths Greg Kroah-Hartman
2012-10-29 21:34 ` [ 042/101] usb hub: send clear_tt_buffer_complete events when canceling TT clear work Greg Kroah-Hartman
2012-10-29 21:34 ` [ 043/101] USB: ch341: fix port-data memory leak Greg Kroah-Hartman
2012-10-29 21:34 ` [ 044/101] USB: digi_acceleport: " Greg Kroah-Hartman
2012-10-29 21:34 ` [ 045/101] USB: ipw: fix interface-data memory leak in error path Greg Kroah-Hartman
2012-10-29 21:34 ` [ 046/101] USB: mct_u232: fix port-data memory leak Greg Kroah-Hartman
2012-10-29 21:35 ` [ 047/101] USB: mct_u232: fix broken close Greg Kroah-Hartman
2012-10-29 21:35 ` [ 048/101] USB: option: fix interface-data memory leak in error path Greg Kroah-Hartman
2012-10-29 21:35 ` [ 049/101] USB: keyspan: fix NULL-pointer dereferences and memory leaks Greg Kroah-Hartman
2012-10-29 21:35 ` [ 050/101] USB: omninet: fix port-data memory leak Greg Kroah-Hartman
2012-10-29 21:35 ` [ 051/101] USB: qcserial: fix interface-data memory leak in error path Greg Kroah-Hartman
2012-10-29 21:35 ` [ 052/101] USB: whiteheat: fix " Greg Kroah-Hartman
2012-10-29 21:35 ` [ 053/101] USB: whiteheat: fix port-data memory leak Greg Kroah-Hartman
2012-10-29 21:35 ` [ 054/101] USB: opticon: fix DMA from stack Greg Kroah-Hartman
2012-10-29 21:35 ` [ 055/101] USB: opticon: fix memory leak in error path Greg Kroah-Hartman
2012-10-29 21:35 ` [ 056/101] USB: metro-usb: fix port-data memory leak Greg Kroah-Hartman
2012-10-29 21:35 ` [ 057/101] USB: metro-usb: fix io after disconnect Greg Kroah-Hartman
2012-10-29 21:35 ` [ 058/101] USB: mos7720: fix port-data memory leak Greg Kroah-Hartman
2012-10-29 21:35 ` [ 059/101] USB: quatech2: fix memory leak in error path Greg Kroah-Hartman
2012-10-29 21:35 ` [ 060/101] USB: quatech2: fix port-data memory leaks Greg Kroah-Hartman
2012-10-29 21:35 ` [ 061/101] USB: quatech2: fix close and disconnect urb handling Greg Kroah-Hartman
2012-10-29 21:35 ` [ 062/101] USB: quatech2: fix io after disconnect Greg Kroah-Hartman
2012-10-29 21:35 ` [ 063/101] USB: serial: Fix memory leak in sierra_release() Greg Kroah-Hartman
2012-10-29 21:35 ` [ 064/101] USB: sierra: fix memory leak in attach error path Greg Kroah-Hartman
2012-10-29 21:35 ` [ 065/101] USB: sierra: fix memory leak in probe " Greg Kroah-Hartman
2012-10-29 21:35 ` [ 066/101] USB: sierra: fix port-data memory leak Greg Kroah-Hartman
2012-10-29 21:35 ` [ 067/101] USB: mos7840: fix urb leak at release Greg Kroah-Hartman
2012-10-29 21:35 ` [ 068/101] USB: mos7840: fix port-device leak in error path Greg Kroah-Hartman
2012-10-29 21:35 ` [ 069/101] USB: mos7840: remove NULL-urb submission Greg Kroah-Hartman
2012-10-29 21:35 ` [ 070/101] USB: mos7840: remove invalid disconnect handling Greg Kroah-Hartman
2012-10-29 21:35 ` [ 071/101] vhost: fix mergeable bufs on BE hosts Greg Kroah-Hartman
2012-10-29 21:35 ` [ 072/101] ARM: SAMSUNG: Add naming of s3c64xx-spi devices Greg Kroah-Hartman
2012-10-29 21:35 ` [ 073/101] ARM: at91/tc: fix typo in the DT document Greg Kroah-Hartman
2012-10-29 21:35 ` [ 074/101] ARM: at91/i2c: change id to let i2c-gpio work Greg Kroah-Hartman
2012-10-29 21:35 ` [ 075/101] ARM: at91: at91sam9g10: fix SOC type detection Greg Kroah-Hartman
2012-10-29 21:35 ` [ 076/101] ARM: at91: fix external interrupts in non-DT case Greg Kroah-Hartman
2012-10-29 21:35 ` [ 077/101] ARM: at91: fix external interrupt specification in board code Greg Kroah-Hartman
2012-10-29 21:35 ` [ 078/101] mac80211: connect with HT20 if HT40 is not permitted Greg Kroah-Hartman
2012-10-29 21:35 ` [ 079/101] mac80211: check if key has TKIP type before updating IV Greg Kroah-Hartman
2012-10-29 21:35 ` [ 080/101] mac80211: use ieee80211_free_txskb in a few more places Greg Kroah-Hartman
2012-10-29 21:35 ` [ 081/101] b43: Fix oops on unload when firmware not found Greg Kroah-Hartman
2012-10-29 21:35 ` Greg Kroah-Hartman [this message]
2012-10-29 21:35 ` [ 083/101] Bluetooth: SMP: Fix setting unknown auth_req bits Greg Kroah-Hartman
2012-10-29 21:35 ` [ 084/101] qmi_wwan/cdc_ether: move Novatel 551 and E362 to qmi_wwan Greg Kroah-Hartman
2012-10-29 21:35 ` [ 085/101] freezer: exec should clear PF_NOFREEZE along with PF_KTHREAD Greg Kroah-Hartman
2012-10-29 21:35 ` [ 086/101] dmaengine: sirf: fix a typo in dma_prep_interleaved Greg Kroah-Hartman
2012-10-29 21:35 ` [ 087/101] dmaengine: sirf: fix a typo in moving running dma_desc to active queue Greg Kroah-Hartman
2012-10-29 21:35 ` [ 088/101] dmaengine: imx-dma: fix missing unlock on error in imxdma_xfer_desc() Greg Kroah-Hartman
2012-10-29 21:35 ` [ 089/101] iwlwifi: fix 6000 series channel switch command Greg Kroah-Hartman
2012-10-29 21:35 ` [ 090/101] bcma: fix unregistration of cores Greg Kroah-Hartman
2012-10-29 21:35 ` [ 091/101] net/wireless: ipw2200: Fix panic occurring in ipw_handle_promiscuous_tx() Greg Kroah-Hartman
2012-10-29 21:35 ` [ 092/101] cpufreq / powernow-k8: Remove usage of smp_processor_id() in preemptible code Greg Kroah-Hartman
2012-10-29 21:35 ` [ 093/101] Revert "ath9k_hw: Updated AR9003 tx gain table for 5GHz" Greg Kroah-Hartman
2012-10-29 21:35 ` [ 094/101] x86, mm: Find_early_table_space based on ranges that are actually being mapped Greg Kroah-Hartman
2012-10-29 21:35 ` [ 095/101] x86, mm: Undo incorrect revert in arch/x86/mm/init.c Greg Kroah-Hartman
2012-10-29 21:35 ` [ 096/101] cfg80211/mac80211: avoid state mishmash on deauth Greg Kroah-Hartman
2012-10-29 21:35 ` [ 097/101] efi: Defer freeing boot services memory until after ACPI init Greg Kroah-Hartman
2012-10-29 21:35 ` [ 098/101] x86: efi: Turn off efi_enabled after setup on mixed fw/kernel Greg Kroah-Hartman
2012-10-29 21:35 ` [ 099/101] x86, mm: Use memblock memory loop instead of e820_RAM Greg Kroah-Hartman
2012-10-29 21:35 ` [ 100/101] pnfsblock: fix non-aligned DIO read Greg Kroah-Hartman
2012-10-29 21:35 ` [ 101/101] pnfsblock: fix non-aligned DIO write Greg Kroah-Hartman
2012-10-30 9:38 ` [PATCH] USB: io_edgeport: remove unused variable Paul Bolle
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=20121029213249.422260574@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=cmetcalf@tilera.com \
--cc=davem@davemloft.net \
--cc=linux-kernel@vger.kernel.org \
--cc=stable@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).