From patchwork Mon Nov 17 21:30:05 2008 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harvey Harrison X-Patchwork-Id: 9235 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by ozlabs.org (Postfix) with ESMTP id 004FEDDDF0 for ; Tue, 18 Nov 2008 08:30:18 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752265AbYKQVaM (ORCPT ); Mon, 17 Nov 2008 16:30:12 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752130AbYKQVaL (ORCPT ); Mon, 17 Nov 2008 16:30:11 -0500 Received: from yx-out-2324.google.com ([74.125.44.29]:50971 "EHLO yx-out-2324.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751875AbYKQVaJ (ORCPT ); Mon, 17 Nov 2008 16:30:09 -0500 Received: by yx-out-2324.google.com with SMTP id 8so1115452yxm.1 for ; Mon, 17 Nov 2008 13:30:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:subject:from:to:cc :content-type:date:message-id:mime-version:x-mailer :content-transfer-encoding; bh=O2PxTmN2SKQ7SFd8FhSGlTEzd9RqowpACaz7hhx8vz8=; b=clbjhLHTzMqAzbB+GREagprXILtIFHGeDxDjqBojCl8SJnn5UnPoQOlGNvJ8JNB8Yz +962SlzUJCgyx/wGxqPhWTNNtw35hqJjFYPt7PUE187gjeAxlkZZC0OMuRDJSfv/DYn3 ShdF2iSUb9K6tUMrsUHbjA5YEdEvCqevyFtF4= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=subject:from:to:cc:content-type:date:message-id:mime-version :x-mailer:content-transfer-encoding; b=hVMLNCvbR3Sg3awoLhFgzfoH6onrphvzHevPQNOS9EfgnD81Bt6kORgSA0EMJbjkKe HxVIXmLl0bLSuRT8O5dfOsy3GsrEhHTXj7gNq3k6XZMMYr+RXcy8k5CwqF13/dSC3PLU Fj1FJYTItbk44L/KkJCfMb9rMhfkFej6hDWYY= Received: by 10.142.242.8 with SMTP id p8mr2178584wfh.307.1226957407477; Mon, 17 Nov 2008 13:30:07 -0800 (PST) Received: from ?192.168.1.101? (216-19-190-48.dyn.novuscom.net [216.19.190.48]) by mx.google.com with ESMTPS id 32sm5261994wfa.40.2008.11.17.13.30.07 (version=TLSv1/SSLv3 cipher=RC4-MD5); Mon, 17 Nov 2008 13:30:07 -0800 (PST) Subject: [PATCH-2.6.28] net: jme.c rxdesc.flags is __le16, other missing endian swaps From: Harvey Harrison To: David Miller , Guo-Fu Tseng Cc: linux-netdev Date: Mon, 17 Nov 2008 13:30:05 -0800 Message-Id: <1226957405.6150.8.camel@brick> Mime-Version: 1.0 X-Mailer: Evolution 2.24.1 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This is the minimal patch to fix endian mismatches. These are probably bugs on big-endian arches, noops on little endian. jme_rxsum_ok could be improved to directly take a __le16 and change all of the masks/sets to be in little-endian, but has not been done here to keep the patch small. Signed-off-by: Harvey Harrison --- Dave, could use confirmation here, but looks almost certainly like a bugfix for big-endian. drivers/net/jme.c | 21 ++++++++++----------- 1 files changed, 10 insertions(+), 11 deletions(-) diff --git a/drivers/net/jme.c b/drivers/net/jme.c index 81c6cdc..665e70d 100644 --- a/drivers/net/jme.c +++ b/drivers/net/jme.c @@ -912,23 +912,23 @@ jme_alloc_and_feed_skb(struct jme_adapter *jme, int idx) skb_put(skb, framesize); skb->protocol = eth_type_trans(skb, jme->dev); - if (jme_rxsum_ok(jme, rxdesc->descwb.flags)) + if (jme_rxsum_ok(jme, le16_to_cpu(rxdesc->descwb.flags))) skb->ip_summed = CHECKSUM_UNNECESSARY; else skb->ip_summed = CHECKSUM_NONE; - if (rxdesc->descwb.flags & RXWBFLAG_TAGON) { + if (rxdesc->descwb.flags & cpu_to_le16(RXWBFLAG_TAGON)) { if (jme->vlgrp) { jme->jme_vlan_rx(skb, jme->vlgrp, - le32_to_cpu(rxdesc->descwb.vlan)); + le16_to_cpu(rxdesc->descwb.vlan)); NET_STAT(jme).rx_bytes += 4; } } else { jme->jme_rx(skb); } - if ((le16_to_cpu(rxdesc->descwb.flags) & RXWBFLAG_DEST) == - RXWBFLAG_DEST_MUL) + if ((rxdesc->descwb.flags & cpu_to_le16(RXWBFLAG_DEST)) == + cpu_to_le16(RXWBFLAG_DEST_MUL)) ++(NET_STAT(jme).multicast); jme->dev->last_rx = jiffies; @@ -961,7 +961,7 @@ jme_process_receive(struct jme_adapter *jme, int limit) rxdesc = rxring->desc; rxdesc += i; - if ((rxdesc->descwb.flags & RXWBFLAG_OWN) || + if ((rxdesc->descwb.flags & cpu_to_le16(RXWBFLAG_OWN)) || !(rxdesc->descwb.desccnt & RXWBDCNT_WBCPL)) goto out; @@ -1763,10 +1763,9 @@ jme_expand_header(struct jme_adapter *jme, struct sk_buff *skb) } static int -jme_tx_tso(struct sk_buff *skb, - u16 *mss, u8 *flags) +jme_tx_tso(struct sk_buff *skb, __le16 *mss, u8 *flags) { - *mss = skb_shinfo(skb)->gso_size << TXDESC_MSS_SHIFT; + *mss = cpu_to_le16(skb_shinfo(skb)->gso_size << TXDESC_MSS_SHIFT); if (*mss) { *flags |= TXFLAG_LSEN; @@ -1826,11 +1825,11 @@ jme_tx_csum(struct jme_adapter *jme, struct sk_buff *skb, u8 *flags) } static inline void -jme_tx_vlan(struct sk_buff *skb, u16 *vlan, u8 *flags) +jme_tx_vlan(struct sk_buff *skb, __le16 *vlan, u8 *flags) { if (vlan_tx_tag_present(skb)) { *flags |= TXFLAG_TAGON; - *vlan = vlan_tx_tag_get(skb); + *vlan = cpu_to_le16(vlan_tx_tag_get(skb)); } }