diff options
Diffstat (limited to 'sound/pci')
-rw-r--r-- | sound/pci/emu10k1/emupcm.c | 14 |
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 | } |