|
@@ -1221,14 +1221,14 @@ static int dma_tx_fragment(struct b43_dmaring *ring,
|
|
meta->dmaaddr = map_descbuffer(ring, skb->data, skb->len, 1);
|
|
meta->dmaaddr = map_descbuffer(ring, skb->data, skb->len, 1);
|
|
/* create a bounce buffer in zone_dma on mapping failure. */
|
|
/* create a bounce buffer in zone_dma on mapping failure. */
|
|
if (b43_dma_mapping_error(ring, meta->dmaaddr, skb->len, 1)) {
|
|
if (b43_dma_mapping_error(ring, meta->dmaaddr, skb->len, 1)) {
|
|
- priv_info->bouncebuffer = kmalloc(skb->len, GFP_ATOMIC | GFP_DMA);
|
|
|
|
|
|
+ priv_info->bouncebuffer = kmemdup(skb->data, skb->len,
|
|
|
|
+ GFP_ATOMIC | GFP_DMA);
|
|
if (!priv_info->bouncebuffer) {
|
|
if (!priv_info->bouncebuffer) {
|
|
ring->current_slot = old_top_slot;
|
|
ring->current_slot = old_top_slot;
|
|
ring->used_slots = old_used_slots;
|
|
ring->used_slots = old_used_slots;
|
|
err = -ENOMEM;
|
|
err = -ENOMEM;
|
|
goto out_unmap_hdr;
|
|
goto out_unmap_hdr;
|
|
}
|
|
}
|
|
- memcpy(priv_info->bouncebuffer, skb->data, skb->len);
|
|
|
|
|
|
|
|
meta->dmaaddr = map_descbuffer(ring, priv_info->bouncebuffer, skb->len, 1);
|
|
meta->dmaaddr = map_descbuffer(ring, priv_info->bouncebuffer, skb->len, 1);
|
|
if (b43_dma_mapping_error(ring, meta->dmaaddr, skb->len, 1)) {
|
|
if (b43_dma_mapping_error(ring, meta->dmaaddr, skb->len, 1)) {
|