Messages in this thread Patch in this message | | | From | Chris Metcalf <> | Date | Wed, 4 Apr 2012 10:13:32 -0400 | Subject | [PATCH v2] marvell sky2 driver: fix so it works without unaligned accesses |
| |
The driver uses a receive_new() routine that ends up requiring unaligned accesses in IP header processing. If the architecture doesn't support efficient unaligned accesses, and SKY2_HW_RAM_BUFFER is set, just copy all ingress packets to the bounce buffers instead. Thanks to Eric Dumazet for pointing out the SKY2_HW_RAM_BUFFER issue.
This allows the driver to be used on the Tilera TILEmpower-Gx, since the tile architecture doesn't currently handle kernel unaligned accesses, just userspace.
Signed-off-by: Chris Metcalf <cmetcalf@tilera.com> --- drivers/net/ethernet/marvell/sky2.c | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-)
diff --git a/drivers/net/ethernet/marvell/sky2.c b/drivers/net/ethernet/marvell/sky2.c index 423a1a2..2bc6a78 100644 --- a/drivers/net/ethernet/marvell/sky2.c +++ b/drivers/net/ethernet/marvell/sky2.c @@ -2598,7 +2598,11 @@ static struct sk_buff *sky2_receive(struct net_device *dev, goto error; okay: - if (length < copybreak) + if ((length < copybreak) +#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS + || (sky2->hw->flags & SKY2_HW_RAM_BUFFER) +#endif + ) skb = receive_copy(sky2, re, length); else skb = receive_new(sky2, re, length); -- 1.6.5.2
| |