extern const struct attribute_group *mpt3sas_dev_groups[];
 void mpt3sas_ctl_init(ushort hbas_to_enumerate);
 void mpt3sas_ctl_exit(ushort hbas_to_enumerate);
+void mpt3sas_ctl_release(struct MPT3SAS_ADAPTER *ioc);
 u8 mpt3sas_ctl_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index,
        u32 reply);
 void mpt3sas_ctl_pre_reset_handler(struct MPT3SAS_ADAPTER *ioc);
 
 }
 
 /**
- * mpt3sas_ctl_exit - exit point for ctl
- * @hbas_to_enumerate: ?
+ * mpt3sas_ctl_release - release dma for ctl
+ * @ioc: per adapter object
  */
 void
-mpt3sas_ctl_exit(ushort hbas_to_enumerate)
+mpt3sas_ctl_release(struct MPT3SAS_ADAPTER *ioc)
 {
-       struct MPT3SAS_ADAPTER *ioc;
        int i;
 
-       list_for_each_entry(ioc, &mpt3sas_ioc_list, list) {
+       /* free memory associated to diag buffers */
+       for (i = 0; i < MPI2_DIAG_BUF_TYPE_COUNT; i++) {
+               if (!ioc->diag_buffer[i])
+                       continue;
+               dma_free_coherent(&ioc->pdev->dev,
+                                 ioc->diag_buffer_sz[i],
+                                 ioc->diag_buffer[i],
+                                 ioc->diag_buffer_dma[i]);
+               ioc->diag_buffer[i] = NULL;
+               ioc->diag_buffer_status[i] = 0;
+       }
 
-               /* free memory associated to diag buffers */
-               for (i = 0; i < MPI2_DIAG_BUF_TYPE_COUNT; i++) {
-                       if (!ioc->diag_buffer[i])
-                               continue;
-                       dma_free_coherent(&ioc->pdev->dev,
-                                         ioc->diag_buffer_sz[i],
-                                         ioc->diag_buffer[i],
-                                         ioc->diag_buffer_dma[i]);
-                       ioc->diag_buffer[i] = NULL;
-                       ioc->diag_buffer_status[i] = 0;
-               }
+       kfree(ioc->event_log);
+}
+
+/**
+ * mpt3sas_ctl_exit - exit point for ctl
+ * @hbas_to_enumerate: ?
+ */
+void
+mpt3sas_ctl_exit(ushort hbas_to_enumerate)
+{
 
-               kfree(ioc->event_log);
-       }
        if (hbas_to_enumerate != 1)
                misc_deregister(&ctl_dev);
        if (hbas_to_enumerate != 2)