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