From: Greg KH <gregkh@suse.de>
To: linux-kernel@vger.kernel.org, stable@kernel.org
Cc: Justin Forbes <jmforbes@linuxtx.org>,
Zwane Mwaikambo <zwane@arm.linux.org.uk>,
"Theodore Ts'o" <tytso@mit.edu>,
Randy Dunlap <rdunlap@xenotime.net>,
Dave Jones <davej@redhat.com>,
Chuck Wolber <chuckw@quantumlinux.com>,
Chris Wedgwood <reviews@ml.cw.f00f.org>,
Michael Krufky <mkrufky@linuxtv.org>,
Chuck Ebbert <cebbert@redhat.com>,
Domenico Andreoli <cavokz@gmail.com>,
torvalds@linux-foundation.org, akpm@linux-foundation.org,
alan@lxorguk.ukuu.org.uk, Al Viro <viro@zeniv.linux.org.uk>,
"David S. Miller" <davem@davemloft.net>
Subject: [patch 17/27] CASSINI: Fix endianness bug.
Date: Fri, 1 Feb 2008 16:20:48 -0800 [thread overview]
Message-ID: <20080202002048.GR8368@suse.de> (raw)
In-Reply-To: <20080202001927.GA8368@suse.de>
[-- Attachment #1: cassini_1.patch --]
[-- Type: text/plain, Size: 3230 bytes --]
2.6.22-stable review patch. If anyone has any objections, please let us
know.
------------------
From: Al Viro <viro@zeniv.linux.org.uk>
[ Upstream commit: e5e025401f6e926c1d9dc3f3f2813cf98a2d8708 ]
Here's proposed fix for RX checksum handling in cassini; it affects
little-endian working with half-duplex gigabit, but obviously needs
testing on big-endian too.
The problem is, we need to convert checksum to fixed-endian *before*
correcting for (unstripped) FCS. On big-endian it won't matter
(conversion is no-op), on little-endian it will, but only if FCS is
not stripped by hardware; i.e. in half-duplex gigabit mode when
->crc_size is set.
cassini.c part is that fix, cassini.h one consists of trivial
endianness annotations. With that applied the sucker is endian-clean,
according to sparse.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/net/cassini.c | 8 +++++---
drivers/net/cassini.h | 18 +++++++++---------
2 files changed, 14 insertions(+), 12 deletions(-)
--- a/drivers/net/cassini.c
+++ b/drivers/net/cassini.c
@@ -1979,6 +1979,7 @@ static int cas_rx_process_pkt(struct cas
struct cas_page *page;
struct sk_buff *skb;
void *addr, *crcaddr;
+ __sum16 csum;
char *p;
hlen = CAS_VAL(RX_COMP2_HDR_SIZE, words[1]);
@@ -2158,14 +2159,15 @@ end_copy_pkt:
skb_put(skb, alloclen);
}
- i = CAS_VAL(RX_COMP4_TCP_CSUM, words[3]);
+ csum = (__force __sum16)htons(CAS_VAL(RX_COMP4_TCP_CSUM, words[3]));
if (cp->crc_size) {
/* checksum includes FCS. strip it out. */
- i = csum_fold(csum_partial(crcaddr, cp->crc_size, i));
+ csum = csum_fold(csum_partial(crcaddr, cp->crc_size,
+ csum_unfold(csum)));
if (addr)
cas_page_unmap(addr);
}
- skb->csum = ntohs(i ^ 0xffff);
+ skb->csum = csum_unfold(~csum);
skb->ip_summed = CHECKSUM_COMPLETE;
skb->protocol = eth_type_trans(skb, cp->dev);
return len;
--- a/drivers/net/cassini.h
+++ b/drivers/net/cassini.h
@@ -4122,8 +4122,8 @@ cas_saturn_patch_t cas_saturn_patch[] =
inserted into
outgoing frame. */
struct cas_tx_desc {
- u64 control;
- u64 buffer;
+ __le64 control;
+ __le64 buffer;
};
/* descriptor ring for free buffers contains page-sized buffers. the index
@@ -4131,8 +4131,8 @@ struct cas_tx_desc {
* the completion ring.
*/
struct cas_rx_desc {
- u64 index;
- u64 buffer;
+ __le64 index;
+ __le64 buffer;
};
/* received packets are put on the completion ring. */
@@ -4210,10 +4210,10 @@ struct cas_rx_desc {
#define RX_INDEX_RELEASE 0x0000000000002000ULL
struct cas_rx_comp {
- u64 word1;
- u64 word2;
- u64 word3;
- u64 word4;
+ __le64 word1;
+ __le64 word2;
+ __le64 word3;
+ __le64 word4;
};
enum link_state {
@@ -4252,7 +4252,7 @@ struct cas_init_block {
struct cas_rx_comp rxcs[N_RX_COMP_RINGS][INIT_BLOCK_RX_COMP];
struct cas_rx_desc rxds[N_RX_DESC_RINGS][INIT_BLOCK_RX_DESC];
struct cas_tx_desc txds[N_TX_RINGS][INIT_BLOCK_TX];
- u64 tx_compwb;
+ __le64 tx_compwb;
};
/* tiny buffers to deal with target abort issue. we allocate a bit
--
next prev parent reply other threads:[~2008-02-02 0:30 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20080202001232.472591439@mini.kroah.org>
2008-02-02 0:19 ` [patch 00/27] 2.6.22-stable review Greg KH
2008-02-02 0:19 ` [patch 01/27] X25: Add missing x25_neigh_put Greg KH
2008-02-02 0:19 ` [patch 02/27] SPARC64: Fix two kernel linear mapping setup bugs Greg KH
2008-02-02 0:20 ` [patch 03/27] SPARC64: Fix memory controller register access when non-SMP Greg KH
2008-02-02 0:20 ` [patch 04/27] NET: mcs7830 passes msecs instead of jiffies to usb_control_msg Greg KH
2008-02-02 0:20 ` [patch 05/27] NET: kaweth was forgotten in msec switchover of usb_start_wait_urb Greg KH
2008-02-02 0:20 ` [patch 06/27] NET: Correct two mistaken skb_reset_mac_header() conversions Greg KH
2008-02-02 0:20 ` [patch 07/27] IRDA: irda_create() nuke user triggable printk Greg KH
2008-02-02 0:20 ` [patch 08/27] IPV4 ROUTE: ip_rt_dump() is unecessary slow Greg KH
2008-02-02 0:20 ` [patch 09/27] IPV4: ip_gre: set mac_header correctly in receive path Greg KH
2008-02-02 0:20 ` [patch 10/27] IPSEC: Fix potential dst leak in xfrm_lookup Greg KH
2008-02-02 0:20 ` [patch 11/27] IPSEC: Avoid undefined shift operation when testing algorithm ID Greg KH
2008-02-02 0:20 ` [patch 12/27] INET: Fix netdev renaming and inet address labels Greg KH
2008-02-02 0:20 ` [patch 13/27] : Fix sparc64 cpu cross call hangs Greg KH
2008-02-02 0:20 ` [patch 14/27] CONNECTOR: Dont touch queue dev after decrement of ref count Greg KH
2008-02-02 0:20 ` [patch 15/27] ATM: delay irq setup until card is configured Greg KH
2008-02-02 0:20 ` [patch 16/27] ATM: Check IP header validity in mpc_send_packet Greg KH
2008-02-02 0:20 ` Greg KH [this message]
2008-02-02 0:20 ` [patch 18/27] CASSINI: Revert dont touch page_count Greg KH
2008-02-02 0:20 ` [patch 19/27] CASSINI: Set skb->truesize properly on receive packets Greg KH
2008-02-02 0:20 ` [patch 20/27] ACPICA: fix acpi-cpufreq boot crash due to _PSD return-by-reference Greg KH
2008-02-02 0:20 ` [patch 21/27] vfs: coredumping fix (CVE-2007-6206) Greg KH
2008-02-02 0:21 ` [patch 22/27] quicklist: Set tlb->need_flush if pages are remaining in quicklist 0 Greg KH
2008-02-02 0:39 ` Christoph Lameter
2008-02-02 0:50 ` Greg KH
2008-02-02 1:28 ` Justin M. Forbes
2008-02-02 1:30 ` Christoph Lameter
2008-02-02 2:20 ` Justin M. Forbes
2008-02-06 22:45 ` Greg KH
2008-02-06 23:11 ` Oliver Pinter
2008-02-06 23:28 ` Christoph Lameter
2008-02-09 15:14 ` Fwd: " Oliver Pinter
2008-02-02 0:21 ` [patch 23/27] cxgb: fix T2 GSO Greg KH
2008-02-02 0:21 ` [patch 24/27] cxgb: fix stats Greg KH
2008-02-02 0:21 ` [patch 25/27] chelsio: Fix skb->dev setting Greg KH
2008-02-02 0:21 ` [patch 26/27] POWERPC: Fix invalid semicolon after if statement Greg KH
2008-02-02 0:21 ` [patch 27/27] ACPI: apply quirk_ich6_lpc_acpi to more ICH8 and ICH9 Greg KH
2008-02-02 18:55 ` [patch 00/27] 2.6.22-stable review Arkadiusz Miskiewicz
2008-02-04 17:30 ` Oliver Pinter (Pintér Olivér)
2008-02-04 17:59 ` Greg KH
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=20080202002048.GR8368@suse.de \
--to=gregkh@suse.de \
--cc=akpm@linux-foundation.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=cavokz@gmail.com \
--cc=cebbert@redhat.com \
--cc=chuckw@quantumlinux.com \
--cc=davej@redhat.com \
--cc=davem@davemloft.net \
--cc=jmforbes@linuxtx.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mkrufky@linuxtv.org \
--cc=rdunlap@xenotime.net \
--cc=reviews@ml.cw.f00f.org \
--cc=stable@kernel.org \
--cc=torvalds@linux-foundation.org \
--cc=tytso@mit.edu \
--cc=viro@zeniv.linux.org.uk \
--cc=zwane@arm.linux.org.uk \
/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.