CC: [email protected] BCC: [email protected] TO: "Pierre-Louis Bossart" <[email protected]>
tree: https://github.com/plbossart/sound fix/hda-dai-suspend-rebase head: 596c69339cbe8dcca6d0631e06ceb711373ea25a commit: 596c69339cbe8dcca6d0631e06ceb711373ea25a [17/17] ASoC: soc-pcm: improve BE transition for TRIGGER_START :::::: branch date: 2 days ago :::::: commit date: 2 days ago config: x86_64-randconfig-c007 (https://download.01.org/0day-ci/archive/20220327/[email protected]/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 0f6d9501cf49ce02937099350d08f20c4af86f3d) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/plbossart/sound/commit/596c69339cbe8dcca6d0631e06ceb711373ea25a git remote add plbossart-sound https://github.com/plbossart/sound git fetch --no-tags plbossart-sound fix/hda-dai-suspend-rebase git checkout 596c69339cbe8dcca6d0631e06ceb711373ea25a # save the config file to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 clang-analyzer If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> clang-analyzer warnings: (new ones prefixed by >>) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/lockdep.h:316:2: note: expanded from macro 'lockdep_assert_held' lockdep_assert(lockdep_is_held(l) != LOCK_STATE_NOT_HELD) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/lockdep.h:310:15: note: expanded from macro 'lockdep_assert' do { WARN_ON(debug_locks && !(cond)); } while (0) ^~~~~~~~~~~ include/asm-generic/bug.h:121:25: note: expanded from macro 'WARN_ON' int __ret_warn_on = !!(condition); \ ^~~~~~~~~ sound/soc/soc-pcm.c:1273:2: note: Left side of '&&' is false snd_soc_dpcm_mutex_assert_held(fe); ^ sound/soc/soc-pcm.c:41:2: note: expanded from macro 'snd_soc_dpcm_mutex_assert_held' lockdep_assert_held(&(rtd)->card->pcm_mutex) ^ include/linux/lockdep.h:316:2: note: expanded from macro 'lockdep_assert_held' lockdep_assert(lockdep_is_held(l) != LOCK_STATE_NOT_HELD) ^ include/linux/lockdep.h:310:27: note: expanded from macro 'lockdep_assert' do { WARN_ON(debug_locks && !(cond)); } while (0) ^ sound/soc/soc-pcm.c:1273:2: note: Taking false branch snd_soc_dpcm_mutex_assert_held(fe); ^ sound/soc/soc-pcm.c:41:2: note: expanded from macro 'snd_soc_dpcm_mutex_assert_held' lockdep_assert_held(&(rtd)->card->pcm_mutex) ^ include/linux/lockdep.h:316:2: note: expanded from macro 'lockdep_assert_held' lockdep_assert(lockdep_is_held(l) != LOCK_STATE_NOT_HELD) ^ include/linux/lockdep.h:310:7: note: expanded from macro 'lockdep_assert' do { WARN_ON(debug_locks && !(cond)); } while (0) ^ include/asm-generic/bug.h:122:2: note: expanded from macro 'WARN_ON' if (unlikely(__ret_warn_on)) \ ^ sound/soc/soc-pcm.c:1273:2: note: Loop condition is false. Exiting loop snd_soc_dpcm_mutex_assert_held(fe); ^ sound/soc/soc-pcm.c:41:2: note: expanded from macro 'snd_soc_dpcm_mutex_assert_held' lockdep_assert_held(&(rtd)->card->pcm_mutex) ^ include/linux/lockdep.h:316:2: note: expanded from macro 'lockdep_assert_held' lockdep_assert(lockdep_is_held(l) != LOCK_STATE_NOT_HELD) ^ include/linux/lockdep.h:310:2: note: expanded from macro 'lockdep_assert' do { WARN_ON(debug_locks && !(cond)); } while (0) ^ sound/soc/soc-pcm.c:1276:2: note: Loop condition is true. Entering loop body for_each_dpcm_be_safe(fe, stream, dpcm, d) { ^ include/sound/soc-dpcm.h:116:2: note: expanded from macro 'for_each_dpcm_be_safe' list_for_each_entry_safe(_dpcm, __dpcm, &(fe)->dpcm[stream].be_clients, list_be) ^ include/linux/list.h:725:2: note: expanded from macro 'list_for_each_entry_safe' for (pos = list_first_entry(head, typeof(*pos), member), \ ^ sound/soc/soc-pcm.c:1277:3: note: Taking false branch dev_dbg(fe->dev, "ASoC: BE %s disconnect check for %s\n", ^ include/linux/dev_printk.h:162:2: note: expanded from macro 'dev_dbg' if (0) \ ^ sound/soc/soc-pcm.c:1281:7: note: Assuming field 'state' is equal to SND_SOC_DPCM_LINK_STATE_FREE if (dpcm->state != SND_SOC_DPCM_LINK_STATE_FREE) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sound/soc/soc-pcm.c:1281:3: note: Taking false branch if (dpcm->state != SND_SOC_DPCM_LINK_STATE_FREE) ^ sound/soc/soc-pcm.c:1284:3: note: Taking false branch dev_dbg(fe->dev, "freed DSP %s path %s %s %s\n", ^ include/linux/dev_printk.h:162:2: note: expanded from macro 'dev_dbg' if (0) \ ^ sound/soc/soc-pcm.c:1276:2: note: Loop condition is false. Execution continues on line 1294 for_each_dpcm_be_safe(fe, stream, dpcm, d) { ^ include/sound/soc-dpcm.h:116:2: note: expanded from macro 'for_each_dpcm_be_safe' list_for_each_entry_safe(_dpcm, __dpcm, &(fe)->dpcm[stream].be_clients, list_be) ^ include/linux/list.h:725:2: note: expanded from macro 'list_for_each_entry_safe' for (pos = list_first_entry(head, typeof(*pos), member), \ ^ sound/soc/soc-pcm.c:1296:2: note: Loop condition is true. Entering loop body while (!list_empty(&deleted_dpcms)) { ^ sound/soc/soc-pcm.c:1301:3: note: Memory is released kfree(dpcm); ^~~~~~~~~~~ sound/soc/soc-pcm.c:1296:2: note: Loop condition is true. Entering loop body while (!list_empty(&deleted_dpcms)) { ^ sound/soc/soc-pcm.c:1299:3: note: Calling 'list_del' list_del(&dpcm->list_fe); ^~~~~~~~~~~~~~~~~~~~~~~~ include/linux/list.h:149:14: note: Use of memory after it is freed entry->next = LIST_POISON1; ~~~~~~~~~~~ ^ >> sound/soc/soc-pcm.c:2126:5: warning: Value stored to 'ret' is never read >> [clang-analyzer-deadcode.DeadStores] ret = soc_pcm_trigger(be_substream, ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sound/soc/soc-pcm.c:2126:5: note: Value stored to 'ret' is never read ret = soc_pcm_trigger(be_substream, ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sound/soc/soc-pcm.c:2129:5: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores] ret = soc_pcm_trigger(be_substream, ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sound/soc/soc-pcm.c:2129:5: note: Value stored to 'ret' is never read ret = soc_pcm_trigger(be_substream, ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 10 warnings generated. net/sched/sch_fq.c:321:28: warning: Dereference of null pointer [clang-analyzer-core.NullDereference] f->socket_hash != sk->sk_hash)) { ^ net/sched/sch_fq.c:448:15: note: Assuming field 'qlen' is < field 'limit' if (unlikely(sch->q.qlen >= sch->limit)) ^ include/linux/compiler.h:78:42: note: expanded from macro 'unlikely' # define unlikely(x) __builtin_expect(!!(x), 0) ^ net/sched/sch_fq.c:448:2: note: Taking false branch if (unlikely(sch->q.qlen >= sch->limit)) ^ net/sched/sch_fq.c:451:6: note: Assuming field 'tstamp' is 0 if (!skb->tstamp) { ^~~~~~~~~~~~ net/sched/sch_fq.c:451:2: note: Taking true branch if (!skb->tstamp) { ^ net/sched/sch_fq.c:473:6: note: Calling 'fq_classify' f = fq_classify(skb, q); ^~~~~~~~~~~~~~~~~~~ net/sched/sch_fq.c:269:15: note: Assuming the condition is false if (unlikely((skb->priority & TC_PRIO_MAX) == TC_PRIO_CONTROL)) ^ include/linux/compiler.h:78:42: note: expanded from macro 'unlikely' # define unlikely(x) __builtin_expect(!!(x), 0) ^ net/sched/sch_fq.c:269:2: note: Taking false branch if (unlikely((skb->priority & TC_PRIO_MAX) == TC_PRIO_CONTROL)) ^ net/sched/sch_fq.c:281:6: note: Assuming 'sk' is null if (!sk || sk_listener(sk)) { ^~~ net/sched/sch_fq.c:281:10: note: Left side of '||' is true if (!sk || sk_listener(sk)) { ^ net/sched/sch_fq.c:287:3: note: Value assigned to 'sk' sk = (struct sock *)((hash << 1) | 1UL); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ net/sched/sch_fq.c:304:6: note: Assuming the condition is false if (q->flows >= (2U << q->fq_trees_log) && ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ net/sched/sch_fq.c:304:42: note: Left side of '&&' is false if (q->flows >= (2U << q->fq_trees_log) && ^ net/sched/sch_fq.c:310:2: note: Loop condition is true. Entering loop body while (*p) { ^ net/sched/sch_fq.c:314:7: note: Assuming 'sk' is equal to field 'sk' if (f->sk == sk) { ^~~~~~~~~~~ net/sched/sch_fq.c:314:3: note: Taking true branch if (f->sk == sk) { ^ net/sched/sch_fq.c:320:17: note: Assuming 'sk' is equal to field 'sk' if (unlikely(skb->sk == sk && ^ include/linux/compiler.h:78:42: note: expanded from macro 'unlikely' # define unlikely(x) __builtin_expect(!!(x), 0) ^ net/sched/sch_fq.c:320:17: note: Left side of '&&' is true if (unlikely(skb->sk == sk && ^ net/sched/sch_fq.c:321:28: note: Dereference of null pointer f->socket_hash != sk->sk_hash)) { ^ include/linux/compiler.h:78:42: note: expanded from macro 'unlikely' # define unlikely(x) __builtin_expect(!!(x), 0) ^ net/sched/sch_fq.c:349:20: warning: Dereference of null pointer [clang-analyzer-core.NullDereference] f->socket_hash = sk->sk_hash; ^ net/sched/sch_fq.c:448:15: note: Assuming field 'qlen' is < field 'limit' if (unlikely(sch->q.qlen >= sch->limit)) ^ include/linux/compiler.h:78:42: note: expanded from macro 'unlikely' # define unlikely(x) __builtin_expect(!!(x), 0) ^ net/sched/sch_fq.c:448:2: note: Taking false branch if (unlikely(sch->q.qlen >= sch->limit)) ^ net/sched/sch_fq.c:451:6: note: Assuming field 'tstamp' is 0 if (!skb->tstamp) { ^~~~~~~~~~~~ net/sched/sch_fq.c:451:2: note: Taking true branch if (!skb->tstamp) { vim +/ret +2126 sound/soc/soc-pcm.c 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2088 23607025303af6 Liam Girdwood 2014-01-17 2089 int dpcm_be_dai_trigger(struct snd_soc_pcm_runtime *fe, int stream, 45c0a188ca59e7 Mark Brown 2012-05-09 2090 int cmd) 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2091 { db3aa39c910684 Kuninori Morimoto 2021-03-15 2092 struct snd_soc_pcm_runtime *be; 5b3ffa2283999b Pierre-Louis Bossart 2022-03-21 2093 bool pause_stop_transition; 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2094 struct snd_soc_dpcm *dpcm; b2ae80663008a7 Takashi Iwai 2021-12-07 2095 unsigned long flags; 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2096 int ret = 0; 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2097 8d6258a4dd2678 Kuninori Morimoto 2018-09-18 2098 for_each_dpcm_be(fe, stream, dpcm) { db3aa39c910684 Kuninori Morimoto 2021-03-15 2099 struct snd_pcm_substream *be_substream; 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2100 db3aa39c910684 Kuninori Morimoto 2021-03-15 2101 be = dpcm->be; db3aa39c910684 Kuninori Morimoto 2021-03-15 2102 be_substream = snd_soc_dpcm_get_substream(be, stream); 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2103 3c75c0ea5da749 Takashi Iwai 2022-01-19 2104 snd_soc_dpcm_stream_lock_irqsave_nested(be, stream, flags); b2ae80663008a7 Takashi Iwai 2021-12-07 2105 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2106 /* is this op for this BE ? */ 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2107 if (!snd_soc_dpcm_be_can_update(fe, be, stream)) b2ae80663008a7 Takashi Iwai 2021-12-07 2108 goto next; 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2109 a9faca15a644ff Kuninori Morimoto 2020-12-01 2110 dev_dbg(be->dev, "ASoC: trigger BE %s cmd %d\n", a9faca15a644ff Kuninori Morimoto 2020-12-01 2111 be->dai_link->name, cmd); a9faca15a644ff Kuninori Morimoto 2020-12-01 2112 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2113 switch (cmd) { 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2114 case SNDRV_PCM_TRIGGER_START: 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2115 if (!be->dpcm[stream].be_start && 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2116 (be->dpcm[stream].state != SND_SOC_DPCM_STATE_PREPARE) && 21fca8bdbb64df 이경택 2020-04-01 2117 (be->dpcm[stream].state != SND_SOC_DPCM_STATE_STOP) && 3202e2f5fac003 Mark Brown 2021-08-30 2118 (be->dpcm[stream].state != SND_SOC_DPCM_STATE_PAUSED)) b2ae80663008a7 Takashi Iwai 2021-12-07 2119 goto next; 6479f7588651cb Pierre-Louis Bossart 2021-08-17 2120 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2121 be->dpcm[stream].be_start++; 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2122 if (be->dpcm[stream].be_start != 1) 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2123 goto next; 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2124 596c69339cbe8d Pierre-Louis Bossart 2022-03-22 2125 if (be->dpcm[stream].state == SND_SOC_DPCM_STATE_PAUSED) 596c69339cbe8d Pierre-Louis Bossart 2022-03-22 @2126 ret = soc_pcm_trigger(be_substream, 596c69339cbe8d Pierre-Louis Bossart 2022-03-22 2127 SNDRV_PCM_TRIGGER_PAUSE_RELEASE); 596c69339cbe8d Pierre-Louis Bossart 2022-03-22 2128 else 596c69339cbe8d Pierre-Louis Bossart 2022-03-22 2129 ret = soc_pcm_trigger(be_substream, 596c69339cbe8d Pierre-Louis Bossart 2022-03-22 2130 SNDRV_PCM_TRIGGER_START); 596c69339cbe8d Pierre-Louis Bossart 2022-03-22 2131 a9faca15a644ff Kuninori Morimoto 2020-12-01 2132 ret = soc_pcm_trigger(be_substream, cmd); 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2133 if (ret) { 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2134 be->dpcm[stream].be_start--; b2ae80663008a7 Takashi Iwai 2021-12-07 2135 goto next; 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2136 } 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2137 3202e2f5fac003 Mark Brown 2021-08-30 2138 be->dpcm[stream].state = SND_SOC_DPCM_STATE_START; 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2139 break; 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2140 case SNDRV_PCM_TRIGGER_RESUME: 3202e2f5fac003 Mark Brown 2021-08-30 2141 if ((be->dpcm[stream].state != SND_SOC_DPCM_STATE_SUSPEND)) b2ae80663008a7 Takashi Iwai 2021-12-07 2142 goto next; 6479f7588651cb Pierre-Louis Bossart 2021-08-17 2143 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2144 be->dpcm[stream].be_start++; 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2145 if (be->dpcm[stream].be_start != 1) 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2146 goto next; 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2147 a9faca15a644ff Kuninori Morimoto 2020-12-01 2148 ret = soc_pcm_trigger(be_substream, cmd); 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2149 if (ret) { 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2150 be->dpcm[stream].be_start--; b2ae80663008a7 Takashi Iwai 2021-12-07 2151 goto next; 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2152 } 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2153 3202e2f5fac003 Mark Brown 2021-08-30 2154 be->dpcm[stream].state = SND_SOC_DPCM_STATE_START; 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2155 break; 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2156 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: 3aa1e96a2b95e2 Pierre-Louis Bossart 2021-12-07 2157 if (!be->dpcm[stream].be_start && 3aa1e96a2b95e2 Pierre-Louis Bossart 2021-12-07 2158 (be->dpcm[stream].state != SND_SOC_DPCM_STATE_START) && 3aa1e96a2b95e2 Pierre-Louis Bossart 2021-12-07 2159 (be->dpcm[stream].state != SND_SOC_DPCM_STATE_PAUSED)) b2ae80663008a7 Takashi Iwai 2021-12-07 2160 goto next; 6479f7588651cb Pierre-Louis Bossart 2021-08-17 2161 5b3ffa2283999b Pierre-Louis Bossart 2022-03-21 2162 fe->dpcm[stream].fe_pause = false; 5b3ffa2283999b Pierre-Louis Bossart 2022-03-21 2163 be->dpcm[stream].be_pause--; 5b3ffa2283999b Pierre-Louis Bossart 2022-03-21 2164 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2165 be->dpcm[stream].be_start++; 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2166 if (be->dpcm[stream].be_start != 1) 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2167 goto next; 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2168 a9faca15a644ff Kuninori Morimoto 2020-12-01 2169 ret = soc_pcm_trigger(be_substream, cmd); 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2170 if (ret) { 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2171 be->dpcm[stream].be_start--; b2ae80663008a7 Takashi Iwai 2021-12-07 2172 goto next; 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2173 } 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2174 3202e2f5fac003 Mark Brown 2021-08-30 2175 be->dpcm[stream].state = SND_SOC_DPCM_STATE_START; 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2176 break; 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2177 case SNDRV_PCM_TRIGGER_STOP: 21fca8bdbb64df 이경택 2020-04-01 2178 if ((be->dpcm[stream].state != SND_SOC_DPCM_STATE_START) && 3202e2f5fac003 Mark Brown 2021-08-30 2179 (be->dpcm[stream].state != SND_SOC_DPCM_STATE_PAUSED)) b2ae80663008a7 Takashi Iwai 2021-12-07 2180 goto next; 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2181 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2182 if (be->dpcm[stream].state == SND_SOC_DPCM_STATE_START) 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2183 be->dpcm[stream].be_start--; 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2184 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2185 if (be->dpcm[stream].be_start != 0) b2ae80663008a7 Takashi Iwai 2021-12-07 2186 goto next; 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2187 5b3ffa2283999b Pierre-Louis Bossart 2022-03-21 2188 pause_stop_transition = false; 5b3ffa2283999b Pierre-Louis Bossart 2022-03-21 2189 if (fe->dpcm[stream].fe_pause) { 5b3ffa2283999b Pierre-Louis Bossart 2022-03-21 2190 pause_stop_transition = true; 5b3ffa2283999b Pierre-Louis Bossart 2022-03-21 2191 fe->dpcm[stream].fe_pause = false; 5b3ffa2283999b Pierre-Louis Bossart 2022-03-21 2192 be->dpcm[stream].be_pause--; 5b3ffa2283999b Pierre-Louis Bossart 2022-03-21 2193 } 5b3ffa2283999b Pierre-Louis Bossart 2022-03-21 2194 5b3ffa2283999b Pierre-Louis Bossart 2022-03-21 2195 if (be->dpcm[stream].be_pause != 0) 5b3ffa2283999b Pierre-Louis Bossart 2022-03-21 2196 ret = soc_pcm_trigger(be_substream, SNDRV_PCM_TRIGGER_PAUSE_PUSH); 5b3ffa2283999b Pierre-Louis Bossart 2022-03-21 2197 else 5b3ffa2283999b Pierre-Louis Bossart 2022-03-21 2198 ret = soc_pcm_trigger(be_substream, SNDRV_PCM_TRIGGER_STOP); 5b3ffa2283999b Pierre-Louis Bossart 2022-03-21 2199 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2200 if (ret) { 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2201 if (be->dpcm[stream].state == SND_SOC_DPCM_STATE_START) 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2202 be->dpcm[stream].be_start++; 5b3ffa2283999b Pierre-Louis Bossart 2022-03-21 2203 if (pause_stop_transition) { 5b3ffa2283999b Pierre-Louis Bossart 2022-03-21 2204 fe->dpcm[stream].fe_pause = true; 5b3ffa2283999b Pierre-Louis Bossart 2022-03-21 2205 be->dpcm[stream].be_pause++; 5b3ffa2283999b Pierre-Louis Bossart 2022-03-21 2206 } b2ae80663008a7 Takashi Iwai 2021-12-07 2207 goto next; 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2208 } 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2209 5b3ffa2283999b Pierre-Louis Bossart 2022-03-21 2210 if (be->dpcm[stream].be_pause != 0) 5b3ffa2283999b Pierre-Louis Bossart 2022-03-21 2211 be->dpcm[stream].state = SND_SOC_DPCM_STATE_PAUSED; 5b3ffa2283999b Pierre-Louis Bossart 2022-03-21 2212 else 3202e2f5fac003 Mark Brown 2021-08-30 2213 be->dpcm[stream].state = SND_SOC_DPCM_STATE_STOP; 5b3ffa2283999b Pierre-Louis Bossart 2022-03-21 2214 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2215 break; 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2216 case SNDRV_PCM_TRIGGER_SUSPEND: 3202e2f5fac003 Mark Brown 2021-08-30 2217 if (be->dpcm[stream].state != SND_SOC_DPCM_STATE_START) b2ae80663008a7 Takashi Iwai 2021-12-07 2218 goto next; 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2219 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2220 be->dpcm[stream].be_start--; 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2221 if (be->dpcm[stream].be_start != 0) b2ae80663008a7 Takashi Iwai 2021-12-07 2222 goto next; 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2223 a9faca15a644ff Kuninori Morimoto 2020-12-01 2224 ret = soc_pcm_trigger(be_substream, cmd); 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2225 if (ret) { 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2226 be->dpcm[stream].be_start++; b2ae80663008a7 Takashi Iwai 2021-12-07 2227 goto next; 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2228 } 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2229 3202e2f5fac003 Mark Brown 2021-08-30 2230 be->dpcm[stream].state = SND_SOC_DPCM_STATE_SUSPEND; 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2231 break; 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2232 case SNDRV_PCM_TRIGGER_PAUSE_PUSH: 3202e2f5fac003 Mark Brown 2021-08-30 2233 if (be->dpcm[stream].state != SND_SOC_DPCM_STATE_START) b2ae80663008a7 Takashi Iwai 2021-12-07 2234 goto next; 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2235 5b3ffa2283999b Pierre-Louis Bossart 2022-03-21 2236 fe->dpcm[stream].fe_pause = true; 5b3ffa2283999b Pierre-Louis Bossart 2022-03-21 2237 be->dpcm[stream].be_pause++; 5b3ffa2283999b Pierre-Louis Bossart 2022-03-21 2238 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2239 be->dpcm[stream].be_start--; 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2240 if (be->dpcm[stream].be_start != 0) b2ae80663008a7 Takashi Iwai 2021-12-07 2241 goto next; 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2242 a9faca15a644ff Kuninori Morimoto 2020-12-01 2243 ret = soc_pcm_trigger(be_substream, cmd); 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2244 if (ret) { 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2245 be->dpcm[stream].be_start++; b2ae80663008a7 Takashi Iwai 2021-12-07 2246 goto next; 848aedfdc6ba25 Pierre-Louis Bossart 2021-12-07 2247 } 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2248 3202e2f5fac003 Mark Brown 2021-08-30 2249 be->dpcm[stream].state = SND_SOC_DPCM_STATE_PAUSED; 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2250 break; 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2251 } b2ae80663008a7 Takashi Iwai 2021-12-07 2252 next: b2ae80663008a7 Takashi Iwai 2021-12-07 2253 snd_soc_dpcm_stream_unlock_irqrestore(be, stream, flags); b2ae80663008a7 Takashi Iwai 2021-12-07 2254 if (ret) b2ae80663008a7 Takashi Iwai 2021-12-07 2255 break; 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2256 } db3aa39c910684 Kuninori Morimoto 2021-03-15 2257 if (ret < 0) db3aa39c910684 Kuninori Morimoto 2021-03-15 2258 dev_err(fe->dev, "ASoC: %s() failed at %s (%d)\n", db3aa39c910684 Kuninori Morimoto 2021-03-15 2259 __func__, be->dai_link->name, ret); 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2260 return ret; 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2261 } 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2262 EXPORT_SYMBOL_GPL(dpcm_be_dai_trigger); 01d7584cd2e5a9 Liam Girdwood 2012-04-25 2263 -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
