[sparc64] 2.6.18 unaligned accesses in eth1394

From: Will Simoneau
Date: Thu Oct 05 2006 - 17:16:09 EST


Here's a pair of unaligned accesses I found playing with the eth1394 driver:

Kernel unaligned access at TPC[102c8190] ether1394_tx+0xf8/0x600 [eth1394]
Kernel unaligned access at TPC[10162c8c] ether1394_data_handler+0x914/0x1000 [eth1394]

The first one I seem to be able to fix by adding a get_unaligned() at
lines 1679-1680 of eth1394.c around eth->h_dest; the second one seems to
be triggered by this code:

(gdb) list *ether1394_data_handler+0x914
0xc94 is in ether1394_data_handler (drivers/ieee1394/eth1394.c:1264).
1259 priv->stats.rx_dropped++;
1260 dev_kfree_skb_any(skb);
1261 goto bad_proto;
1262 }
1263
1264 if (netif_rx(skb) == NET_RX_DROP) {
1265 priv->stats.rx_errors++;
1266 priv->stats.rx_dropped++;
1267 goto bad_proto;
1268 }

Unaligned accesses caused by netif_rx seem to have happened before on
mips long ago (according to google). I suspect nobody has ever tried
eth1394 on sparc64 ;-)

eth1394 seems to work fine otherwise, I can plug a firewire hdd and a
laptop with firewire into the sparc and everything works OK. I get
~13MB/sec network throughput from laptop -> sparc (the sparc's CPU is
hitting 100% system time), I suspect it would be a lot faster with the
alignment problem fixed.

Attachment: pgp00000.pgp
Description: PGP signature