[alsa-devel] [sound:topic/misc-core-fixes 16/17] sound/core/timer.c:348 snd_timer_open() warn: inconsistent returns 'mutex:®ister_mutex'.
Dan Carpenter
dan.carpenter at oracle.com
Wed Apr 10 07:49:50 CEST 2019
tree: https://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git topic/misc-core-fixes
head: 58e224117e101df0a90fa69ed8f32d6e1881c642
commit: 3d2ebce824f281b246de1f513f8863d95540df50 [16/17] ALSA: timer: Simplify error path in snd_timer_open()
New smatch warnings:
sound/core/timer.c:348 snd_timer_open() warn: inconsistent returns 'mutex:®ister_mutex'.
Locked on: line 309
Unlocked on: line 348
Old smatch warnings:
sound/core/timer.c:1226 snd_timer_proc_read() error: we previously assumed 'timer->card' could be null (see line 1219)
# https://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git/commit/?id=3d2ebce824f281b246de1f513f8863d95540df50
git remote add sound https://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git
git remote update sound
git checkout 3d2ebce824f281b246de1f513f8863d95540df50
vim +348 sound/core/timer.c
53d2f744 Takashi Iwai 2005-11-17 250 int snd_timer_open(struct snd_timer_instance **ti,
53d2f744 Takashi Iwai 2005-11-17 251 char *owner, struct snd_timer_id *tid,
^1da177e Linus Torvalds 2005-04-16 252 unsigned int slave_id)
^1da177e Linus Torvalds 2005-04-16 253 {
53d2f744 Takashi Iwai 2005-11-17 254 struct snd_timer *timer;
53d2f744 Takashi Iwai 2005-11-17 255 struct snd_timer_instance *timeri = NULL;
9b7d869e Takashi Iwai 2017-11-05 256 int err;
^1da177e Linus Torvalds 2005-04-16 257
3d2ebce8 Takashi Iwai 2019-03-28 258 mutex_lock(®ister_mutex);
^1da177e Linus Torvalds 2005-04-16 259 if (tid->dev_class == SNDRV_TIMER_CLASS_SLAVE) {
^1da177e Linus Torvalds 2005-04-16 260 /* open a slave instance */
^1da177e Linus Torvalds 2005-04-16 261 if (tid->dev_sclass <= SNDRV_TIMER_SCLASS_NONE ||
^1da177e Linus Torvalds 2005-04-16 262 tid->dev_sclass > SNDRV_TIMER_SCLASS_OSS_SEQUENCER) {
cf74dcf3 Takashi Iwai 2014-02-04 263 pr_debug("ALSA: timer: invalid slave class %i\n",
cf74dcf3 Takashi Iwai 2014-02-04 264 tid->dev_sclass);
3d2ebce8 Takashi Iwai 2019-03-28 265 err = -EINVAL;
3d2ebce8 Takashi Iwai 2019-03-28 266 goto unlock;
^1da177e Linus Torvalds 2005-04-16 267 }
^1da177e Linus Torvalds 2005-04-16 268 timeri = snd_timer_instance_new(owner, NULL);
2fd43d11 Clemens Ladisch 2005-10-12 269 if (!timeri) {
3d2ebce8 Takashi Iwai 2019-03-28 270 err = -ENOMEM;
3d2ebce8 Takashi Iwai 2019-03-28 271 goto unlock;
2fd43d11 Clemens Ladisch 2005-10-12 272 }
^1da177e Linus Torvalds 2005-04-16 273 timeri->slave_class = tid->dev_sclass;
^1da177e Linus Torvalds 2005-04-16 274 timeri->slave_id = tid->device;
^1da177e Linus Torvalds 2005-04-16 275 timeri->flags |= SNDRV_TIMER_IFLG_SLAVE;
^1da177e Linus Torvalds 2005-04-16 276 list_add_tail(&timeri->open_list, &snd_timer_slave_list);
9b7d869e Takashi Iwai 2017-11-05 277 err = snd_timer_check_slave(timeri);
9b7d869e Takashi Iwai 2017-11-05 278 if (err < 0) {
9b7d869e Takashi Iwai 2017-11-05 279 snd_timer_close_locked(timeri);
9b7d869e Takashi Iwai 2017-11-05 280 timeri = NULL;
9b7d869e Takashi Iwai 2017-11-05 281 }
3d2ebce8 Takashi Iwai 2019-03-28 282 goto unlock;
^1da177e Linus Torvalds 2005-04-16 283 }
^1da177e Linus Torvalds 2005-04-16 284
^1da177e Linus Torvalds 2005-04-16 285 /* open a master instance */
^1da177e Linus Torvalds 2005-04-16 286 timer = snd_timer_find(tid);
ee2da997 Johannes Berg 2008-07-09 287 #ifdef CONFIG_MODULES
ee2da997 Johannes Berg 2008-07-09 288 if (!timer) {
1a60d4c5 Ingo Molnar 2006-01-16 289 mutex_unlock(®ister_mutex);
^1da177e Linus Torvalds 2005-04-16 290 snd_timer_request(tid);
1a60d4c5 Ingo Molnar 2006-01-16 291 mutex_lock(®ister_mutex);
^1da177e Linus Torvalds 2005-04-16 292 timer = snd_timer_find(tid);
^1da177e Linus Torvalds 2005-04-16 293 }
^1da177e Linus Torvalds 2005-04-16 294 #endif
2fd43d11 Clemens Ladisch 2005-10-12 295 if (!timer) {
3d2ebce8 Takashi Iwai 2019-03-28 296 err = -ENODEV;
3d2ebce8 Takashi Iwai 2019-03-28 297 goto unlock;
2fd43d11 Clemens Ladisch 2005-10-12 298 }
^1da177e Linus Torvalds 2005-04-16 299 if (!list_empty(&timer->open_list_head)) {
2fd43d11 Clemens Ladisch 2005-10-12 300 timeri = list_entry(timer->open_list_head.next,
53d2f744 Takashi Iwai 2005-11-17 301 struct snd_timer_instance, open_list);
^1da177e Linus Torvalds 2005-04-16 302 if (timeri->flags & SNDRV_TIMER_IFLG_EXCLUSIVE) {
3d2ebce8 Takashi Iwai 2019-03-28 303 err = -EBUSY;
3d2ebce8 Takashi Iwai 2019-03-28 304 timeri = NULL;
3d2ebce8 Takashi Iwai 2019-03-28 305 goto unlock;
^1da177e Linus Torvalds 2005-04-16 306 }
^1da177e Linus Torvalds 2005-04-16 307 }
9b7d869e Takashi Iwai 2017-11-05 308 if (timer->num_instances >= timer->max_instances) {
9b7d869e Takashi Iwai 2017-11-05 309 return -EBUSY;
^^^^^^^^^^^^^^
delete the stray return
3d2ebce8 Takashi Iwai 2019-03-28 310 goto unlock;
^^^^^^^^^^^
9b7d869e Takashi Iwai 2017-11-05 311 }
^1da177e Linus Torvalds 2005-04-16 312 timeri = snd_timer_instance_new(owner, timer);
2fd43d11 Clemens Ladisch 2005-10-12 313 if (!timeri) {
3d2ebce8 Takashi Iwai 2019-03-28 314 err = -ENOMEM;
3d2ebce8 Takashi Iwai 2019-03-28 315 goto unlock;
2fd43d11 Clemens Ladisch 2005-10-12 316 }
230323da Takashi Iwai 2016-01-21 317 /* take a card refcount for safe disconnection */
230323da Takashi Iwai 2016-01-21 318 if (timer->card)
230323da Takashi Iwai 2016-01-21 319 get_device(&timer->card->card_dev);
^1da177e Linus Torvalds 2005-04-16 320 timeri->slave_class = tid->dev_sclass;
^1da177e Linus Torvalds 2005-04-16 321 timeri->slave_id = slave_id;
8ddc0563 Vegard Nossum 2016-08-29 322
8ddc0563 Vegard Nossum 2016-08-29 323 if (list_empty(&timer->open_list_head) && timer->hw.open) {
3d2ebce8 Takashi Iwai 2019-03-28 324 err = timer->hw.open(timer);
8ddc0563 Vegard Nossum 2016-08-29 325 if (err) {
8ddc0563 Vegard Nossum 2016-08-29 326 kfree(timeri->owner);
8ddc0563 Vegard Nossum 2016-08-29 327 kfree(timeri);
3d2ebce8 Takashi Iwai 2019-03-28 328 timeri = NULL;
8ddc0563 Vegard Nossum 2016-08-29 329
8ddc0563 Vegard Nossum 2016-08-29 330 if (timer->card)
8ddc0563 Vegard Nossum 2016-08-29 331 put_device(&timer->card->card_dev);
8ddc0563 Vegard Nossum 2016-08-29 332 module_put(timer->module);
3d2ebce8 Takashi Iwai 2019-03-28 333 goto unlock;
8ddc0563 Vegard Nossum 2016-08-29 334 }
8ddc0563 Vegard Nossum 2016-08-29 335 }
8ddc0563 Vegard Nossum 2016-08-29 336
^1da177e Linus Torvalds 2005-04-16 337 list_add_tail(&timeri->open_list, &timer->open_list_head);
9b7d869e Takashi Iwai 2017-11-05 338 timer->num_instances++;
9b7d869e Takashi Iwai 2017-11-05 339 err = snd_timer_check_master(timeri);
9b7d869e Takashi Iwai 2017-11-05 340 if (err < 0) {
9b7d869e Takashi Iwai 2017-11-05 341 snd_timer_close_locked(timeri);
9b7d869e Takashi Iwai 2017-11-05 342 timeri = NULL;
9b7d869e Takashi Iwai 2017-11-05 343 }
3d2ebce8 Takashi Iwai 2019-03-28 344
3d2ebce8 Takashi Iwai 2019-03-28 345 unlock:
1a60d4c5 Ingo Molnar 2006-01-16 346 mutex_unlock(®ister_mutex);
^1da177e Linus Torvalds 2005-04-16 347 *ti = timeri;
9b7d869e Takashi Iwai 2017-11-05 @348 return err;
^1da177e Linus Torvalds 2005-04-16 349 }
98856392 Takashi Iwai 2017-06-16 350 EXPORT_SYMBOL(snd_timer_open);
^1da177e Linus Torvalds 2005-04-16 351
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
More information about the Alsa-devel
mailing list