|
@@ -38,6 +38,10 @@ int snd_free_sgbuf_pages(struct snd_dma_buffer *dmab)
|
|
if (! sgbuf)
|
|
if (! sgbuf)
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
|
|
|
|
|
|
+ if (dmab->area)
|
|
|
|
+ vunmap(dmab->area);
|
|
|
|
+ dmab->area = NULL;
|
|
|
|
+
|
|
tmpb.dev.type = SNDRV_DMA_TYPE_DEV;
|
|
tmpb.dev.type = SNDRV_DMA_TYPE_DEV;
|
|
tmpb.dev.dev = sgbuf->dev;
|
|
tmpb.dev.dev = sgbuf->dev;
|
|
for (i = 0; i < sgbuf->pages; i++) {
|
|
for (i = 0; i < sgbuf->pages; i++) {
|
|
@@ -48,9 +52,6 @@ int snd_free_sgbuf_pages(struct snd_dma_buffer *dmab)
|
|
tmpb.bytes = (sgbuf->table[i].addr & ~PAGE_MASK) << PAGE_SHIFT;
|
|
tmpb.bytes = (sgbuf->table[i].addr & ~PAGE_MASK) << PAGE_SHIFT;
|
|
snd_dma_free_pages(&tmpb);
|
|
snd_dma_free_pages(&tmpb);
|
|
}
|
|
}
|
|
- if (dmab->area)
|
|
|
|
- vunmap(dmab->area);
|
|
|
|
- dmab->area = NULL;
|
|
|
|
|
|
|
|
kfree(sgbuf->table);
|
|
kfree(sgbuf->table);
|
|
kfree(sgbuf->page_table);
|
|
kfree(sgbuf->page_table);
|