diff options
author | Takashi Iwai <tiwai@suse.de> | 2022-09-06 11:04:03 +0200 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2022-09-06 11:04:15 +0200 |
commit | 16c5cde20e304cd900371b140cd53ecafe8d3de5 (patch) | |
tree | e1ece341f2ef3ac98069c3fcb350e16f0a8645bb /sound/core | |
parent | ALSA: usb-audio: Clean up endpoint setups at PCM prepare (diff) | |
parent | ALSA: hda: Once again fix regression of page allocations with IOMMU (diff) | |
download | linux-16c5cde20e304cd900371b140cd53ecafe8d3de5.tar.xz linux-16c5cde20e304cd900371b140cd53ecafe8d3de5.zip |
Merge branch 'for-linus' into for-next
Once again back-merge the 6.0-rc devel branch for further USB-audio
and HD-audio developments.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/core')
-rw-r--r-- | sound/core/memalloc.c | 9 | ||||
-rw-r--r-- | sound/core/oss/pcm_oss.c | 6 |
2 files changed, 10 insertions, 5 deletions
diff --git a/sound/core/memalloc.c b/sound/core/memalloc.c index 39561faef6e9..2c11413bea61 100644 --- a/sound/core/memalloc.c +++ b/sound/core/memalloc.c @@ -558,10 +558,13 @@ static void *snd_dma_noncontig_alloc(struct snd_dma_buffer *dmab, size_t size) dmab->dev.need_sync = dma_need_sync(dmab->dev.dev, sg_dma_address(sgt->sgl)); p = dma_vmap_noncontiguous(dmab->dev.dev, size, sgt); - if (p) + if (p) { dmab->private_data = sgt; - else + /* store the first page address for convenience */ + dmab->addr = snd_sgbuf_get_addr(dmab, 0); + } else { dma_free_noncontiguous(dmab->dev.dev, size, sgt, dmab->dev.dir); + } return p; } @@ -763,6 +766,8 @@ static void *snd_dma_sg_fallback_alloc(struct snd_dma_buffer *dmab, size_t size) if (!p) goto error; dmab->private_data = sgbuf; + /* store the first page address for convenience */ + dmab->addr = snd_sgbuf_get_addr(dmab, 0); return p; error: diff --git a/sound/core/oss/pcm_oss.c b/sound/core/oss/pcm_oss.c index 90c3a367d7de..02df915eb3c6 100644 --- a/sound/core/oss/pcm_oss.c +++ b/sound/core/oss/pcm_oss.c @@ -1672,14 +1672,14 @@ static int snd_pcm_oss_sync(struct snd_pcm_oss_file *pcm_oss_file) runtime = substream->runtime; if (atomic_read(&substream->mmap_count)) goto __direct; - err = snd_pcm_oss_make_ready(substream); - if (err < 0) - return err; atomic_inc(&runtime->oss.rw_ref); if (mutex_lock_interruptible(&runtime->oss.params_lock)) { atomic_dec(&runtime->oss.rw_ref); return -ERESTARTSYS; } + err = snd_pcm_oss_make_ready_locked(substream); + if (err < 0) + goto unlock; format = snd_pcm_oss_format_from(runtime->oss.format); width = snd_pcm_format_physical_width(format); if (runtime->oss.buffer_used > 0) { |