net/avp: remove resources when port is closed
[dpdk.git] / drivers / net / nfp / nfpcore / nfp_cpp_pcie_ops.c
index 39bd48a..0b9db97 100644 (file)
@@ -16,7 +16,9 @@
 
 #include <assert.h>
 #include <stdio.h>
+#if defined(RTE_BACKTRACE)
 #include <execinfo.h>
+#endif
 #include <stdlib.h>
 #include <unistd.h>
 #include <stdint.h>
@@ -688,12 +690,16 @@ nfp_acquire_secondary_process_lock(struct nfp_pcie_user *desc)
        lockfile = calloc(strlen(home_path) + strlen(lockname) + 1,
                          sizeof(char));
 
+       if (!lockfile)
+               return -ENOMEM;
+
        strcat(lockfile, home_path);
        strcat(lockfile, "/.lock_nfp_secondary");
        desc->secondary_lock = open(lockfile, O_RDWR | O_CREAT | O_NONBLOCK,
                                    0666);
        if (desc->secondary_lock < 0) {
                RTE_LOG(ERR, PMD, "NFP lock for secondary process failed\n");
+               free(lockfile);
                return desc->secondary_lock;
        }
 
@@ -705,6 +711,7 @@ nfp_acquire_secondary_process_lock(struct nfp_pcie_user *desc)
                close(desc->secondary_lock);
        }
 
+       free(lockfile);
        return rc;
 }
 
@@ -863,24 +870,24 @@ nfp6000_init(struct nfp_cpp *cpp, struct rte_pci_device *dev)
            cpp->driver_lock_needed) {
                ret = nfp_acquire_process_lock(desc);
                if (ret)
-                       return -1;
+                       goto error;
        }
 
        /* Just support for one secondary process */
        if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
                ret = nfp_acquire_secondary_process_lock(desc);
                if (ret)
-                       return -1;
+                       goto error;
        }
 
        if (nfp6000_set_model(dev, cpp) < 0)
-               return -1;
+               goto error;
        if (nfp6000_set_interface(dev, cpp) < 0)
-               return -1;
+               goto error;
        if (nfp6000_set_serial(dev, cpp) < 0)
-               return -1;
+               goto error;
        if (nfp6000_set_barsz(dev, desc) < 0)
-               return -1;
+               goto error;
 
        desc->cfg = (char *)dev->mem_resource[0].addr;
 
@@ -888,7 +895,11 @@ nfp6000_init(struct nfp_cpp *cpp, struct rte_pci_device *dev)
 
        nfp_cpp_priv_set(cpp, desc);
 
-       return ret;
+       return 0;
+
+error:
+       free(desc);
+       return -1;
 }
 
 static void