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 22:01 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 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.