|
@@ -403,8 +403,8 @@ static void igb_dump(struct igb_adapter *adapter)
|
|
|
buffer_info = &tx_ring->tx_buffer_info[tx_ring->next_to_clean];
|
|
|
pr_info(" %5d %5X %5X %016llX %04X %p %016llX\n",
|
|
|
n, tx_ring->next_to_use, tx_ring->next_to_clean,
|
|
|
- (u64)buffer_info->dma,
|
|
|
- buffer_info->length,
|
|
|
+ (u64)dma_unmap_addr(buffer_info, dma),
|
|
|
+ dma_unmap_len(buffer_info, len),
|
|
|
buffer_info->next_to_watch,
|
|
|
(u64)buffer_info->time_stamp);
|
|
|
}
|
|
@@ -455,8 +455,8 @@ static void igb_dump(struct igb_adapter *adapter)
|
|
|
" %04X %p %016llX %p%s\n", i,
|
|
|
le64_to_cpu(u0->a),
|
|
|
le64_to_cpu(u0->b),
|
|
|
- (u64)buffer_info->dma,
|
|
|
- buffer_info->length,
|
|
|
+ (u64)dma_unmap_addr(buffer_info, dma),
|
|
|
+ dma_unmap_len(buffer_info, len),
|
|
|
buffer_info->next_to_watch,
|
|
|
(u64)buffer_info->time_stamp,
|
|
|
buffer_info->skb, next_desc);
|
|
@@ -465,7 +465,8 @@ static void igb_dump(struct igb_adapter *adapter)
|
|
|
print_hex_dump(KERN_INFO, "",
|
|
|
DUMP_PREFIX_ADDRESS,
|
|
|
16, 1, buffer_info->skb->data,
|
|
|
- buffer_info->length, true);
|
|
|
+ dma_unmap_len(buffer_info, len),
|
|
|
+ true);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -3198,20 +3199,20 @@ void igb_unmap_and_free_tx_resource(struct igb_ring *ring,
|
|
|
{
|
|
|
if (tx_buffer->skb) {
|
|
|
dev_kfree_skb_any(tx_buffer->skb);
|
|
|
- if (tx_buffer->dma)
|
|
|
+ if (dma_unmap_len(tx_buffer, len))
|
|
|
dma_unmap_single(ring->dev,
|
|
|
- tx_buffer->dma,
|
|
|
- tx_buffer->length,
|
|
|
+ dma_unmap_addr(tx_buffer, dma),
|
|
|
+ dma_unmap_len(tx_buffer, len),
|
|
|
DMA_TO_DEVICE);
|
|
|
- } else if (tx_buffer->dma) {
|
|
|
+ } else if (dma_unmap_len(tx_buffer, len)) {
|
|
|
dma_unmap_page(ring->dev,
|
|
|
- tx_buffer->dma,
|
|
|
- tx_buffer->length,
|
|
|
+ dma_unmap_addr(tx_buffer, dma),
|
|
|
+ dma_unmap_len(tx_buffer, len),
|
|
|
DMA_TO_DEVICE);
|
|
|
}
|
|
|
tx_buffer->next_to_watch = NULL;
|
|
|
tx_buffer->skb = NULL;
|
|
|
- tx_buffer->dma = 0;
|
|
|
+ dma_unmap_len_set(tx_buffer, len, 0);
|
|
|
/* buffer_info must be completely set up in the transmit path */
|
|
|
}
|
|
|
|
|
@@ -4206,7 +4207,7 @@ static void igb_tx_map(struct igb_ring *tx_ring,
|
|
|
const u8 hdr_len)
|
|
|
{
|
|
|
struct sk_buff *skb = first->skb;
|
|
|
- struct igb_tx_buffer *tx_buffer_info;
|
|
|
+ struct igb_tx_buffer *tx_buffer;
|
|
|
union e1000_adv_tx_desc *tx_desc;
|
|
|
dma_addr_t dma;
|
|
|
struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[0];
|
|
@@ -4227,8 +4228,8 @@ static void igb_tx_map(struct igb_ring *tx_ring,
|
|
|
goto dma_error;
|
|
|
|
|
|
/* record length, and DMA address */
|
|
|
- first->length = size;
|
|
|
- first->dma = dma;
|
|
|
+ dma_unmap_len_set(first, len, size);
|
|
|
+ dma_unmap_addr_set(first, dma, dma);
|
|
|
tx_desc->read.buffer_addr = cpu_to_le64(dma);
|
|
|
|
|
|
for (;;) {
|
|
@@ -4270,9 +4271,9 @@ static void igb_tx_map(struct igb_ring *tx_ring,
|
|
|
if (dma_mapping_error(tx_ring->dev, dma))
|
|
|
goto dma_error;
|
|
|
|
|
|
- tx_buffer_info = &tx_ring->tx_buffer_info[i];
|
|
|
- tx_buffer_info->length = size;
|
|
|
- tx_buffer_info->dma = dma;
|
|
|
+ tx_buffer = &tx_ring->tx_buffer_info[i];
|
|
|
+ dma_unmap_len_set(tx_buffer, len, size);
|
|
|
+ dma_unmap_addr_set(tx_buffer, dma, dma);
|
|
|
|
|
|
tx_desc->read.olinfo_status = 0;
|
|
|
tx_desc->read.buffer_addr = cpu_to_le64(dma);
|
|
@@ -4323,9 +4324,9 @@ dma_error:
|
|
|
|
|
|
/* clear dma mappings for failed tx_buffer_info map */
|
|
|
for (;;) {
|
|
|
- tx_buffer_info = &tx_ring->tx_buffer_info[i];
|
|
|
- igb_unmap_and_free_tx_resource(tx_ring, tx_buffer_info);
|
|
|
- if (tx_buffer_info == first)
|
|
|
+ tx_buffer = &tx_ring->tx_buffer_info[i];
|
|
|
+ igb_unmap_and_free_tx_resource(tx_ring, tx_buffer);
|
|
|
+ if (tx_buffer == first)
|
|
|
break;
|
|
|
if (i == 0)
|
|
|
i = tx_ring->count;
|
|
@@ -5716,18 +5717,19 @@ static bool igb_clean_tx_irq(struct igb_q_vector *q_vector)
|
|
|
|
|
|
/* free the skb */
|
|
|
dev_kfree_skb_any(tx_buffer->skb);
|
|
|
- tx_buffer->skb = NULL;
|
|
|
|
|
|
/* unmap skb header data */
|
|
|
dma_unmap_single(tx_ring->dev,
|
|
|
- tx_buffer->dma,
|
|
|
- tx_buffer->length,
|
|
|
+ dma_unmap_addr(tx_buffer, dma),
|
|
|
+ dma_unmap_len(tx_buffer, len),
|
|
|
DMA_TO_DEVICE);
|
|
|
|
|
|
+ /* clear tx_buffer data */
|
|
|
+ tx_buffer->skb = NULL;
|
|
|
+ dma_unmap_len_set(tx_buffer, len, 0);
|
|
|
+
|
|
|
/* clear last DMA location and unmap remaining buffers */
|
|
|
while (tx_desc != eop_desc) {
|
|
|
- tx_buffer->dma = 0;
|
|
|
-
|
|
|
tx_buffer++;
|
|
|
tx_desc++;
|
|
|
i++;
|
|
@@ -5738,17 +5740,15 @@ static bool igb_clean_tx_irq(struct igb_q_vector *q_vector)
|
|
|
}
|
|
|
|
|
|
/* unmap any remaining paged data */
|
|
|
- if (tx_buffer->dma) {
|
|
|
+ if (dma_unmap_len(tx_buffer, len)) {
|
|
|
dma_unmap_page(tx_ring->dev,
|
|
|
- tx_buffer->dma,
|
|
|
- tx_buffer->length,
|
|
|
+ dma_unmap_addr(tx_buffer, dma),
|
|
|
+ dma_unmap_len(tx_buffer, len),
|
|
|
DMA_TO_DEVICE);
|
|
|
+ dma_unmap_len_set(tx_buffer, len, 0);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /* clear last DMA location */
|
|
|
- tx_buffer->dma = 0;
|
|
|
-
|
|
|
/* move us one more past the eop_desc for start of next pkt */
|
|
|
tx_buffer++;
|
|
|
tx_desc++;
|