release_mem_region(res->start, resource_size(res));
        i--;
 fail_nobase_res:
-       if (isif_cfg.base_addr)
+       if (isif_cfg.base_addr) {
                iounmap(isif_cfg.base_addr);
-       if (isif_cfg.linear_tbl0_addr)
+               isif_cfg.base_addr = NULL;
+       }
+       if (isif_cfg.linear_tbl0_addr) {
                iounmap(isif_cfg.linear_tbl0_addr);
+               isif_cfg.linear_tbl0_addr = NULL;
+       }
 
        while (i >= 0) {
                res = platform_get_resource(pdev, IORESOURCE_MEM, i);
        int i = 0;
 
        iounmap(isif_cfg.base_addr);
+       isif_cfg.base_addr = NULL;
        iounmap(isif_cfg.linear_tbl0_addr);
+       isif_cfg.linear_tbl0_addr = NULL;
        iounmap(isif_cfg.linear_tbl1_addr);
+       isif_cfg.linear_tbl1_addr = NULL;
        while (i < 3) {
                res = platform_get_resource(pdev, IORESOURCE_MEM, i);
                if (res)