.. | .. |
---|
3380 | 3380 | * |
---|
3381 | 3381 | *****************************************************************************/ |
---|
3382 | 3382 | |
---|
3383 | | -static void |
---|
| 3383 | +static int |
---|
3384 | 3384 | il3945_setup_deferred_work(struct il_priv *il) |
---|
3385 | 3385 | { |
---|
3386 | 3386 | il->workqueue = create_singlethread_workqueue(DRV_NAME); |
---|
| 3387 | + if (!il->workqueue) |
---|
| 3388 | + return -ENOMEM; |
---|
3387 | 3389 | |
---|
3388 | 3390 | init_waitqueue_head(&il->wait_command_queue); |
---|
3389 | 3391 | |
---|
.. | .. |
---|
3400 | 3402 | timer_setup(&il->watchdog, il_bg_watchdog, 0); |
---|
3401 | 3403 | |
---|
3402 | 3404 | tasklet_setup(&il->irq_tasklet, il3945_irq_tasklet); |
---|
| 3405 | + |
---|
| 3406 | + return 0; |
---|
3403 | 3407 | } |
---|
3404 | 3408 | |
---|
3405 | 3409 | static void |
---|
.. | .. |
---|
3721 | 3725 | } |
---|
3722 | 3726 | |
---|
3723 | 3727 | il_set_rxon_channel(il, &il->bands[NL80211_BAND_2GHZ].channels[5]); |
---|
3724 | | - il3945_setup_deferred_work(il); |
---|
| 3728 | + err = il3945_setup_deferred_work(il); |
---|
| 3729 | + if (err) |
---|
| 3730 | + goto out_remove_sysfs; |
---|
| 3731 | + |
---|
3725 | 3732 | il3945_setup_handlers(il); |
---|
3726 | 3733 | il_power_initialize(il); |
---|
3727 | 3734 | |
---|
.. | .. |
---|
3733 | 3740 | |
---|
3734 | 3741 | err = il3945_setup_mac(il); |
---|
3735 | 3742 | if (err) |
---|
3736 | | - goto out_remove_sysfs; |
---|
| 3743 | + goto out_destroy_workqueue; |
---|
3737 | 3744 | |
---|
3738 | 3745 | il_dbgfs_register(il, DRV_NAME); |
---|
3739 | 3746 | |
---|
.. | .. |
---|
3742 | 3749 | |
---|
3743 | 3750 | return 0; |
---|
3744 | 3751 | |
---|
3745 | | -out_remove_sysfs: |
---|
| 3752 | +out_destroy_workqueue: |
---|
3746 | 3753 | destroy_workqueue(il->workqueue); |
---|
3747 | 3754 | il->workqueue = NULL; |
---|
| 3755 | +out_remove_sysfs: |
---|
3748 | 3756 | sysfs_remove_group(&pdev->dev.kobj, &il3945_attribute_group); |
---|
3749 | 3757 | out_release_irq: |
---|
3750 | 3758 | free_irq(il->pci_dev->irq, il); |
---|