This patch fixes following cleanup issues:
 - Missing instruction queue free on cleanup. This
   will lead to memory leak.
 - lfs->lfs_num is set to zero before cleanup, which
   will lead to improper cleanup.
Signed-off-by: Bharat Bhushan <bbhushan2@marvell.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
        return 0;
 
 free_iq:
-       otx2_cpt_free_instruction_queues(lfs);
        cptlf_hw_cleanup(lfs);
+       otx2_cpt_free_instruction_queues(lfs);
 detach_rsrcs:
        otx2_cpt_detach_rsrcs_msg(lfs);
 clear_lfs_num:
 
 void otx2_cptlf_shutdown(struct otx2_cptlfs_info *lfs)
 {
-       lfs->lfs_num = 0;
        /* Cleanup LFs hardware side */
        cptlf_hw_cleanup(lfs);
+       /* Free instruction queues */
+       otx2_cpt_free_instruction_queues(lfs);
        /* Send request to detach LFs */
        otx2_cpt_detach_rsrcs_msg(lfs);
+       lfs->lfs_num = 0;
 }
 EXPORT_SYMBOL_NS_GPL(otx2_cptlf_shutdown, CRYPTO_DEV_OCTEONTX2_CPT);
 
 
        otx2_cptlf_unregister_interrupts(lfs);
        /* Cleanup LFs software side */
        lf_sw_cleanup(lfs);
+       /* Free instruction queues */
+       otx2_cpt_free_instruction_queues(lfs);
        /* Send request to detach LFs */
        otx2_cpt_detach_rsrcs_msg(lfs);
+       lfs->lfs_num = 0;
 }
 
 static int cptvf_lf_init(struct otx2_cptvf_dev *cptvf)