sfc: Reduce the size of struct efx_tx_buffer
authorBen Hutchings <bhutchings@solarflare.com>
Mon, 1 Sep 2008 11:46:43 +0000 (12:46 +0100)
committerJeff Garzik <jgarzik@redhat.com>
Wed, 3 Sep 2008 13:53:44 +0000 (09:53 -0400)
Remove unmap_addr since it can be calculated from dma_addr, len and
unmap_len.  This saves 4-16 bytes.

Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
drivers/net/sfc/net_driver.h
drivers/net/sfc/tx.c

index f539e2e0da1bcaff546a059acbbfe2fc3f070971..6369f9253c7bd8584c614ff416c47baa3ae2e3a0 100644 (file)
@@ -130,7 +130,6 @@ struct efx_special_buffer {
  *     This field is zero when the queue slot is empty.
  * @continuation: True if this fragment is not the end of a packet.
  * @unmap_single: True if pci_unmap_single should be used.
- * @unmap_addr: DMA address to unmap
  * @unmap_len: Length of this fragment to unmap
  */
 struct efx_tx_buffer {
@@ -140,7 +139,6 @@ struct efx_tx_buffer {
        unsigned short len;
        unsigned char continuation;
        unsigned char unmap_single;
-       dma_addr_t unmap_addr;
        unsigned short unmap_len;
 };
 
index 11127757c05db2c9de2f1b5406b5c59ebd17fb17..5f01371baaf94c0bb7b90133e278d0c436372a1e 100644 (file)
@@ -64,12 +64,14 @@ static inline void efx_dequeue_buffer(struct efx_tx_queue *tx_queue,
 {
        if (buffer->unmap_len) {
                struct pci_dev *pci_dev = tx_queue->efx->pci_dev;
+               dma_addr_t unmap_addr = (buffer->dma_addr + buffer->len -
+                                        buffer->unmap_len);
                if (buffer->unmap_single)
-                       pci_unmap_single(pci_dev, buffer->unmap_addr,
-                                        buffer->unmap_len, PCI_DMA_TODEVICE);
+                       pci_unmap_single(pci_dev, unmap_addr, buffer->unmap_len,
+                                        PCI_DMA_TODEVICE);
                else
-                       pci_unmap_page(pci_dev, buffer->unmap_addr,
-                                      buffer->unmap_len, PCI_DMA_TODEVICE);
+                       pci_unmap_page(pci_dev, unmap_addr, buffer->unmap_len,
+                                      PCI_DMA_TODEVICE);
                buffer->unmap_len = 0;
                buffer->unmap_single = 0;
        }
@@ -233,7 +235,6 @@ static inline int efx_enqueue_skb(struct efx_tx_queue *tx_queue,
                } while (len);
 
                /* Transfer ownership of the unmapping to the final buffer */
-               buffer->unmap_addr = unmap_addr;
                buffer->unmap_single = unmap_single;
                buffer->unmap_len = unmap_len;
                unmap_len = 0;
@@ -805,6 +806,7 @@ static inline void efx_tso_put_header(struct efx_tx_queue *tx_queue,
 static void efx_enqueue_unwind(struct efx_tx_queue *tx_queue)
 {
        struct efx_tx_buffer *buffer;
+       dma_addr_t unmap_addr;
 
        /* Work backwards until we hit the original insert pointer value */
        while (tx_queue->insert_count != tx_queue->write_count) {
@@ -816,15 +818,15 @@ static void efx_enqueue_unwind(struct efx_tx_queue *tx_queue)
                buffer->len = 0;
                buffer->continuation = 1;
                if (buffer->unmap_len) {
+                       unmap_addr = (buffer->dma_addr + buffer->len -
+                                     buffer->unmap_len);
                        if (buffer->unmap_single)
                                pci_unmap_single(tx_queue->efx->pci_dev,
-                                                buffer->unmap_addr,
-                                                buffer->unmap_len,
+                                                unmap_addr, buffer->unmap_len,
                                                 PCI_DMA_TODEVICE);
                        else
                                pci_unmap_page(tx_queue->efx->pci_dev,
-                                              buffer->unmap_addr,
-                                              buffer->unmap_len,
+                                              unmap_addr, buffer->unmap_len,
                                               PCI_DMA_TODEVICE);
                        buffer->unmap_len = 0;
                }