diff rathaxes_samples_e1000_split_set_up_device.patch @ 129:518d9c8ac70c

Clean-up the patch queue
author Louis Opter <louis@lse.epita.fr>
date Mon, 02 Sep 2013 22:59:30 -0700
parents 52402232483f
children 6359457dce75
line wrap: on
line diff
--- a/rathaxes_samples_e1000_split_set_up_device.patch	Mon Aug 26 22:53:34 2013 -0700
+++ b/rathaxes_samples_e1000_split_set_up_device.patch	Mon Sep 02 22:59:30 2013 -0700
@@ -1,5 +1,5 @@
 # HG changeset patch
-# Parent d62a08753da7cec4d44246b747ff79847d9b4238
+# Parent 2bb3ee06ef16e410c364238ccdccf43a6a2acceb
 rathaxes: split and refactor e1000::set_up_device in {Rx,Tx}Ring methods
 
 diff --git a/rathaxes/samples/e1000/e1000.blt b/rathaxes/samples/e1000/e1000.blt
@@ -11,7 +11,7 @@
  {
      template type   e1000::RxDescriptor()
      {
-@@ -96,8 +96,163 @@
+@@ -96,8 +96,164 @@
          {
          }
  
@@ -107,7 +107,7 @@
 +                    ${Socket::SKBuff.ref} skbuff = &hw_ctx->rx_ring.skbuffs[i];
 +                    // XXX breaks rtxGen: ${local.skbuff.init(local.k_sk_buff)};
 +                    skbuff->skbuff = k_sk_buff;
-+                    skbuff->dma_handle = 0;
++                    *(dma_addr_t *)&(skbuff->dma_handle) = 0;
 +                    // XXX #46: ${local.skbuff.map_from(rtx_ether_ctx.device)};
 +                    if (rtx_socket_skbuff_map(${local.skbuff}, ${rtx_ether_ctx.device}, RTX_DMA_FROM_DEVICE))
 +                    {
@@ -147,7 +147,8 @@
 +                {
 +                    dma_unmap_single(
 +                            ${rtx_ether_ctx.device},
-+                            hw_ctx->rx_ring.skbuffs[i].dma_handle,
++                            /* XXX Leaking cast because of the array: */
++                            *((dma_addr_t *)&(hw_ctx->rx_ring.skbuffs[i].dma_handle)),
 +                            ${config.rx_buffer_len},
 +                            DMA_FROM_DEVICE);
 +            err_skbuffs_map:
@@ -175,7 +176,16 @@
          }
      }
  
-@@ -208,7 +363,62 @@
+@@ -195,7 +351,7 @@
+                         E1000_TXD_CMD_RS   |
+                         skb_headlen(${local.k_skb.k_sk_buff}));
+                 tx_desc->upper.data = 0;
+-                tx_desc->buff_addr = cpu_to_le64(skb->dma_handle);
++                tx_desc->buff_addr = cpu_to_le64(${local.skb.dma_handle.k_dma_handle});
+                 memcpy(&self->skbuffs[self->tail], ${local.k_skb.k_sk_buff}, sizeof(*${local.k_skb.k_sk_buff}));
+                 self->tail = (self->tail + 1) % ${config.tx_ring_size};
+             }
+@@ -208,7 +364,62 @@
              }
          }
  
@@ -239,7 +249,7 @@
          {
              rtx_e1000_tx_ring_clean(${self});
          }
-@@ -247,9 +457,8 @@
+@@ -247,9 +458,8 @@
          {
              int                         bars;
              unsigned char /* __iomem */ *ioaddr;
@@ -251,7 +261,7 @@
          }
  
          chunk   Ethernet::HardwareContext()
-@@ -309,10 +518,53 @@
+@@ -309,10 +519,53 @@
              }
          }
  
@@ -306,7 +316,7 @@
      }
  
      template type   e1000::Register()
-@@ -615,269 +867,6 @@
+@@ -615,269 +868,6 @@
          }
      }
  
@@ -576,6 +586,30 @@
      /* TODO:
       *
       * Refactor into two methods (one in RxRing and one in TxRing) and make use
+@@ -901,15 +891,18 @@
+              */
+             for (int i = 0; i != ${config.rx_ring_size}; ++i)
+             {
++                /*
++                 * XXX Leaking casts:
++                 *
++                 * We should go through the rtx types (Socket::SKBuff,
++                 * AbstractSKBuff), but we can't because of the array here,
++                 * which is not supported by the compiler.
++                 */
+                 dma_unmap_single(
+                         ${rtx_ether_ctx.device},
+-                        (dma_addr_t)hw_ctx_->rx_ring.skbuffs[i].dma_handle,
++                        *((dma_addr_t *)&(hw_ctx_->rx_ring.skbuffs[i].dma_handle)),
+                         ${config.rx_buffer_len},
+                         DMA_FROM_DEVICE);
+-                /* XXX Leaking cast
+-                 * (We should go through the rtx types (Socket::SKBuff,
+-                 * AbstractSKBuff)
+-                 */
+                 dev_kfree_skb((struct sk_buff *)hw_ctx_->rx_ring.skbuffs[i].skbuff);
+             }
+             dma_free_coherent(${rtx_ether_ctx.device}, hw_ctx_->rx_ring.size,
 diff --git a/rathaxes/samples/e1000/e1000.rti b/rathaxes/samples/e1000/e1000.rti
 --- a/rathaxes/samples/e1000/e1000.rti
 +++ b/rathaxes/samples/e1000/e1000.rti