[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20100904042820.2655.19704.sendpatchset@jupiter1-ltc-lp2.austin.ibm.com>
Date: Fri, 03 Sep 2010 23:28:20 -0500
From: Santiago Leon <santil@...ux.vnet.ibm.com>
To: netdev@...r.kernel.org
Cc: brking@...ux.vnet.ibm.com,
Santiago Leon <santil@...ux.vnet.ibm.com>, anton@...ba.org
Subject: [patch 04/21] ibmveth: Add tx_copybreak
Use the existing bounce buffer if we send a buffer under a certain size.
This saves the overhead of a TCE map/unmap.
I can't see any reason for the wmb() in the bounce buffer case, if we need
a barrier it will be before we call h_send_logical_lan but we have
nothing in the common case. Remove it.
Signed-off-by: Anton Blanchard <anton@...ba.org>
Signed-off-by: Santiago Leon <santil@...ux.vnet.ibm.com>
---
Index: net-next-2.6/drivers/net/ibmveth.c
===================================================================
--- net-next-2.6.orig//drivers/net/ibmveth.c 2010-09-03 22:18:42.000000000 -0500
+++ net-next-2.6/drivers/net/ibmveth.c 2010-09-03 22:18:43.000000000 -0500
@@ -117,6 +117,11 @@ MODULE_DESCRIPTION("IBM i/pSeries Virtua
MODULE_LICENSE("GPL");
MODULE_VERSION(ibmveth_driver_version);
+static unsigned int tx_copybreak __read_mostly = 128;
+module_param(tx_copybreak, uint, 0644);
+MODULE_PARM_DESC(tx_copybreak,
+ "Maximum size of packet that is copied to a new buffer on transmit");
+
struct ibmveth_stat {
char name[ETH_GSTRING_LEN];
int offset;
@@ -931,17 +936,24 @@ static netdev_tx_t ibmveth_start_xmit(st
buf[1] = 0;
}
- data_dma_addr = dma_map_single(&adapter->vdev->dev, skb->data,
- skb->len, DMA_TO_DEVICE);
- if (dma_mapping_error(&adapter->vdev->dev, data_dma_addr)) {
- if (!firmware_has_feature(FW_FEATURE_CMO))
- ibmveth_error_printk("tx: unable to map xmit buffer\n");
+ if (skb->len < tx_copybreak) {
+ used_bounce = 1;
+ } else {
+ data_dma_addr = dma_map_single(&adapter->vdev->dev, skb->data,
+ skb->len, DMA_TO_DEVICE);
+ if (dma_mapping_error(&adapter->vdev->dev, data_dma_addr)) {
+ if (!firmware_has_feature(FW_FEATURE_CMO))
+ ibmveth_error_printk("tx: unable to map "
+ "xmit buffer\n");
+ tx_map_failed++;
+ used_bounce = 1;
+ }
+ }
+
+ if (used_bounce) {
skb_copy_from_linear_data(skb, adapter->bounce_buffer,
skb->len);
desc.fields.address = adapter->bounce_buffer_dma;
- tx_map_failed++;
- used_bounce = 1;
- wmb();
} else
desc.fields.address = data_dma_addr;
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists