diff e1000_wip.patch @ 128:0fdaa93ed62b

Start to clean up new compiler patch
author Louis Opter <louis@lse.epita.fr>
date Mon, 26 Aug 2013 22:53:34 -0700
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/e1000_wip.patch	Mon Aug 26 22:53:34 2013 -0700
@@ -0,0 +1,60 @@
+# HG changeset patch
+# Parent e2e8117a5aede962810a9a561890d2cf80997815
+diff --git a/rathaxes/samples/e1000/e1000.blt b/rathaxes/samples/e1000/e1000.blt
+--- a/rathaxes/samples/e1000/e1000.blt
++++ b/rathaxes/samples/e1000/e1000.blt
+@@ -186,9 +186,9 @@
+                         goto err_skbuffs_alloc;
+                     }
+                     ${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;
++                    ${local.skbuff.init(local.k_sk_buff)};
++                    // skbuff->skbuff = k_sk_buff;
++                    // *(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))
+                     {
+@@ -228,7 +228,7 @@
+                 {
+                     dma_unmap_single(
+                             ${rtx_ether_ctx.device},
+-                            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);
+             err_skbuffs_map:
+@@ -350,7 +350,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};
+             }
+@@ -890,15 +890,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,