aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/emu10k1/emupcm.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/pci/emu10k1/emupcm.c')
-rw-r--r--sound/pci/emu10k1/emupcm.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/sound/pci/emu10k1/emupcm.c b/sound/pci/emu10k1/emupcm.c
index 90d3a0b50d17..166f7c4d28c9 100644
--- a/sound/pci/emu10k1/emupcm.c
+++ b/sound/pci/emu10k1/emupcm.c
@@ -405,15 +405,17 @@ static int snd_emu10k1_playback_hw_params(snd_pcm_substream_t * substream,
405 if ((err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params))) < 0) 405 if ((err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params))) < 0)
406 return err; 406 return err;
407 if (err > 0) { /* change */ 407 if (err > 0) { /* change */
408 snd_util_memblk_t *memblk; 408 int mapped;
409 if (epcm->memblk != NULL) 409 if (epcm->memblk != NULL)
410 snd_emu10k1_free_pages(emu, epcm->memblk); 410 snd_emu10k1_free_pages(emu, epcm->memblk);
411 memblk = snd_emu10k1_alloc_pages(emu, substream); 411 epcm->memblk = snd_emu10k1_alloc_pages(emu, substream);
412 if ((epcm->memblk = memblk) == NULL || ((emu10k1_memblk_t *)memblk)->mapped_page < 0) { 412 epcm->start_addr = 0;
413 epcm->start_addr = 0; 413 if (! epcm->memblk)
414 return -ENOMEM; 414 return -ENOMEM;
415 } 415 mapped = ((emu10k1_memblk_t *)epcm->memblk)->mapped_page;
416 epcm->start_addr = ((emu10k1_memblk_t *)memblk)->mapped_page << PAGE_SHIFT; 416 if (mapped < 0)
417 return -ENOMEM;
418 epcm->start_addr = mapped << PAGE_SHIFT;
417 } 419 }
418 return 0; 420 return 0;
419} 421}