IB/qib: Clean up properly if qib_init() fails
If qib_init() fails, the driver fails to free memory, unregister device files, and unregister with the PCIe framework. The driver will unload without error but a subsequent driver load will cause the system to panic. This was found by changing the 7220 code to load the serdes microcode separately and not installing the microcode file. Signed-off-by: Ralph Campbell <ralph.campbell@qlogic.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
parent
950aff5394
commit
756a33b8dc
1 changed files with 10 additions and 0 deletions
|
@ -1289,8 +1289,18 @@ static int __devinit qib_init_one(struct pci_dev *pdev,
|
|||
|
||||
if (qib_mini_init || initfail || ret) {
|
||||
qib_stop_timers(dd);
|
||||
flush_scheduled_work();
|
||||
for (pidx = 0; pidx < dd->num_pports; ++pidx)
|
||||
dd->f_quiet_serdes(dd->pport + pidx);
|
||||
if (qib_mini_init)
|
||||
goto bail;
|
||||
if (!j) {
|
||||
(void) qibfs_remove(dd);
|
||||
qib_device_remove(dd);
|
||||
}
|
||||
if (!ret)
|
||||
qib_unregister_ib_device(dd);
|
||||
qib_postinit_cleanup(dd);
|
||||
if (initfail)
|
||||
ret = initfail;
|
||||
goto bail;
|
||||
|
|
Loading…
Reference in a new issue