|
@@ -2991,6 +2991,14 @@ static int __init mptctl_init(void)
|
|
|
}
|
|
|
|
|
|
mptctl_taskmgmt_id = mpt_register(mptctl_taskmgmt_reply, MPTCTL_DRIVER);
|
|
|
+ if (!mptctl_taskmgmt_id || mptctl_taskmgmt_id >= MPT_MAX_PROTOCOL_DRIVERS) {
|
|
|
+ printk(KERN_ERR MYNAM ": ERROR: Failed to register with Fusion MPT base driver\n");
|
|
|
+ mpt_deregister(mptctl_id);
|
|
|
+ misc_deregister(&mptctl_miscdev);
|
|
|
+ err = -EBUSY;
|
|
|
+ goto out_fail;
|
|
|
+ }
|
|
|
+
|
|
|
mpt_reset_register(mptctl_id, mptctl_ioc_reset);
|
|
|
mpt_event_register(mptctl_id, mptctl_event_process);
|
|
|
|
|
@@ -3010,12 +3018,15 @@ static void mptctl_exit(void)
|
|
|
printk(KERN_INFO MYNAM ": Deregistered /dev/%s @ (major,minor=%d,%d)\n",
|
|
|
mptctl_miscdev.name, MISC_MAJOR, mptctl_miscdev.minor);
|
|
|
|
|
|
+ /* De-register event handler from base module */
|
|
|
+ mpt_event_deregister(mptctl_id);
|
|
|
+
|
|
|
/* De-register reset handler from base module */
|
|
|
mpt_reset_deregister(mptctl_id);
|
|
|
|
|
|
/* De-register callback handler from base module */
|
|
|
+ mpt_deregister(mptctl_taskmgmt_id);
|
|
|
mpt_deregister(mptctl_id);
|
|
|
- mpt_reset_deregister(mptctl_taskmgmt_id);
|
|
|
|
|
|
mpt_device_driver_deregister(MPTCTL_DRIVER);
|
|
|
|