summaryrefslogtreecommitdiff
path: root/drivers/dahdi/voicebus/voicebus_net.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/dahdi/voicebus/voicebus_net.c')
-rw-r--r--drivers/dahdi/voicebus/voicebus_net.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/dahdi/voicebus/voicebus_net.c b/drivers/dahdi/voicebus/voicebus_net.c
index 4a82333..7d4af7f 100644
--- a/drivers/dahdi/voicebus/voicebus_net.c
+++ b/drivers/dahdi/voicebus/voicebus_net.c
@@ -3,7 +3,7 @@
*
* Written by Shaun Ruffell <sruffell@digium.com>
*
- * Copyright (C) 2010 Digium, Inc.
+ * Copyright (C) 2010-2011 Digium, Inc.
*
* All rights reserved.
@@ -57,8 +57,9 @@ static void *
skb_to_vbb(struct voicebus *vb, struct sk_buff *skb)
{
int res;
- void *vbb;
+ struct vbb *vbb;
const int COMMON_HEADER = 30;
+ dma_addr_t dma_addr;
if (skb->len != (VOICEBUS_SFRAME_SIZE + COMMON_HEADER)) {
dev_warn(&vb->pdev->dev, "Packet of length %d is not the "
@@ -67,13 +68,15 @@ skb_to_vbb(struct voicebus *vb, struct sk_buff *skb)
return NULL;
}
- vbb = voicebus_alloc(vb);
+ vbb = dma_pool_alloc(vb->pool, GFP_KERNEL, &dma_addr);
if (!vbb)
return NULL;
+
+ vbb->dma_addr = dma_addr;
res = skb_copy_bits(skb, COMMON_HEADER, vbb, VOICEBUS_SFRAME_SIZE);
if (res) {
dev_warn(&vb->pdev->dev, "Failed call to skb_copy_bits.\n");
- voicebus_free(vb, vbb);
+ dma_pool_free(vb->pool, vbb, vbb->dma_addr);
return NULL;
}
return vbb;