diff options
author | Al Viro <viro@ftp.linux.org.uk> | 2007-12-16 21:53:36 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-01-29 00:07:08 +0100 |
commit | b710b43c306650261c01ad08100791afec78a7db (patch) | |
tree | 656c18e9d3736b84b56c1f91303c28207c424951 /drivers/net/tokenring/olympic.h | |
parent | libertas: use spin_is_locked() instead of spin_trylock() in lbs_interrupt() (diff) | |
download | linux-b710b43c306650261c01ad08100791afec78a7db.tar.xz linux-b710b43c306650261c01ad08100791afec78a7db.zip |
endianness annotations and fixes for olympic
* missing braces in !readl(...) & ...
* trivial endianness annotations
* in olympic_arb_cmd() the loop collecting fragments of
packet is b0rken on big-endian - we have
(next_ptr && (buf_ptr=olympic_priv->olympic_lap + ntohs(next_ptr)))
as condition and it should have swab16(), not ntohs() - it's host-endian
byteswapped, not big-endian. So if we get more than one fragment on big-endian
host, we get screwed.
This ntohs() got missed back when the rest of those had been switched
to swab16() in 2.4.0-test2-pre1 - at a guess, nobody had hit fragmented
packets during the testing of PPC fixes.
PS: Ken Aaker cc'd on assumption that he is the same guy who'd done the
original set of PPC fixes in olympic
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to '')
-rw-r--r-- | drivers/net/tokenring/olympic.h | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/drivers/net/tokenring/olympic.h b/drivers/net/tokenring/olympic.h index 2fc59c997468..c91956310fb2 100644 --- a/drivers/net/tokenring/olympic.h +++ b/drivers/net/tokenring/olympic.h @@ -216,31 +216,31 @@ /* xxxx These structures are all little endian in hardware. */ struct olympic_tx_desc { - u32 buffer; - u32 status_length; + __le32 buffer; + __le32 status_length; }; struct olympic_tx_status { - u32 status; + __le32 status; }; struct olympic_rx_desc { - u32 buffer; - u32 res_length; + __le32 buffer; + __le32 res_length; }; struct olympic_rx_status { - u32 fragmentcnt_framelen; - u32 status_buffercnt; + __le32 fragmentcnt_framelen; + __le32 status_buffercnt; }; /* xxxx END These structures are all little endian in hardware. */ /* xxxx There may be more, but I'm pretty sure about these */ struct mac_receive_buffer { - u16 next ; + __le16 next ; u8 padding ; u8 frame_status ; - u16 buffer_length ; + __le16 buffer_length ; u8 frame_data ; }; |