Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package alsa for openSUSE:Factory checked in at 2021-01-25 18:23:07 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/alsa (Old) and /work/SRC/openSUSE:Factory/.alsa.new.28504 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "alsa" Mon Jan 25 18:23:07 2021 rev:208 rq:866050 version:1.2.4 Changes: -------- --- /work/SRC/openSUSE:Factory/alsa/alsa.changes 2021-01-10 19:38:17.857437186 +0100 +++ /work/SRC/openSUSE:Factory/.alsa.new.28504/alsa.changes 2021-01-25 18:23:26.808413903 +0100 @@ -1,0 +2,30 @@ +Fri Jan 22 15:50:07 CET 2021 - ti...@suse.de + +- Yet more fixes for the crash with dmix plugin (bsc#1181194): + 0045-pcm-direct-Fix-the-missing-appl_ptr-update.patch + 0046-pcm-ioplug-Pass-appl_ptr-and-hw_ptr-in-snd_pcm_statu.patch + 0047-pcm-null-Pass-appl_ptr-and-hw_ptr-in-snd_pcm_status.patch + 0048-pcm-share-Pass-appl_ptr-and-hw_ptr-in-snd_pcm_status.patch + +------------------------------------------------------------------- +Thu Jan 21 09:36:12 CET 2021 - ti...@suse.de + +- Backport upstream fixes: + yet more PCM plugin fixes, topology fixes/cleanups, UAF fix in + UCM (bsc#1181194): + 0004-topology-use-inclusive-language-for-bclk.patch + 0005-topology-use-inclusive-language-for-fsync.patch + 0006-topology-use-inclusive-language-in-documentation.patch + 0034-ucm-fix-possible-memory-leak-in-parse_verb_file.patch + 0035-topology-tplg_pprint_integer-fix-coverity-uninitaliz.patch + 0036-topology-tplg_add_widget_object-do-not-use-invalid-e.patch + 0037-topology-tplg_decode_pcm-add-missing-log-argument-co.patch + 0038-topology-parse_tuple_set-remove-dead-condition-code.patch + 0039-ucm-uc_mgr_substitute_tree-fix-use-after-free.patch + 0040-topology-sort_config-cleanups-use-goto-for-the-error.patch + 0041-conf-USB-add-Xonar-U7-MKII-to-USB-Audio.pcm.iec958_d.patch + 0042-pcm_plugin-set-the-initial-hw_ptr-appl_ptr-from-the-.patch + 0043-pcm-dmix-dshare-delay-calculation-fixes-and-cleanups.patch + 0044-topology-fix-parse_tuple_set-remove-dead-condition-c.patch + +------------------------------------------------------------------- New: ---- 0004-topology-use-inclusive-language-for-bclk.patch 0005-topology-use-inclusive-language-for-fsync.patch 0006-topology-use-inclusive-language-in-documentation.patch 0034-ucm-fix-possible-memory-leak-in-parse_verb_file.patch 0035-topology-tplg_pprint_integer-fix-coverity-uninitaliz.patch 0036-topology-tplg_add_widget_object-do-not-use-invalid-e.patch 0037-topology-tplg_decode_pcm-add-missing-log-argument-co.patch 0038-topology-parse_tuple_set-remove-dead-condition-code.patch 0039-ucm-uc_mgr_substitute_tree-fix-use-after-free.patch 0040-topology-sort_config-cleanups-use-goto-for-the-error.patch 0041-conf-USB-add-Xonar-U7-MKII-to-USB-Audio.pcm.iec958_d.patch 0042-pcm_plugin-set-the-initial-hw_ptr-appl_ptr-from-the-.patch 0043-pcm-dmix-dshare-delay-calculation-fixes-and-cleanups.patch 0044-topology-fix-parse_tuple_set-remove-dead-condition-c.patch 0045-pcm-direct-Fix-the-missing-appl_ptr-update.patch 0046-pcm-ioplug-Pass-appl_ptr-and-hw_ptr-in-snd_pcm_statu.patch 0047-pcm-null-Pass-appl_ptr-and-hw_ptr-in-snd_pcm_status.patch 0048-pcm-share-Pass-appl_ptr-and-hw_ptr-in-snd_pcm_status.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ alsa.spec ++++++ --- /var/tmp/diff_new_pack.j9gjKd/_old 2021-01-25 18:23:27.884415438 +0100 +++ /var/tmp/diff_new_pack.j9gjKd/_new 2021-01-25 18:23:27.888415443 +0100 @@ -55,6 +55,9 @@ Patch1: 0001-dlmisc-the-snd_plugin_dir_set-snd_plugin_dir-must-be.patch Patch2: 0002-dlmisc-fix-snd_plugin_dir-locking-for-not-DL_ORIGIN_.patch Patch3: 0003-pcm-snd_pcm_mmap_readi-fix-typo-in-comment.patch +Patch4: 0004-topology-use-inclusive-language-for-bclk.patch +Patch5: 0005-topology-use-inclusive-language-for-fsync.patch +Patch6: 0006-topology-use-inclusive-language-in-documentation.patch Patch7: 0007-pcm-set-the-snd_pcm_ioplug_status-tstamp-field.patch Patch9: 0009-pcm-Add-snd_pcm_audio_tstamp_type_t-constants.patch Patch10: 0010-test-audio_time-Make-use-of-SND_PCM_AUDIO_TSTAMP_TYP.patch @@ -81,6 +84,21 @@ Patch31: 0031-pcm-plugin-fix-status-code-for-capture.patch Patch32: 0032-pcm-rate-use-pcm_frame_diff-on-related-places.patch Patch33: 0033-pcm-rate-fix-the-capture-delay-values.patch +Patch34: 0034-ucm-fix-possible-memory-leak-in-parse_verb_file.patch +Patch35: 0035-topology-tplg_pprint_integer-fix-coverity-uninitaliz.patch +Patch36: 0036-topology-tplg_add_widget_object-do-not-use-invalid-e.patch +Patch37: 0037-topology-tplg_decode_pcm-add-missing-log-argument-co.patch +Patch38: 0038-topology-parse_tuple_set-remove-dead-condition-code.patch +Patch39: 0039-ucm-uc_mgr_substitute_tree-fix-use-after-free.patch +Patch40: 0040-topology-sort_config-cleanups-use-goto-for-the-error.patch +Patch41: 0041-conf-USB-add-Xonar-U7-MKII-to-USB-Audio.pcm.iec958_d.patch +Patch42: 0042-pcm_plugin-set-the-initial-hw_ptr-appl_ptr-from-the-.patch +Patch43: 0043-pcm-dmix-dshare-delay-calculation-fixes-and-cleanups.patch +Patch44: 0044-topology-fix-parse_tuple_set-remove-dead-condition-c.patch +Patch45: 0045-pcm-direct-Fix-the-missing-appl_ptr-update.patch +Patch46: 0046-pcm-ioplug-Pass-appl_ptr-and-hw_ptr-in-snd_pcm_statu.patch +Patch47: 0047-pcm-null-Pass-appl_ptr-and-hw_ptr-in-snd_pcm_status.patch +Patch48: 0048-pcm-share-Pass-appl_ptr-and-hw_ptr-in-snd_pcm_status.patch # rest suse fixes Patch101: alsa-lib-ignore-non-accessible-ALSA_CONFIG_PATH.patch BuildRequires: doxygen @@ -172,6 +190,9 @@ %patch1 -p1 %patch2 -p1 %patch3 -p1 +%patch4 -p1 +%patch5 -p1 +%patch6 -p1 %patch7 -p1 %patch9 -p1 %patch10 -p1 @@ -198,6 +219,21 @@ %patch31 -p1 %patch32 -p1 %patch33 -p1 +%patch34 -p1 +%patch35 -p1 +%patch36 -p1 +%patch37 -p1 +%patch38 -p1 +%patch39 -p1 +%patch40 -p1 +%patch41 -p1 +%patch42 -p1 +%patch43 -p1 +%patch44 -p1 +%patch45 -p1 +%patch46 -p1 +%patch47 -p1 +%patch48 -p1 %patch101 -p1 %build ++++++ 0004-topology-use-inclusive-language-for-bclk.patch ++++++ >From 39bd0e1a5be3620f9123f7fe72ffa6cb7d463b21 Mon Sep 17 00:00:00 2001 From: Pierre-Louis Bossart <pierre-louis.boss...@linux.intel.com> Date: Thu, 12 Nov 2020 10:29:38 -0600 Subject: [PATCH 04/44] topology: use inclusive language for bclk use bclk_provider for structure fields, 'codec_provider' and 'codec_consumer' for options and modify #defines to use CP and CC suffixes. Signed-off-by: Pierre-Louis Bossart <pierre-louis.boss...@linux.intel.com> Signed-off-by: Takashi Iwai <ti...@suse.de> --- include/sound/uapi/asoc.h | 11 +++++++---- include/topology.h | 2 +- src/topology/pcm.c | 36 ++++++++++++++++++++++++++---------- 3 files changed, 34 insertions(+), 15 deletions(-) diff --git a/include/sound/uapi/asoc.h b/include/sound/uapi/asoc.h index 4efb4ec42500..ceafb1a90b98 100644 --- a/include/sound/uapi/asoc.h +++ b/include/sound/uapi/asoc.h @@ -169,10 +169,13 @@ #define SND_SOC_TPLG_LNK_FLGBIT_VOICE_WAKEUP (1 << 3) /* DAI topology BCLK parameter - * For the backwards capability, by default codec is bclk master + * For the backwards capability, by default codec is bclk provider */ -#define SND_SOC_TPLG_BCLK_CM 0 /* codec is bclk master */ -#define SND_SOC_TPLG_BCLK_CS 1 /* codec is bclk slave */ +#define SND_SOC_TPLG_BCLK_CP 0 /* codec is bclk provider */ +#define SND_SOC_TPLG_BCLK_CC 1 /* codec is bclk consumer */ +/* keep previous definitions for compatibility */ +#define SND_SOC_TPLG_BCLK_CM SND_SOC_TPLG_BCLK_CP +#define SND_SOC_TPLG_BCLK_CS SND_SOC_TPLG_BCLK_CC /* DAI topology FSYNC parameter * For the backwards capability, by default codec is fsync master @@ -335,7 +338,7 @@ struct snd_soc_tplg_hw_config { __u8 clock_gated; /* SND_SOC_TPLG_DAI_CLK_GATE_ value */ __u8 invert_bclk; /* 1 for inverted BCLK, 0 for normal */ __u8 invert_fsync; /* 1 for inverted frame clock, 0 for normal */ - __u8 bclk_master; /* SND_SOC_TPLG_BCLK_ value */ + __u8 bclk_provider; /* SND_SOC_TPLG_BCLK_ value */ __u8 fsync_master; /* SND_SOC_TPLG_FSYNC_ value */ __u8 mclk_direction; /* SND_SOC_TPLG_MCLK_ value */ __le16 reserved; /* for 32bit alignment */ diff --git a/include/topology.h b/include/topology.h index 1f52e66ea7b0..6c9706496fc3 100644 --- a/include/topology.h +++ b/include/topology.h @@ -1028,7 +1028,7 @@ struct snd_tplg_hw_config_template { unsigned char clock_gated; /* SND_SOC_TPLG_DAI_CLK_GATE_ value */ unsigned char invert_bclk; /* 1 for inverted BCLK, 0 for normal */ unsigned char invert_fsync; /* 1 for inverted frame clock, 0 for normal */ - unsigned char bclk_master; /* SND_SOC_TPLG_BCLK_ value */ + unsigned char bclk_provider; /* SND_SOC_TPLG_BCLK_ value */ unsigned char fsync_master; /* SND_SOC_TPLG_FSYNC_ value */ unsigned char mclk_direction; /* SND_SOC_TPLG_MCLK_ value */ unsigned short reserved; /* for 32bit alignment */ diff --git a/src/topology/pcm.c b/src/topology/pcm.c index 191b7a0a92da..f05df348fa23 100644 --- a/src/topology/pcm.c +++ b/src/topology/pcm.c @@ -1411,6 +1411,7 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg, snd_config_t *n; const char *id, *val = NULL; int ret, ival; + bool provider_legacy; elem = tplg_elem_new_common(tplg, cfg, NULL, SND_TPLG_TYPE_HW_CONFIG); if (!elem) @@ -1451,8 +1452,15 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg, continue; } - if (strcmp(id, "bclk") == 0 || - strcmp(id, "bclk_master") == 0) { + provider_legacy = false; + if (strcmp(id, "bclk_master") == 0) { + SNDERR("deprecated option %s, please use 'bclk'\n", id); + provider_legacy = true; + } + + if (provider_legacy || + strcmp(id, "bclk") == 0) { + if (snd_config_get_string(n, &val) < 0) return -EINVAL; @@ -1462,11 +1470,19 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg, */ SNDERR("deprecated bclk value '%s'", val); - hw_cfg->bclk_master = SND_SOC_TPLG_BCLK_CS; + hw_cfg->bclk_provider = SND_SOC_TPLG_BCLK_CC; } else if (!strcmp(val, "codec_slave")) { - hw_cfg->bclk_master = SND_SOC_TPLG_BCLK_CS; + SNDERR("deprecated bclk value '%s', use 'codec_consumer'", val); + + hw_cfg->bclk_provider = SND_SOC_TPLG_BCLK_CC; + } else if (!strcmp(val, "codec_consumer")) { + hw_cfg->bclk_provider = SND_SOC_TPLG_BCLK_CC; } else if (!strcmp(val, "codec_master")) { - hw_cfg->bclk_master = SND_SOC_TPLG_BCLK_CM; + SNDERR("deprecated bclk value '%s', use 'codec_provider", val); + + hw_cfg->bclk_provider = SND_SOC_TPLG_BCLK_CP; + } else if (!strcmp(val, "codec_provider")) { + hw_cfg->bclk_provider = SND_SOC_TPLG_BCLK_CP; } continue; } @@ -1623,10 +1639,10 @@ int tplg_save_hw_config(snd_tplg_t *tplg ATTRIBUTE_UNUSED, if (err >= 0 && hc->fmt) err = tplg_save_printf(dst, pfx, "\tformat '%s'\n", get_audio_hw_format_name(hc->fmt)); - if (err >= 0 && hc->bclk_master) + if (err >= 0 && hc->bclk_provider) err = tplg_save_printf(dst, pfx, "\tbclk '%s'\n", - hc->bclk_master == SND_SOC_TPLG_BCLK_CS ? - "codec_slave" : "codec_master"); + hc->bclk_provider == SND_SOC_TPLG_BCLK_CC ? + "codec_consumer" : "codec_provider"); if (err >= 0 && hc->bclk_rate) err = tplg_save_printf(dst, pfx, "\tbclk_freq %u\n", hc->bclk_rate); @@ -1791,7 +1807,7 @@ static int set_link_hw_config(struct snd_soc_tplg_hw_config *cfg, cfg->clock_gated = tpl->clock_gated; cfg->invert_bclk = tpl->invert_bclk; cfg->invert_fsync = tpl->invert_fsync; - cfg->bclk_master = tpl->bclk_master; + cfg->bclk_provider = tpl->bclk_provider; cfg->fsync_master = tpl->fsync_master; cfg->mclk_direction = tpl->mclk_direction; cfg->reserved = tpl->reserved; @@ -2174,7 +2190,7 @@ next: hw->clock_gated = link->hw_config[i].clock_gated; hw->invert_bclk = link->hw_config[i].invert_bclk; hw->invert_fsync = link->hw_config[i].invert_fsync; - hw->bclk_master = link->hw_config[i].bclk_master; + hw->bclk_provider = link->hw_config[i].bclk_provider; hw->fsync_master = link->hw_config[i].fsync_master; hw->mclk_direction = link->hw_config[i].mclk_direction; hw->mclk_rate = link->hw_config[i].mclk_rate; -- 2.26.2 ++++++ 0005-topology-use-inclusive-language-for-fsync.patch ++++++ >From 706192341d1d0bbb906d690b227b9dee5c1fc4b5 Mon Sep 17 00:00:00 2001 From: Pierre-Louis Bossart <pierre-louis.boss...@linux.intel.com> Date: Thu, 12 Nov 2020 10:29:39 -0600 Subject: [PATCH 05/44] topology: use inclusive language for fsync use fsync_provider for structure fields, 'codec_provider' and 'codec_consumer' for options and modify #defines to use CP and CC suffixes. Signed-off-by: Pierre-Louis Bossart <pierre-louis.boss...@linux.intel.com> Signed-off-by: Takashi Iwai <ti...@suse.de> --- include/sound/uapi/asoc.h | 11 +++++++---- include/topology.h | 2 +- src/topology/pcm.c | 37 ++++++++++++++++++++++++++----------- 3 files changed, 34 insertions(+), 16 deletions(-) diff --git a/include/sound/uapi/asoc.h b/include/sound/uapi/asoc.h index ceafb1a90b98..f32c56972d3f 100644 --- a/include/sound/uapi/asoc.h +++ b/include/sound/uapi/asoc.h @@ -178,10 +178,13 @@ #define SND_SOC_TPLG_BCLK_CS SND_SOC_TPLG_BCLK_CC /* DAI topology FSYNC parameter - * For the backwards capability, by default codec is fsync master + * For the backwards capability, by default codec is fsync provider */ -#define SND_SOC_TPLG_FSYNC_CM 0 /* codec is fsync master */ -#define SND_SOC_TPLG_FSYNC_CS 1 /* codec is fsync slave */ +#define SND_SOC_TPLG_FSYNC_CP 0 /* codec is fsync provider */ +#define SND_SOC_TPLG_FSYNC_CC 1 /* codec is fsync consumer */ +/* keep previous definitions for compatibility */ +#define SND_SOC_TPLG_FSYNC_CM SND_SOC_TPLG_FSYNC_CP +#define SND_SOC_TPLG_FSYNC_CS SND_SOC_TPLG_FSYNC_CC /* * Block Header. @@ -339,7 +342,7 @@ struct snd_soc_tplg_hw_config { __u8 invert_bclk; /* 1 for inverted BCLK, 0 for normal */ __u8 invert_fsync; /* 1 for inverted frame clock, 0 for normal */ __u8 bclk_provider; /* SND_SOC_TPLG_BCLK_ value */ - __u8 fsync_master; /* SND_SOC_TPLG_FSYNC_ value */ + __u8 fsync_provider; /* SND_SOC_TPLG_FSYNC_ value */ __u8 mclk_direction; /* SND_SOC_TPLG_MCLK_ value */ __le16 reserved; /* for 32bit alignment */ __le32 mclk_rate; /* MCLK or SYSCLK freqency in Hz */ diff --git a/include/topology.h b/include/topology.h index 6c9706496fc3..4ade20df0751 100644 --- a/include/topology.h +++ b/include/topology.h @@ -1029,7 +1029,7 @@ struct snd_tplg_hw_config_template { unsigned char invert_bclk; /* 1 for inverted BCLK, 0 for normal */ unsigned char invert_fsync; /* 1 for inverted frame clock, 0 for normal */ unsigned char bclk_provider; /* SND_SOC_TPLG_BCLK_ value */ - unsigned char fsync_master; /* SND_SOC_TPLG_FSYNC_ value */ + unsigned char fsync_provider; /* SND_SOC_TPLG_FSYNC_ value */ unsigned char mclk_direction; /* SND_SOC_TPLG_MCLK_ value */ unsigned short reserved; /* for 32bit alignment */ unsigned int mclk_rate; /* MCLK or SYSCLK freqency in Hz */ diff --git a/src/topology/pcm.c b/src/topology/pcm.c index f05df348fa23..c8f418621323 100644 --- a/src/topology/pcm.c +++ b/src/topology/pcm.c @@ -1504,8 +1504,15 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg, continue; } - if (strcmp(id, "fsync") == 0 || - strcmp(id, "fsync_master") == 0) { + provider_legacy = false; + if (strcmp(id, "fsync_master") == 0) { + SNDERR("deprecated option %s, please use 'fsync'\n", id); + provider_legacy = true; + } + + if (provider_legacy || + strcmp(id, "fsync") == 0) { + if (snd_config_get_string(n, &val) < 0) return -EINVAL; @@ -1515,11 +1522,19 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg, */ SNDERR("deprecated fsync value '%s'", val); - hw_cfg->fsync_master = SND_SOC_TPLG_FSYNC_CS; + hw_cfg->fsync_provider = SND_SOC_TPLG_FSYNC_CC; } else if (!strcmp(val, "codec_slave")) { - hw_cfg->fsync_master = SND_SOC_TPLG_FSYNC_CS; + SNDERR("deprecated fsync value '%s', use 'codec_consumer'", val); + + hw_cfg->fsync_provider = SND_SOC_TPLG_FSYNC_CC; + } else if (!strcmp(val, "codec_consumer")) { + hw_cfg->fsync_provider = SND_SOC_TPLG_FSYNC_CC; } else if (!strcmp(val, "codec_master")) { - hw_cfg->fsync_master = SND_SOC_TPLG_FSYNC_CM; + SNDERR("deprecated fsync value '%s', use 'codec_provider'", val); + + hw_cfg->fsync_provider = SND_SOC_TPLG_FSYNC_CP; + } else if (!strcmp(val, "codec_provider")) { + hw_cfg->fsync_provider = SND_SOC_TPLG_FSYNC_CP; } continue; } @@ -1648,10 +1663,10 @@ int tplg_save_hw_config(snd_tplg_t *tplg ATTRIBUTE_UNUSED, hc->bclk_rate); if (err >= 0 && hc->invert_bclk) err = tplg_save_printf(dst, pfx, "\tbclk_invert 1\n"); - if (err >= 0 && hc->fsync_master) - err = tplg_save_printf(dst, pfx, "\tfsync_master '%s'\n", - hc->fsync_master == SND_SOC_TPLG_FSYNC_CS ? - "codec_slave" : "codec_master"); + if (err >= 0 && hc->fsync_provider) + err = tplg_save_printf(dst, pfx, "\tfsync_provider '%s'\n", + hc->fsync_provider == SND_SOC_TPLG_FSYNC_CC ? + "codec_consumer" : "codec_provider"); if (err >= 0 && hc->fsync_rate) err = tplg_save_printf(dst, pfx, "\tfsync_freq %u\n", hc->fsync_rate); @@ -1808,7 +1823,7 @@ static int set_link_hw_config(struct snd_soc_tplg_hw_config *cfg, cfg->invert_bclk = tpl->invert_bclk; cfg->invert_fsync = tpl->invert_fsync; cfg->bclk_provider = tpl->bclk_provider; - cfg->fsync_master = tpl->fsync_master; + cfg->fsync_provider = tpl->fsync_provider; cfg->mclk_direction = tpl->mclk_direction; cfg->reserved = tpl->reserved; cfg->mclk_rate = tpl->mclk_rate; @@ -2191,7 +2206,7 @@ next: hw->invert_bclk = link->hw_config[i].invert_bclk; hw->invert_fsync = link->hw_config[i].invert_fsync; hw->bclk_provider = link->hw_config[i].bclk_provider; - hw->fsync_master = link->hw_config[i].fsync_master; + hw->fsync_provider = link->hw_config[i].fsync_provider; hw->mclk_direction = link->hw_config[i].mclk_direction; hw->mclk_rate = link->hw_config[i].mclk_rate; hw->bclk_rate = link->hw_config[i].bclk_rate; -- 2.26.2 ++++++ 0006-topology-use-inclusive-language-in-documentation.patch ++++++ >From e5c350d7bc6f3d45702059c0ae8d32b3603273c1 Mon Sep 17 00:00:00 2001 From: Pierre-Louis Bossart <pierre-louis.boss...@linux.intel.com> Date: Thu, 12 Nov 2020 10:29:40 -0600 Subject: [PATCH 06/44] topology: use inclusive language in documentation Use codec_provider and codec_consumer for bclk and fsync Signed-off-by: Pierre-Louis Bossart <pierre-louis.boss...@linux.intel.com> Signed-off-by: Takashi Iwai <ti...@suse.de> --- include/topology.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/topology.h b/include/topology.h index 4ade20df0751..d1feee4d9e25 100644 --- a/include/topology.h +++ b/include/topology.h @@ -658,8 +658,8 @@ extern "C" { * * id "1" # used for binding to the config * format "I2S" # physical audio format. - * bclk "master" # Platform is master of bit clock - * fsync "slave" # Platform is slave of fsync + * bclk "codec_provider" # Codec provides the bit clock + * fsync "codec_consumer" # Codec follows the fsync * } * </pre> * -- 2.26.2 ++++++ 0034-ucm-fix-possible-memory-leak-in-parse_verb_file.patch ++++++ >From 437b5b3aae8b1d9f65289f563deb0fa6356a0fa6 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela <pe...@perex.cz> Date: Thu, 7 Jan 2021 17:32:11 +0100 Subject: [PATCH 34/44] ucm: fix possible memory leak in parse_verb_file() Signed-off-by: Jaroslav Kysela <pe...@perex.cz> --- src/ucm/parser.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ucm/parser.c b/src/ucm/parser.c index 75b78826f260..c8bee1f2e1dd 100644 --- a/src/ucm/parser.c +++ b/src/ucm/parser.c @@ -1575,7 +1575,7 @@ static int parse_verb_file(snd_use_case_mgr_t *uc_mgr, /* in-place evaluation */ err = uc_mgr_evaluate_inplace(uc_mgr, cfg); if (err < 0) - return err; + goto _err; /* parse master config sections */ snd_config_for_each(i, next, cfg) { -- 2.26.2 ++++++ 0035-topology-tplg_pprint_integer-fix-coverity-uninitaliz.patch ++++++ >From d0bb8f84c92357bfd0e024efe5f6d53a963c4d7a Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela <pe...@perex.cz> Date: Thu, 7 Jan 2021 17:34:00 +0100 Subject: [PATCH 35/44] topology: tplg_pprint_integer() fix coverity uninitalized variable error Signed-off-by: Jaroslav Kysela <pe...@perex.cz> --- src/topology/save.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/topology/save.c b/src/topology/save.c index c7a5a801372e..f7af7af3e8c2 100644 --- a/src/topology/save.c +++ b/src/topology/save.c @@ -133,6 +133,8 @@ static int tplg_pprint_integer(snd_config_t *n, char **ret) if (llval < INT_MIN || llval > UINT_MAX) return snd_config_get_ascii(n, ret); lval = llval; + } else { + lval = 0; } err = tplg_nice_value_format(buf, sizeof(buf), (unsigned int)lval); if (err < 0) -- 2.26.2 ++++++ 0036-topology-tplg_add_widget_object-do-not-use-invalid-e.patch ++++++ >From b8764a061b83284be60adc01c1f7b035c4484ace Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela <pe...@perex.cz> Date: Thu, 7 Jan 2021 17:36:04 +0100 Subject: [PATCH 36/44] topology: tplg_add_widget_object() - do not use invalid elem_ctl Signed-off-by: Jaroslav Kysela <pe...@perex.cz> --- src/topology/dapm.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/topology/dapm.c b/src/topology/dapm.c index 92dc01aa864d..f6a84a6035ce 100644 --- a/src/topology/dapm.c +++ b/src/topology/dapm.c @@ -836,6 +836,7 @@ int tplg_add_widget_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t) default: SNDERR("widget %s: invalid type %d for ctl %d", wt->name, ct->type, i); + ret = -EINVAL; break; } -- 2.26.2 ++++++ 0037-topology-tplg_decode_pcm-add-missing-log-argument-co.patch ++++++ >From 0dbaba95f4bc59602bf2d3fb12a60db7444e5892 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela <pe...@perex.cz> Date: Thu, 7 Jan 2021 17:38:50 +0100 Subject: [PATCH 37/44] topology: tplg_decode_pcm() - add missing log argument (compress) Signed-off-by: Jaroslav Kysela <pe...@perex.cz> --- src/topology/pcm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/topology/pcm.c b/src/topology/pcm.c index c8f418621323..a473b59b4c5c 100644 --- a/src/topology/pcm.c +++ b/src/topology/pcm.c @@ -2020,7 +2020,7 @@ next: pt->playback = pcm->playback; pt->capture = pcm->capture; pt->compress = pcm->compress; - tplg_log(tplg, 'D', pos, "pcm: playback %d capture %d compress", + tplg_log(tplg, 'D', pos, "pcm: playback %d capture %d compress %d", pt->playback, pt->capture, pt->compress); pt->num_streams = pcm->num_streams; pt->flag_mask = pcm->flag_mask; -- 2.26.2 ++++++ 0038-topology-parse_tuple_set-remove-dead-condition-code.patch ++++++ >From 51e1d486ce4535923692bd1d7e59d5aa3a29cd50 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela <pe...@perex.cz> Date: Thu, 7 Jan 2021 17:40:42 +0100 Subject: [PATCH 38/44] topology: parse_tuple_set() - remove dead condition code Signed-off-by: Jaroslav Kysela <pe...@perex.cz> --- src/topology/data.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/topology/data.c b/src/topology/data.c index c2931bd2bbb3..5633cdc34dd9 100644 --- a/src/topology/data.c +++ b/src/topology/data.c @@ -860,7 +860,7 @@ static int parse_tuple_set(snd_config_t *cfg, } if ((type == SND_SOC_TPLG_TUPLE_TYPE_WORD - && tuple_val > UINT_MAX) + /* && tuple_val > UINT_MAX */) || (type == SND_SOC_TPLG_TUPLE_TYPE_SHORT && tuple_val > USHRT_MAX) || (type == SND_SOC_TPLG_TUPLE_TYPE_BYTE -- 2.26.2 ++++++ 0039-ucm-uc_mgr_substitute_tree-fix-use-after-free.patch ++++++ >From 3f63dc26445ae7c215e48a57af83b6da325f166d Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela <pe...@perex.cz> Date: Thu, 7 Jan 2021 17:41:38 +0100 Subject: [PATCH 39/44] ucm: uc_mgr_substitute_tree() fix use after free Signed-off-by: Jaroslav Kysela <pe...@perex.cz> --- src/ucm/ucm_subs.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ucm/ucm_subs.c b/src/ucm/ucm_subs.c index f608bb0955a6..df6d736fc820 100644 --- a/src/ucm/ucm_subs.c +++ b/src/ucm/ucm_subs.c @@ -417,11 +417,12 @@ int uc_mgr_substitute_tree(snd_use_case_mgr_t *uc_mgr, snd_config_t *node) if (err < 0) return err; err = snd_config_set_id(node, s); - free(s); if (err < 0) { uc_error("unable to set substituted id '%s' (old id '%s')", s, id); + free(s); return err; } + free(s); } if (snd_config_get_type(node) != SND_CONFIG_TYPE_COMPOUND) { if (snd_config_get_type(node) == SND_CONFIG_TYPE_STRING) { -- 2.26.2 ++++++ 0040-topology-sort_config-cleanups-use-goto-for-the-error.patch ++++++ >From 45f503632acf24877c466a7c1c74d8a26414bf3e Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela <pe...@perex.cz> Date: Thu, 7 Jan 2021 17:45:27 +0100 Subject: [PATCH 40/44] topology: sort_config() cleanups - use goto for the error path Signed-off-by: Jaroslav Kysela <pe...@perex.cz> --- src/topology/save.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/topology/save.c b/src/topology/save.c index f7af7af3e8c2..fecbc6a5dfa8 100644 --- a/src/topology/save.c +++ b/src/topology/save.c @@ -180,29 +180,28 @@ static snd_config_t *sort_config(const char *id, snd_config_t *src) } if (array <= 0) qsort(a, count, sizeof(a[0]), _compar); - if (snd_config_make_compound(&dst, id, count == 1)) { - free(a); - return NULL; - } + if (snd_config_make_compound(&dst, id, count == 1)) + goto lerr; for (index = 0; index < count; index++) { snd_config_t *s = a[index]; const char *id2; if (snd_config_get_id(s, &id2)) { snd_config_delete(dst); - free(a); - return NULL; + goto lerr; } s = sort_config(id2, s); if (s == NULL || snd_config_add(dst, s)) { if (s) snd_config_delete(s); snd_config_delete(dst); - free(a); - return NULL; + goto lerr; } } free(a); return dst; +lerr: + free(a); + return NULL; } static int tplg_check_quoted(const unsigned char *p) -- 2.26.2 ++++++ 0041-conf-USB-add-Xonar-U7-MKII-to-USB-Audio.pcm.iec958_d.patch ++++++ >From 93752fb4de397554e92a4eb9079f77dabaec7d7f Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela <pe...@perex.cz> Date: Thu, 7 Jan 2021 17:49:25 +0100 Subject: [PATCH 41/44] conf: USB - add "Xonar U7 MKII" to USB-Audio.pcm.iec958_device BugLink: https://github.com/alsa-project/alsa-lib/issues/100 Signed-off-by: Jaroslav Kysela <pe...@perex.cz> --- src/conf/cards/USB-Audio.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/src/conf/cards/USB-Audio.conf b/src/conf/cards/USB-Audio.conf index 9b64af3c0da9..b1b74b02cb1d 100644 --- a/src/conf/cards/USB-Audio.conf +++ b/src/conf/cards/USB-Audio.conf @@ -39,6 +39,7 @@ USB-Audio.pcm.iec958_device { # "NoiseBlaster 3000" 42 "USB Sound Blaster HD" 1 "Xonar U7" 1 + "Xonar U7 MKII" 1 "ASUS XONAR U5" 1 "XONAR U5" 1 "XONAR SOUND CARD" 1 -- 2.26.2 ++++++ 0042-pcm_plugin-set-the-initial-hw_ptr-appl_ptr-from-the-.patch ++++++ >From 644514e85da169670e4a490b7b15b5ecfcec92c0 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela <pe...@perex.cz> Date: Mon, 18 Jan 2021 21:09:43 +0100 Subject: [PATCH 42/44] pcm_plugin: set the initial hw_ptr/appl_ptr from the child pcm The direct plugins (dmix & etc.) sets own initial hw_ptr and appl_ptr. Use this initial settings to export correct values in snd_pcm_status(). Signed-off-by: Jaroslav Kysela <pe...@perex.cz> --- src/pcm/pcm_plugin.c | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/src/pcm/pcm_plugin.c b/src/pcm/pcm_plugin.c index 7ed6f25a2eea..ff254eba9988 100644 --- a/src/pcm/pcm_plugin.c +++ b/src/pcm/pcm_plugin.c @@ -146,15 +146,14 @@ static int snd_pcm_plugin_delay(snd_pcm_t *pcm, snd_pcm_sframes_t *delayp) return 0; } -static int snd_pcm_plugin_prepare(snd_pcm_t *pcm) +static int snd_pcm_plugin_call_init_cb(snd_pcm_t *pcm, snd_pcm_plugin_t *plugin) { - snd_pcm_plugin_t *plugin = pcm->private_data; + snd_pcm_t *slave = plugin->gen.slave; int err; - err = snd_pcm_prepare(plugin->gen.slave); - if (err < 0) - return err; - *pcm->hw.ptr = 0; - *pcm->appl.ptr = 0; + + assert(pcm->boundary == slave->boundary); + *pcm->hw.ptr = *slave->hw.ptr; + *pcm->appl.ptr = *slave->appl.ptr; if (plugin->init) { err = plugin->init(pcm); if (err < 0) @@ -163,6 +162,16 @@ static int snd_pcm_plugin_prepare(snd_pcm_t *pcm) return 0; } +static int snd_pcm_plugin_prepare(snd_pcm_t *pcm) +{ + snd_pcm_plugin_t *plugin = pcm->private_data; + int err; + err = snd_pcm_prepare(plugin->gen.slave); + if (err < 0) + return err; + return snd_pcm_plugin_call_init_cb(pcm, plugin); +} + static int snd_pcm_plugin_reset(snd_pcm_t *pcm) { snd_pcm_plugin_t *plugin = pcm->private_data; @@ -170,14 +179,7 @@ static int snd_pcm_plugin_reset(snd_pcm_t *pcm) err = snd_pcm_reset(plugin->gen.slave); if (err < 0) return err; - *pcm->hw.ptr = 0; - *pcm->appl.ptr = 0; - if (plugin->init) { - err = plugin->init(pcm); - if (err < 0) - return err; - } - return 0; + return snd_pcm_plugin_call_init_cb(pcm, plugin); } static snd_pcm_sframes_t snd_pcm_plugin_rewindable(snd_pcm_t *pcm) -- 2.26.2 ++++++ 0043-pcm-dmix-dshare-delay-calculation-fixes-and-cleanups.patch ++++++ >From 0de72e63d7bd180566c71f6fb01d7719525ee326 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela <pe...@perex.cz> Date: Tue, 19 Jan 2021 11:17:00 +0100 Subject: [PATCH 43/44] pcm: dmix/dshare - delay calculation fixes and cleanups Unfortunately, we cannot use status->avail from slave, because this value does not wrap to the buffer size and it may even overflow slave boundary (endless run). We can use only hw_ptr from slave. Signed-off-by: Jaroslav Kysela <pe...@perex.cz> --- src/pcm/pcm_dmix.c | 5 ++--- src/pcm/pcm_dshare.c | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/pcm/pcm_dmix.c b/src/pcm/pcm_dmix.c index 5b7472d90c58..be2675aff0f3 100644 --- a/src/pcm/pcm_dmix.c +++ b/src/pcm/pcm_dmix.c @@ -488,8 +488,7 @@ static int snd_pcm_dmix_status(snd_pcm_t *pcm, snd_pcm_status_t * status) case SNDRV_PCM_STATE_DRAINING: case SNDRV_PCM_STATE_RUNNING: snd_pcm_dmix_sync_ptr0(pcm, status->hw_ptr); - status->delay += snd_pcm_mmap_playback_delay(pcm) - + status->avail - dmix->spcm->buffer_size; + status->delay = snd_pcm_mmap_playback_delay(pcm); break; default: break; @@ -518,7 +517,7 @@ static int snd_pcm_dmix_delay(snd_pcm_t *pcm, snd_pcm_sframes_t *delayp) case SNDRV_PCM_STATE_PREPARED: case SNDRV_PCM_STATE_SUSPENDED: case STATE_RUN_PENDING: - *delayp = snd_pcm_mmap_playback_hw_avail(pcm); + *delayp = snd_pcm_mmap_playback_delay(pcm); return 0; case SNDRV_PCM_STATE_XRUN: return -EPIPE; diff --git a/src/pcm/pcm_dshare.c b/src/pcm/pcm_dshare.c index 8a6725729bc7..10243013714d 100644 --- a/src/pcm/pcm_dshare.c +++ b/src/pcm/pcm_dshare.c @@ -237,8 +237,7 @@ static int snd_pcm_dshare_status(snd_pcm_t *pcm, snd_pcm_status_t * status) case SNDRV_PCM_STATE_DRAINING: case SNDRV_PCM_STATE_RUNNING: snd_pcm_dshare_sync_ptr0(pcm, status->hw_ptr); - status->delay += snd_pcm_mmap_playback_delay(pcm) - + status->avail - dshare->spcm->buffer_size; + status->delay += snd_pcm_mmap_playback_delay(pcm); break; default: break; @@ -290,7 +289,7 @@ static int snd_pcm_dshare_delay(snd_pcm_t *pcm, snd_pcm_sframes_t *delayp) case SNDRV_PCM_STATE_PREPARED: case SNDRV_PCM_STATE_SUSPENDED: case STATE_RUN_PENDING: - *delayp = snd_pcm_mmap_playback_hw_avail(pcm); + *delayp = snd_pcm_mmap_playback_delay(pcm); return 0; case SNDRV_PCM_STATE_XRUN: return -EPIPE; -- 2.26.2 ++++++ 0044-topology-fix-parse_tuple_set-remove-dead-condition-c.patch ++++++ >From ae7362c996e0b991c399cc26c6d0b3c8e295e83c Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela <pe...@perex.cz> Date: Wed, 20 Jan 2021 16:58:33 +0100 Subject: [PATCH 44/44] topology: fix 'parse_tuple_set() - remove dead condition code' The whole SND_SOC_TPLG_TUPLE_TYPE_WORD condition part must be commented out, otherwise the condition is always true. Fixes: 51e1d486ce ("topology: parse_tuple_set() - remove dead condition code") BugLink: https://github.com/alsa-project/alsa-lib/issues/114 Signed-off-by: Jaroslav Kysela <pe...@perex.cz> --- src/topology/data.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/topology/data.c b/src/topology/data.c index 5633cdc34dd9..0546d63e478c 100644 --- a/src/topology/data.c +++ b/src/topology/data.c @@ -859,11 +859,11 @@ static int parse_tuple_set(snd_config_t *cfg, goto err; } - if ((type == SND_SOC_TPLG_TUPLE_TYPE_WORD - /* && tuple_val > UINT_MAX */) - || (type == SND_SOC_TPLG_TUPLE_TYPE_SHORT - && tuple_val > USHRT_MAX) - || (type == SND_SOC_TPLG_TUPLE_TYPE_BYTE + if (/* (type == SND_SOC_TPLG_TUPLE_TYPE_WORD + && tuple_val > UINT_MAX) || */ + (type == SND_SOC_TPLG_TUPLE_TYPE_SHORT + && tuple_val > USHRT_MAX) || + (type == SND_SOC_TPLG_TUPLE_TYPE_BYTE && tuple_val > UCHAR_MAX)) { SNDERR("tuple %s: invalid value", id); goto err; -- 2.26.2 ++++++ 0045-pcm-direct-Fix-the-missing-appl_ptr-update.patch ++++++ >From 8e15c712ed96ea8d1314e94b15a946916394b17b Mon Sep 17 00:00:00 2001 From: Takashi Iwai <ti...@suse.de> Date: Fri, 22 Jan 2021 15:37:08 +0100 Subject: [PATCH 45/48] pcm: direct: Fix the missing appl_ptr update A snd_pcm_status() call for the direct plugins receives the status from the slave PCM, but this doesn't contain a valid appl_ptr, since the slave PCM for the direct plugins is in a free-wheel mode, hence the appl_ptr is always zero. This result in the inconsistent status->appl_ptr and pcm->appl.ptr, hitting the recently introduced assert() call. Fix it by transferring the plugin's appl_ptr to the upper caller. BugLink: https://bugzilla.opensuse.org/show_bug.cgi?id=1181194 Signed-off-by: Takashi Iwai <ti...@suse.de> --- src/pcm/pcm_dmix.c | 1 + src/pcm/pcm_dshare.c | 1 + src/pcm/pcm_dsnoop.c | 1 + 3 files changed, 3 insertions(+) diff --git a/src/pcm/pcm_dmix.c b/src/pcm/pcm_dmix.c index be2675aff0f3..d8495065d5d7 100644 --- a/src/pcm/pcm_dmix.c +++ b/src/pcm/pcm_dmix.c @@ -495,6 +495,7 @@ static int snd_pcm_dmix_status(snd_pcm_t *pcm, snd_pcm_status_t * status) } status->state = snd_pcm_dmix_state(pcm); + status->appl_ptr = *pcm->appl.ptr; /* slave PCM doesn't set appl_ptr */ status->trigger_tstamp = dmix->trigger_tstamp; status->avail = snd_pcm_mmap_playback_avail(pcm); status->avail_max = status->avail > dmix->avail_max ? status->avail : dmix->avail_max; diff --git a/src/pcm/pcm_dshare.c b/src/pcm/pcm_dshare.c index 10243013714d..dccb137be253 100644 --- a/src/pcm/pcm_dshare.c +++ b/src/pcm/pcm_dshare.c @@ -243,6 +243,7 @@ static int snd_pcm_dshare_status(snd_pcm_t *pcm, snd_pcm_status_t * status) break; } status->state = snd_pcm_dshare_state(pcm); + status->appl_ptr = *pcm->appl.ptr; /* slave PCM doesn't set appl_ptr */ status->trigger_tstamp = dshare->trigger_tstamp; status->avail = snd_pcm_mmap_playback_avail(pcm); status->avail_max = status->avail > dshare->avail_max ? status->avail : dshare->avail_max; diff --git a/src/pcm/pcm_dsnoop.c b/src/pcm/pcm_dsnoop.c index c6e8cd279b53..695bf4aa340e 100644 --- a/src/pcm/pcm_dsnoop.c +++ b/src/pcm/pcm_dsnoop.c @@ -193,6 +193,7 @@ static int snd_pcm_dsnoop_status(snd_pcm_t *pcm, snd_pcm_status_t * status) snd_pcm_status(dsnoop->spcm, status); state = snd_pcm_state(dsnoop->spcm); status->state = state == SND_PCM_STATE_RUNNING ? dsnoop->state : state; + status->appl_ptr = *pcm->appl.ptr; /* slave PCM doesn't set appl_ptr */ status->trigger_tstamp = dsnoop->trigger_tstamp; status->avail = snd_pcm_mmap_capture_avail(pcm); status->avail_max = status->avail > dsnoop->avail_max ? status->avail : dsnoop->avail_max; -- 2.26.2 ++++++ 0046-pcm-ioplug-Pass-appl_ptr-and-hw_ptr-in-snd_pcm_statu.patch ++++++ >From 2c57c2c959941de50a4492f151cfd9973c46d41e Mon Sep 17 00:00:00 2001 From: Takashi Iwai <ti...@suse.de> Date: Fri, 22 Jan 2021 15:41:15 +0100 Subject: [PATCH 46/48] pcm: ioplug: Pass appl_ptr and hw_ptr in snd_pcm_status() The snd_pcm_status() of the ioplug doesn't return the current positions of hw_ptr and appl_ptr as advertised. Fix it by copying the current values stored in the plugin data. Signed-off-by: Takashi Iwai <ti...@suse.de> --- src/pcm/pcm_ioplug.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pcm/pcm_ioplug.c b/src/pcm/pcm_ioplug.c index e141b1f98da7..a1463bf6b50a 100644 --- a/src/pcm/pcm_ioplug.c +++ b/src/pcm/pcm_ioplug.c @@ -133,6 +133,8 @@ static int snd_pcm_ioplug_status(snd_pcm_t *pcm, snd_pcm_status_t * status) gettimestamp(&status->tstamp, pcm->tstamp_type); status->avail = snd_pcm_mmap_avail(pcm); status->avail_max = io->avail_max; + status->appl_ptr = *pcm->appl.ptr; + status->hw_ptr = *pcm->hw.ptr; if (snd_pcm_ioplug_delay(pcm, &sd) < 0) sd = snd_pcm_mmap_delay(pcm); status->delay = sd; -- 2.26.2 ++++++ 0047-pcm-null-Pass-appl_ptr-and-hw_ptr-in-snd_pcm_status.patch ++++++ >From 440c42ec5c90e3e345dd72c6c1d604a30b6a8e94 Mon Sep 17 00:00:00 2001 From: Takashi Iwai <ti...@suse.de> Date: Fri, 22 Jan 2021 15:42:38 +0100 Subject: [PATCH 47/48] pcm: null: Pass appl_ptr and hw_ptr in snd_pcm_status() Just like the previous fix for ioplug, the null plugin also misses the appl_ptr and hw_ptr updates for snd_pcm_status(). Fix it as well. Signed-off-by: Takashi Iwai <ti...@suse.de> --- src/pcm/pcm_null.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pcm/pcm_null.c b/src/pcm/pcm_null.c index 1d81548569f0..c8ea9b38785f 100644 --- a/src/pcm/pcm_null.c +++ b/src/pcm/pcm_null.c @@ -96,6 +96,8 @@ static int snd_pcm_null_status(snd_pcm_t *pcm, snd_pcm_status_t * status) memset(status, 0, sizeof(*status)); status->state = null->state; status->trigger_tstamp = null->trigger_tstamp; + status->appl_ptr = *pcm->appl.ptr; + status->hw_ptr = *pcm->hw.ptr; gettimestamp(&status->tstamp, pcm->tstamp_type); status->avail = snd_pcm_null_avail_update(pcm); status->avail_max = pcm->buffer_size; -- 2.26.2 ++++++ 0048-pcm-share-Pass-appl_ptr-and-hw_ptr-in-snd_pcm_status.patch ++++++ >From 1705e7c0aba0a9e010e55c8e76851fe57e1e3c70 Mon Sep 17 00:00:00 2001 From: Takashi Iwai <ti...@suse.de> Date: Fri, 22 Jan 2021 15:43:28 +0100 Subject: [PATCH 48/48] pcm: share: Pass appl_ptr and hw_ptr in snd_pcm_status() This one also has the same problem as others; the appl_ptr and hw_ptr of share plugin aren't updated in snd_pcm_status() call. Fix it. Signed-off-by: Takashi Iwai <ti...@suse.de> --- src/pcm/pcm_share.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pcm/pcm_share.c b/src/pcm/pcm_share.c index bff9507d6422..72509491b366 100644 --- a/src/pcm/pcm_share.c +++ b/src/pcm/pcm_share.c @@ -711,6 +711,8 @@ static int snd_pcm_share_status(snd_pcm_t *pcm, snd_pcm_status_t *status) _notrunning: status->delay = sd + d; status->state = share->state; + status->appl_ptr = *pcm->appl.ptr; + status->hw_ptr = *pcm->hw.ptr; status->trigger_tstamp = share->trigger_tstamp; _end: Pthread_mutex_unlock(&slave->mutex); -- 2.26.2