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

Reply via email to