From patchwork Sat Jul 9 17:17:51 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= X-Patchwork-Id: 104010 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.180.67]) by ozlabs.org (Postfix) with ESMTP id 08AB51007DF for ; Sun, 10 Jul 2011 03:19:01 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754620Ab1GIRSy (ORCPT ); Sat, 9 Jul 2011 13:18:54 -0400 Received: from rere.qmqm.pl ([89.167.52.164]:37401 "EHLO rere.qmqm.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753977Ab1GIRRx (ORCPT ); Sat, 9 Jul 2011 13:17:53 -0400 Received: by rere.qmqm.pl (Postfix, from userid 1000) id 6C7A513A6D; Sat, 9 Jul 2011 19:17:51 +0200 (CEST) Message-Id: <07c0278a1a313fd8c244c544a69cd5cfd12b7065.1310229312.git.mirq-linux@rere.qmqm.pl> In-Reply-To: References: From: =?UTF-8?q?Micha=C5=82=20Miros=C5=82aw?= Subject: [PATCH 04/21] net: fealnx: use common rx_copybreak handling MIME-Version: 1.0 To: netdev@vger.kernel.org Date: Sat, 9 Jul 2011 19:17:51 +0200 (CEST) Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Signed-off-by: Michał Mirosław --- drivers/net/fealnx.c | 39 +++++++-------------------------------- 1 files changed, 7 insertions(+), 32 deletions(-) diff --git a/drivers/net/fealnx.c b/drivers/net/fealnx.c index fa8677c..b692a4d 100644 --- a/drivers/net/fealnx.c +++ b/drivers/net/fealnx.c @@ -1693,46 +1693,21 @@ static int netdev_rx(struct net_device *dev) struct sk_buff *skb; /* Omit the four octet CRC from the length. */ - short pkt_len = ((rx_status & FLNGMASK) >> FLNGShift) - 4; + short pkt_len = ((rx_status & FLNGMASK) >> FLNGShift) - ETH_FCS_LEN; #ifndef final_version if (debug) printk(KERN_DEBUG " netdev_rx() normal Rx pkt length %d" " status %x.\n", pkt_len, rx_status); #endif + skb = dev_skb_finish_rx_dma(&np->cur_rx->skbuff, + pkt_len, rx_copybreak, + &np->pci_dev->dev, np->cur_rx->buffer, + np->rx_buf_sz); - /* Check if the packet is long enough to accept without copying - to a minimally-sized skbuff. */ - if (pkt_len < rx_copybreak && - (skb = dev_alloc_skb(pkt_len + 2)) != NULL) { - skb_reserve(skb, 2); /* 16 byte align the IP header */ - pci_dma_sync_single_for_cpu(np->pci_dev, - np->cur_rx->buffer, - np->rx_buf_sz, - PCI_DMA_FROMDEVICE); - /* Call copy + cksum if available. */ - -#if ! defined(__alpha__) - skb_copy_to_linear_data(skb, - np->cur_rx->skbuff->data, pkt_len); - skb_put(skb, pkt_len); -#else - memcpy(skb_put(skb, pkt_len), - np->cur_rx->skbuff->data, pkt_len); -#endif - pci_dma_sync_single_for_device(np->pci_dev, - np->cur_rx->buffer, - np->rx_buf_sz, - PCI_DMA_FROMDEVICE); - } else { - pci_unmap_single(np->pci_dev, - np->cur_rx->buffer, - np->rx_buf_sz, - PCI_DMA_FROMDEVICE); - skb_put(skb = np->cur_rx->skbuff, pkt_len); - np->cur_rx->skbuff = NULL; + if (!np->cur_rx->skbuff) --np->really_rx_count; - } + skb->protocol = eth_type_trans(skb, dev); netif_rx(skb); dev->stats.rx_packets++;