summaryrefslogtreecommitdiff
path: root/drivers/dahdi/wctdm24xxp/base.c
diff options
context:
space:
mode:
authorShaun Ruffell <sruffell@digium.com>2010-09-23 21:38:52 +0000
committerShaun Ruffell <sruffell@digium.com>2010-09-23 21:38:52 +0000
commitb1d6ae6dd425d2e81a6043df3f0f300e7f485604 (patch)
treeb2568f1f76e0dd263a3fd6029de7afbf7d7cd753 /drivers/dahdi/wctdm24xxp/base.c
parentcb9b0ee67f9caba93a884b155d81daa83e72df51 (diff)
wcte12xp, wctdm24xxp: Convert vbb cache from kmem_cache to dma_pool.
The voicebus interface constantly uses the same buffers for moving data to/from the card. A fixed pool has less overhead in this case than constantly mapping/unmapping the kmem_cache_alloced buffers. Saves about ~2.608 us for each run of vb_isr on a 2.40 GHz Xeon test machine. Signed-off-by: Shaun Ruffell <sruffell@digium.com> Acked-by: Russ Meyerriecks <rmeyerriecks@digium.com> git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@9402 a0bf4364-ded3-4de4-8d8a-66a801d63aff
Diffstat (limited to 'drivers/dahdi/wctdm24xxp/base.c')
-rw-r--r--drivers/dahdi/wctdm24xxp/base.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/dahdi/wctdm24xxp/base.c b/drivers/dahdi/wctdm24xxp/base.c
index 15cc48e..cb390d0 100644
--- a/drivers/dahdi/wctdm24xxp/base.c
+++ b/drivers/dahdi/wctdm24xxp/base.c
@@ -2223,7 +2223,7 @@ static void handle_hx8_transmit(struct voicebus *vb, struct list_head *buffers)
list_for_each_entry_safe(vbb, n, buffers, entry) {
list_del(&vbb->entry);
- kmem_cache_free(voicebus_vbb_cache, vbb);
+ dma_pool_free(vb->pool, vbb, vbb->dma_addr);
}
}
@@ -4408,6 +4408,7 @@ static int hx8_send_command(struct wctdm *wc, const u8 *command,
struct sframe_packet *frame;
const int MAX_COMMAND_LENGTH = 264 + 4;
unsigned long flags;
+ dma_addr_t dma_addr;
might_sleep();
@@ -4420,11 +4421,12 @@ static int hx8_send_command(struct wctdm *wc, const u8 *command,
if (count > MAX_COMMAND_LENGTH)
return -EINVAL;
- vbb = kmem_cache_alloc(voicebus_vbb_cache, GFP_KERNEL);
+ vbb = dma_pool_alloc(wc->vb.pool, GFP_KERNEL, &dma_addr);
WARN_ON(!vbb);
if (!vbb)
return -ENOMEM;
-
+
+ vbb->dma_addr = dma_addr;
memset(vbb->data, 0, SFRAME_SIZE);
memcpy(&vbb->data[EFRAME_SIZE + EFRAME_GAP], command, count);