Merge tag 'sound-fix-4.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound

Pull sound fixes from Takashi Iwai:
"Most of the commits are trivial cleanup patches, while one commit is a
significant fix for the race at ALSA sequencer that was spotted by
syzkaller"

* tag 'sound-fix-4.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
ALSA: seq: Cancel pending autoload work at unbinding device
ALSA: firewire: Use common error handling code in snd_motu_stream_start_duplex()
ALSA: asihpi: Kill BUG_ON() usages
ALSA: core: Use %pS printk format for direct addresses
ALSA: ymfpci: Use common error handling code in snd_ymfpci_create()
ALSA: ymfpci: Use common error handling code in snd_card_ymfpci_probe()
ALSA: 6fire: Use common error handling code in usb6fire_chip_probe()
ALSA: usx2y: Use common error handling code in submit_urbs()
ALSA: us122l: Use common error handling code in us122l_create_card()
ALSA: hdspm: Use common error handling code in snd_hdspm_probe()
ALSA: rme9652: Use common code in hdsp_get_iobox_version()
ALSA: maestro3: Use common error handling code in two functions

+141 -149
+2 -2
sound/core/device.c
··· 128 128 if (dev) 129 129 __snd_device_disconnect(dev); 130 130 else 131 - dev_dbg(card->dev, "device disconnect %p (from %pF), not found\n", 131 + dev_dbg(card->dev, "device disconnect %p (from %pS), not found\n", 132 132 device_data, __builtin_return_address(0)); 133 133 } 134 134 EXPORT_SYMBOL_GPL(snd_device_disconnect); ··· 152 152 if (dev) 153 153 __snd_device_free(dev); 154 154 else 155 - dev_dbg(card->dev, "device free %p (from %pF), not found\n", 155 + dev_dbg(card->dev, "device free %p (from %pS), not found\n", 156 156 device_data, __builtin_return_address(0)); 157 157 } 158 158 EXPORT_SYMBOL(snd_device_free);
+3
sound/core/seq_device.c
··· 148 148 flush_work(&autoload_work); 149 149 } 150 150 EXPORT_SYMBOL(snd_seq_device_load_drivers); 151 + #define cancel_autoload_drivers() cancel_work_sync(&autoload_work) 151 152 #else 152 153 #define queue_autoload_drivers() /* NOP */ 154 + #define cancel_autoload_drivers() /* NOP */ 153 155 #endif 154 156 155 157 /* ··· 161 159 { 162 160 struct snd_seq_device *dev = device->device_data; 163 161 162 + cancel_autoload_drivers(); 164 163 put_device(&dev->dev); 165 164 return 0; 166 165 }
+8 -8
sound/firewire/motu/motu-stream.c
··· 253 253 if (err < 0) { 254 254 dev_err(&motu->unit->device, 255 255 "fail to start isochronous comm: %d\n", err); 256 - stop_both_streams(motu); 257 - return err; 256 + goto stop_streams; 258 257 } 259 258 260 259 err = start_isoc_ctx(motu, &motu->rx_stream); 261 260 if (err < 0) { 262 261 dev_err(&motu->unit->device, 263 262 "fail to start IT context: %d\n", err); 264 - stop_both_streams(motu); 265 - return err; 263 + goto stop_streams; 266 264 } 267 265 268 266 err = protocol->switch_fetching_mode(motu, true); 269 267 if (err < 0) { 270 268 dev_err(&motu->unit->device, 271 269 "fail to enable frame fetching: %d\n", err); 272 - stop_both_streams(motu); 273 - return err; 270 + goto stop_streams; 274 271 } 275 272 } 276 273 ··· 278 281 dev_err(&motu->unit->device, 279 282 "fail to start IR context: %d", err); 280 283 amdtp_stream_stop(&motu->rx_stream); 281 - stop_both_streams(motu); 282 - return err; 284 + goto stop_streams; 283 285 } 284 286 } 285 287 286 288 return 0; 289 + 290 + stop_streams: 291 + stop_both_streams(motu); 292 + return err; 287 293 } 288 294 289 295 void snd_motu_stream_stop_duplex(struct snd_motu *motu)
+1 -5
sound/pci/asihpi/asihpi.c
··· 558 558 struct snd_card_asihpi_pcm *dpcm; 559 559 struct snd_card_asihpi *card; 560 560 561 - BUG_ON(!substream); 562 - 563 561 dpcm = (struct snd_card_asihpi_pcm *)substream->runtime->private_data; 564 562 card = snd_pcm_substream_chip(substream); 565 563 566 - BUG_ON(in_interrupt()); 564 + WARN_ON(in_interrupt()); 567 565 tasklet_disable(&card->t); 568 566 card->llmode_streampriv = dpcm; 569 567 tasklet_enable(&card->t); ··· 575 577 { 576 578 struct snd_card_asihpi_pcm *dpcm; 577 579 struct snd_card_asihpi *card; 578 - 579 - BUG_ON(!substream); 580 580 581 581 dpcm = (struct snd_card_asihpi_pcm *)substream->runtime->private_data; 582 582 card = snd_pcm_substream_chip(substream);
+28 -29
sound/pci/maestro3.c
··· 2622 2622 2623 2623 err = request_firmware(&chip->assp_kernel_image, 2624 2624 "ess/maestro3_assp_kernel.fw", &pci->dev); 2625 - if (err < 0) { 2626 - snd_m3_free(chip); 2627 - return err; 2628 - } 2625 + if (err < 0) 2626 + goto free_chip; 2629 2627 2630 2628 err = request_firmware(&chip->assp_minisrc_image, 2631 2629 "ess/maestro3_assp_minisrc.fw", &pci->dev); 2632 - if (err < 0) { 2633 - snd_m3_free(chip); 2634 - return err; 2635 - } 2630 + if (err < 0) 2631 + goto free_chip; 2636 2632 2637 - if ((err = pci_request_regions(pci, card->driver)) < 0) { 2638 - snd_m3_free(chip); 2639 - return err; 2640 - } 2633 + err = pci_request_regions(pci, card->driver); 2634 + if (err < 0) 2635 + goto free_chip; 2636 + 2641 2637 chip->iobase = pci_resource_start(pci, 0); 2642 2638 2643 2639 /* just to be sure */ ··· 2651 2655 if (request_irq(pci->irq, snd_m3_interrupt, IRQF_SHARED, 2652 2656 KBUILD_MODNAME, chip)) { 2653 2657 dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq); 2654 - snd_m3_free(chip); 2655 - return -ENOMEM; 2658 + err = -ENOMEM; 2659 + goto free_chip; 2656 2660 } 2657 2661 chip->irq = pci->irq; 2658 2662 ··· 2662 2666 dev_warn(card->dev, "can't allocate apm buffer\n"); 2663 2667 #endif 2664 2668 2665 - if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) { 2666 - snd_m3_free(chip); 2667 - return err; 2668 - } 2669 + err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops); 2670 + if (err < 0) 2671 + goto free_chip; 2669 2672 2670 2673 if ((err = snd_m3_mixer(chip)) < 0) 2671 2674 return err; ··· 2694 2699 *chip_ret = chip; 2695 2700 2696 2701 return 0; 2702 + 2703 + free_chip: 2704 + snd_m3_free(chip); 2705 + return err; 2697 2706 } 2698 2707 2699 2708 /* ··· 2740 2741 break; 2741 2742 } 2742 2743 2743 - if ((err = snd_m3_create(card, pci, 2744 - external_amp[dev], 2745 - amp_gpio[dev], 2746 - &chip)) < 0) { 2747 - snd_card_free(card); 2748 - return err; 2749 - } 2744 + err = snd_m3_create(card, pci, external_amp[dev], amp_gpio[dev], &chip); 2745 + if (err < 0) 2746 + goto free_card; 2747 + 2750 2748 card->private_data = chip; 2751 2749 2752 2750 sprintf(card->shortname, "ESS %s PCI", card->driver); 2753 2751 sprintf(card->longname, "%s at 0x%lx, irq %d", 2754 2752 card->shortname, chip->iobase, chip->irq); 2755 2753 2756 - if ((err = snd_card_register(card)) < 0) { 2757 - snd_card_free(card); 2758 - return err; 2759 - } 2754 + err = snd_card_register(card); 2755 + if (err < 0) 2756 + goto free_card; 2760 2757 2761 2758 #if 0 /* TODO: not supported yet */ 2762 2759 /* TODO enable MIDI IRQ and I/O */ ··· 2767 2772 pci_set_drvdata(pci, card); 2768 2773 dev++; 2769 2774 return 0; 2775 + 2776 + free_card: 2777 + snd_card_free(card); 2778 + return err; 2770 2779 } 2771 2780 2772 2781 static void snd_m3_remove(struct pci_dev *pci)
+11 -15
sound/pci/rme9652/hdsp.c
··· 793 793 794 794 hdsp_write(hdsp, HDSP_control2Reg, HDSP_S200 | HDSP_PROGRAM); 795 795 hdsp_write (hdsp, HDSP_fifoData, 0); 796 - if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) < 0) { 797 - hdsp->io_type = Multiface; 798 - dev_info(hdsp->card->dev, "Multiface found\n"); 799 - return 0; 800 - } 796 + if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) < 0) 797 + goto set_multi; 801 798 802 799 hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD); 803 800 hdsp_write(hdsp, HDSP_fifoData, 0); ··· 807 810 hdsp_write(hdsp, HDSP_control2Reg, HDSP_S300); 808 811 hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD); 809 812 hdsp_write(hdsp, HDSP_fifoData, 0); 810 - if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) == 0) { 811 - hdsp->io_type = Multiface; 812 - dev_info(hdsp->card->dev, "Multiface found\n"); 813 - return 0; 814 - } 813 + if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) == 0) 814 + goto set_multi; 815 815 816 816 hdsp_write(hdsp, HDSP_control2Reg, HDSP_S300); 817 817 hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD); 818 818 hdsp_write(hdsp, HDSP_fifoData, 0); 819 - if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) < 0) { 820 - hdsp->io_type = Multiface; 821 - dev_info(hdsp->card->dev, "Multiface found\n"); 822 - return 0; 823 - } 819 + if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) < 0) 820 + goto set_multi; 824 821 825 822 hdsp->io_type = RPM; 826 823 dev_info(hdsp->card->dev, "RPM found\n"); ··· 828 837 else 829 838 hdsp->io_type = Digiface; 830 839 } 840 + return 0; 841 + 842 + set_multi: 843 + hdsp->io_type = Multiface; 844 + dev_info(hdsp->card->dev, "Multiface found\n"); 831 845 return 0; 832 846 } 833 847
+8 -8
sound/pci/rme9652/hdspm.c
··· 6949 6949 hdspm->pci = pci; 6950 6950 6951 6951 err = snd_hdspm_create(card, hdspm); 6952 - if (err < 0) { 6953 - snd_card_free(card); 6954 - return err; 6955 - } 6952 + if (err < 0) 6953 + goto free_card; 6956 6954 6957 6955 if (hdspm->io_type != MADIface) { 6958 6956 snprintf(card->shortname, sizeof(card->shortname), "%s_%x", ··· 6968 6970 } 6969 6971 6970 6972 err = snd_card_register(card); 6971 - if (err < 0) { 6972 - snd_card_free(card); 6973 - return err; 6974 - } 6973 + if (err < 0) 6974 + goto free_card; 6975 6975 6976 6976 pci_set_drvdata(pci, card); 6977 6977 6978 6978 dev++; 6979 6979 return 0; 6980 + 6981 + free_card: 6982 + snd_card_free(card); 6983 + return err; 6980 6984 } 6981 6985 6982 6986 static void snd_hdspm_remove(struct pci_dev *pci)
+30 -32
sound/pci/ymfpci/ymfpci.c
··· 268 268 if ((err = snd_ymfpci_create(card, pci, 269 269 old_legacy_ctrl, 270 270 &chip)) < 0) { 271 - snd_card_free(card); 272 271 release_and_free_resource(mpu_res); 273 272 release_and_free_resource(fm_res); 274 - return err; 273 + goto free_card; 275 274 } 276 275 chip->fm_res = fm_res; 277 276 chip->mpu_res = mpu_res; ··· 282 283 card->shortname, 283 284 chip->reg_area_phys, 284 285 chip->irq); 285 - if ((err = snd_ymfpci_pcm(chip, 0)) < 0) { 286 - snd_card_free(card); 287 - return err; 288 - } 289 - if ((err = snd_ymfpci_pcm_spdif(chip, 1)) < 0) { 290 - snd_card_free(card); 291 - return err; 292 - } 286 + err = snd_ymfpci_pcm(chip, 0); 287 + if (err < 0) 288 + goto free_card; 289 + 290 + err = snd_ymfpci_pcm_spdif(chip, 1); 291 + if (err < 0) 292 + goto free_card; 293 + 293 294 err = snd_ymfpci_mixer(chip, rear_switch[dev]); 294 - if (err < 0) { 295 - snd_card_free(card); 296 - return err; 297 - } 295 + if (err < 0) 296 + goto free_card; 297 + 298 298 if (chip->ac97->ext_id & AC97_EI_SDAC) { 299 299 err = snd_ymfpci_pcm_4ch(chip, 2); 300 - if (err < 0) { 301 - snd_card_free(card); 302 - return err; 303 - } 300 + if (err < 0) 301 + goto free_card; 302 + 304 303 err = snd_ymfpci_pcm2(chip, 3); 305 - if (err < 0) { 306 - snd_card_free(card); 307 - return err; 308 - } 304 + if (err < 0) 305 + goto free_card; 309 306 } 310 - if ((err = snd_ymfpci_timer(chip, 0)) < 0) { 311 - snd_card_free(card); 312 - return err; 313 - } 307 + err = snd_ymfpci_timer(chip, 0); 308 + if (err < 0) 309 + goto free_card; 310 + 314 311 if (chip->mpu_res) { 315 312 if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_YMFPCI, 316 313 mpu_port[dev], ··· 331 336 legacy_ctrl &= ~YMFPCI_LEGACY_FMEN; 332 337 pci_write_config_word(pci, PCIR_DSXG_LEGACY, legacy_ctrl); 333 338 } else if ((err = snd_opl3_hwdep_new(opl3, 0, 1, NULL)) < 0) { 334 - snd_card_free(card); 335 339 dev_err(card->dev, "cannot create opl3 hwdep\n"); 336 - return err; 340 + goto free_card; 337 341 } 338 342 } 339 343 340 344 snd_ymfpci_create_gameport(chip, dev, legacy_ctrl, legacy_ctrl2); 341 345 342 - if ((err = snd_card_register(card)) < 0) { 343 - snd_card_free(card); 344 - return err; 345 - } 346 + err = snd_card_register(card); 347 + if (err < 0) 348 + goto free_card; 349 + 346 350 pci_set_drvdata(pci, card); 347 351 dev++; 348 352 return 0; 353 + 354 + free_card: 355 + snd_card_free(card); 356 + return err; 349 357 } 350 358 351 359 static void snd_card_ymfpci_remove(struct pci_dev *pci)
+21 -20
sound/pci/ymfpci/ymfpci_main.c
··· 2399 2399 dev_err(chip->card->dev, 2400 2400 "unable to grab memory region 0x%lx-0x%lx\n", 2401 2401 chip->reg_area_phys, chip->reg_area_phys + 0x8000 - 1); 2402 - snd_ymfpci_free(chip); 2403 - return -EBUSY; 2402 + err = -EBUSY; 2403 + goto free_chip; 2404 2404 } 2405 2405 if (request_irq(pci->irq, snd_ymfpci_interrupt, IRQF_SHARED, 2406 2406 KBUILD_MODNAME, chip)) { 2407 2407 dev_err(chip->card->dev, "unable to grab IRQ %d\n", pci->irq); 2408 - snd_ymfpci_free(chip); 2409 - return -EBUSY; 2408 + err = -EBUSY; 2409 + goto free_chip; 2410 2410 } 2411 2411 chip->irq = pci->irq; 2412 2412 2413 2413 snd_ymfpci_aclink_reset(pci); 2414 2414 if (snd_ymfpci_codec_ready(chip, 0) < 0) { 2415 - snd_ymfpci_free(chip); 2416 - return -EIO; 2415 + err = -EIO; 2416 + goto free_chip; 2417 2417 } 2418 2418 2419 2419 err = snd_ymfpci_request_firmware(chip); 2420 2420 if (err < 0) { 2421 2421 dev_err(chip->card->dev, "firmware request failed: %d\n", err); 2422 - snd_ymfpci_free(chip); 2423 - return err; 2422 + goto free_chip; 2424 2423 } 2425 2424 snd_ymfpci_download_image(chip); 2426 2425 2427 2426 udelay(100); /* seems we need a delay after downloading image.. */ 2428 2427 2429 2428 if (snd_ymfpci_memalloc(chip) < 0) { 2430 - snd_ymfpci_free(chip); 2431 - return -EIO; 2429 + err = -EIO; 2430 + goto free_chip; 2432 2431 } 2433 2432 2434 - if ((err = snd_ymfpci_ac3_init(chip)) < 0) { 2435 - snd_ymfpci_free(chip); 2436 - return err; 2437 - } 2433 + err = snd_ymfpci_ac3_init(chip); 2434 + if (err < 0) 2435 + goto free_chip; 2438 2436 2439 2437 #ifdef CONFIG_PM_SLEEP 2440 2438 chip->saved_regs = kmalloc(YDSXGR_NUM_SAVED_REGS * sizeof(u32), 2441 2439 GFP_KERNEL); 2442 2440 if (chip->saved_regs == NULL) { 2443 - snd_ymfpci_free(chip); 2444 - return -ENOMEM; 2441 + err = -ENOMEM; 2442 + goto free_chip; 2445 2443 } 2446 2444 #endif 2447 2445 2448 - if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) { 2449 - snd_ymfpci_free(chip); 2450 - return err; 2451 - } 2446 + err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops); 2447 + if (err < 0) 2448 + goto free_chip; 2452 2449 2453 2450 snd_ymfpci_proc_init(card, chip); 2454 2451 2455 2452 *rchip = chip; 2456 2453 return 0; 2454 + 2455 + free_chip: 2456 + snd_ymfpci_free(chip); 2457 + return err; 2457 2458 }
+13 -18
sound/usb/6fire/chip.c
··· 143 143 chip->card = card; 144 144 145 145 ret = usb6fire_comm_init(chip); 146 - if (ret < 0) { 147 - usb6fire_chip_destroy(chip); 148 - return ret; 149 - } 146 + if (ret < 0) 147 + goto destroy_chip; 150 148 151 149 ret = usb6fire_midi_init(chip); 152 - if (ret < 0) { 153 - usb6fire_chip_destroy(chip); 154 - return ret; 155 - } 150 + if (ret < 0) 151 + goto destroy_chip; 156 152 157 153 ret = usb6fire_pcm_init(chip); 158 - if (ret < 0) { 159 - usb6fire_chip_destroy(chip); 160 - return ret; 161 - } 154 + if (ret < 0) 155 + goto destroy_chip; 162 156 163 157 ret = usb6fire_control_init(chip); 164 - if (ret < 0) { 165 - usb6fire_chip_destroy(chip); 166 - return ret; 167 - } 158 + if (ret < 0) 159 + goto destroy_chip; 168 160 169 161 ret = snd_card_register(card); 170 162 if (ret < 0) { 171 163 dev_err(&intf->dev, "cannot register card."); 172 - usb6fire_chip_destroy(chip); 173 - return ret; 164 + goto destroy_chip; 174 165 } 175 166 usb_set_intfdata(intf, chip); 176 167 return 0; 168 + 169 + destroy_chip: 170 + usb6fire_chip_destroy(chip); 171 + return ret; 177 172 } 178 173 179 174 static void usb6fire_chip_disconnect(struct usb_interface *intf)
+6 -4
sound/usb/usx2y/us122l.c
··· 508 508 err = us122l_create_usbmidi(card); 509 509 if (err < 0) { 510 510 snd_printk(KERN_ERR "us122l_create_usbmidi error %i \n", err); 511 - us122l_stop(us122l); 512 - return false; 511 + goto stop; 513 512 } 514 513 err = usb_stream_hwdep_new(card); 515 514 if (err < 0) { ··· 517 518 list_for_each(p, &us122l->midi_list) 518 519 snd_usbmidi_disconnect(p); 519 520 520 - us122l_stop(us122l); 521 - return false; 521 + goto stop; 522 522 } 523 523 return true; 524 + 525 + stop: 526 + us122l_stop(us122l); 527 + return false; 524 528 } 525 529 526 530 static void snd_us122l_free(struct snd_card *card)
+10 -8
sound/usb/usx2y/usb_stream.c
··· 352 352 int err; 353 353 prepare_inurb(sk->idle_outurb->number_of_packets, sk->idle_inurb); 354 354 err = usb_submit_urb(sk->idle_inurb, GFP_ATOMIC); 355 - if (err < 0) { 356 - snd_printk(KERN_ERR "%i\n", err); 357 - return err; 358 - } 355 + if (err < 0) 356 + goto report_failure; 357 + 359 358 sk->idle_inurb = sk->completed_inurb; 360 359 sk->completed_inurb = inurb; 361 360 err = usb_submit_urb(sk->idle_outurb, GFP_ATOMIC); 362 - if (err < 0) { 363 - snd_printk(KERN_ERR "%i\n", err); 364 - return err; 365 - } 361 + if (err < 0) 362 + goto report_failure; 363 + 366 364 sk->idle_outurb = sk->completed_outurb; 367 365 sk->completed_outurb = outurb; 368 366 return 0; 367 + 368 + report_failure: 369 + snd_printk(KERN_ERR "%i\n", err); 370 + return err; 369 371 } 370 372 371 373 #ifdef DEBUG_LOOP_BACK