From: Anton Blanchard <anton@samba.org>
To: brking@linux.vnet.ibm.com, santil@linux.vnet.ibm.com
Cc: netdev@vger.kernel.org
Subject: [patch 05/20] ibmveth: Add rx_copybreak
Date: Mon, 23 Aug 2010 10:09:35 +1000 [thread overview]
Message-ID: <20100823001238.751613683@samba.org> (raw)
In-Reply-To: 20100823000930.546065833@samba.org
[-- Attachment #1: veth_rx_copybreak --]
[-- Type: text/plain, Size: 2171 bytes --]
For small packets, create a new skb and copy the packet into it so we
avoid tearing down and creating a TCE entry.
Signed-off-by: Anton Blanchard <anton@samba.org>
---
Index: net-next-2.6/drivers/net/ibmveth.c
===================================================================
--- net-next-2.6.orig/drivers/net/ibmveth.c 2010-08-23 08:52:29.173833820 +1000
+++ net-next-2.6/drivers/net/ibmveth.c 2010-08-23 08:52:29.793789816 +1000
@@ -122,6 +122,11 @@ module_param(tx_copybreak, uint, 0644);
MODULE_PARM_DESC(tx_copybreak,
"Maximum size of packet that is copied to a new buffer on transmit");
+static unsigned int rx_copybreak __read_mostly = 128;
+module_param(rx_copybreak, uint, 0644);
+MODULE_PARM_DESC(rx_copybreak,
+ "Maximum size of packet that is copied to a new buffer on receive");
+
struct ibmveth_stat {
char name[ETH_GSTRING_LEN];
int offset;
@@ -1002,8 +1007,6 @@ static int ibmveth_poll(struct napi_stru
restart_poll:
do {
- struct sk_buff *skb;
-
if (!ibmveth_rxq_pending_buffer(adapter))
break;
@@ -1014,20 +1017,34 @@ static int ibmveth_poll(struct napi_stru
ibmveth_debug_printk("recycling invalid buffer\n");
ibmveth_rxq_recycle_buffer(adapter);
} else {
+ struct sk_buff *skb, *new_skb;
int length = ibmveth_rxq_frame_length(adapter);
int offset = ibmveth_rxq_frame_offset(adapter);
int csum_good = ibmveth_rxq_csum_good(adapter);
skb = ibmveth_rxq_get_buffer(adapter);
- if (csum_good)
- skb->ip_summed = CHECKSUM_UNNECESSARY;
- ibmveth_rxq_harvest_buffer(adapter);
+ new_skb = NULL;
+ if (length < rx_copybreak)
+ new_skb = netdev_alloc_skb(netdev, length);
+
+ if (new_skb) {
+ skb_copy_to_linear_data(new_skb,
+ skb->data + offset,
+ length);
+ skb = new_skb;
+ ibmveth_rxq_recycle_buffer(adapter);
+ } else {
+ ibmveth_rxq_harvest_buffer(adapter);
+ skb_reserve(skb, offset);
+ }
- skb_reserve(skb, offset);
skb_put(skb, length);
skb->protocol = eth_type_trans(skb, netdev);
+ if (csum_good)
+ skb->ip_summed = CHECKSUM_UNNECESSARY;
+
netif_receive_skb(skb); /* send it up */
netdev->stats.rx_packets++;
next prev parent reply other threads:[~2010-08-23 0:27 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-23 0:09 [patch 00/20] ibmveth update Anton Blanchard
2010-08-23 0:09 ` [patch 01/20] ibmveth: Remove integer divide caused by modulus Anton Blanchard
2010-08-23 0:09 ` [patch 02/20] ibmveth: batch rx buffer replacement Anton Blanchard
2010-08-23 0:09 ` [patch 03/20] ibmveth: Remove LLTX Anton Blanchard
2010-08-23 0:09 ` [patch 04/20] ibmveth: Add tx_copybreak Anton Blanchard
2010-08-23 0:09 ` Anton Blanchard [this message]
2010-08-23 0:09 ` [patch 06/20] ibmveth: Use lighter weight read memory barrier in ibmveth_poll Anton Blanchard
2010-08-23 0:09 ` [patch 07/20] ibmveth: Add scatter-gather support Anton Blanchard
2010-08-23 0:09 ` [patch 08/20] ibmveth: Dont overallocate buffers Anton Blanchard
2010-08-23 20:49 ` Robert Jennings
2010-08-25 13:44 ` Brian King
2010-08-23 0:09 ` [patch 09/20] ibmveth: Add optional flush of rx buffer Anton Blanchard
2010-08-23 0:09 ` [patch 10/20] ibmveth: remove procfs code Anton Blanchard
2010-08-23 0:09 ` [patch 11/20] ibmveth: Convert to netdev_alloc_skb Anton Blanchard
2010-08-23 0:09 ` [patch 12/20] ibmveth: Remove redundant function prototypes Anton Blanchard
2010-08-23 0:09 ` [patch 13/20] ibmveth: Convert driver specific debug to netdev_dbg Anton Blanchard
2010-08-23 0:09 ` [patch 14/20] ibmveth: Convert driver specific error functions to netdev_err Anton Blanchard
2010-08-23 0:09 ` [patch 15/20] ibmveth: Some formatting fixes Anton Blanchard
2010-08-23 0:09 ` [patch 16/20] ibmveth: Coding style fixes Anton Blanchard
2010-08-23 0:09 ` [patch 17/20] ibmveth: Return -EINVAL on all ->probe errors Anton Blanchard
2010-08-23 0:09 ` [patch 18/20] ibmveth: Convert driver specific assert to BUG_ON Anton Blanchard
2010-08-23 0:09 ` [patch 19/20] ibmveth: Remove some unnecessary include files Anton Blanchard
2010-08-23 0:09 ` [patch 20/20] ibmveth: Update module information and version Anton Blanchard
2010-08-23 1:57 ` [patch 00/20] ibmveth update David Miller
2010-08-23 2:07 ` Anton Blanchard
2010-08-23 2:15 ` David Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100823001238.751613683@samba.org \
--to=anton@samba.org \
--cc=brking@linux.vnet.ibm.com \
--cc=netdev@vger.kernel.org \
--cc=santil@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.