New upstream version 18.11-rc1
[deb_dpdk.git] / drivers / net / octeontx / octeontx_ethdev.c
index 0f3d5d6..0681486 100644 (file)
@@ -281,14 +281,6 @@ octeontx_dev_configure(struct rte_eth_dev *dev)
                return -EINVAL;
        }
 
-       /* KEEP_CRC offload flag is not supported by PMD
-        * can remove the below block when DEV_RX_OFFLOAD_CRC_STRIP removed
-        */
-       if (rte_eth_dev_must_keep_crc(rxmode->offloads)) {
-               PMD_INIT_LOG(NOTICE, "can't disable hw crc strip");
-               rxmode->offloads |= DEV_RX_OFFLOAD_CRC_STRIP;
-       }
-
        if (!(txmode->offloads & DEV_TX_OFFLOAD_MT_LOCKFREE)) {
                PMD_INIT_LOG(NOTICE, "cant disable lockfree tx");
                txmode->offloads |= DEV_TX_OFFLOAD_MT_LOCKFREE;
@@ -1023,12 +1015,22 @@ octeontx_create(struct rte_vdev_device *dev, int port, uint8_t evdev,
                return 0;
        }
 
+       /* Reserve an ethdev entry */
+       eth_dev = rte_eth_dev_allocate(octtx_name);
+       if (eth_dev == NULL) {
+               octeontx_log_err("failed to allocate rte_eth_dev");
+               res = -ENOMEM;
+               goto err;
+       }
+       data = eth_dev->data;
+
        nic = rte_zmalloc_socket(octtx_name, sizeof(*nic), 0, socket_id);
        if (nic == NULL) {
                octeontx_log_err("failed to allocate nic structure");
                res = -ENOMEM;
                goto err;
        }
+       data->dev_private = nic;
 
        nic->port_id = port;
        nic->evdev = evdev;
@@ -1045,21 +1047,11 @@ octeontx_create(struct rte_vdev_device *dev, int port, uint8_t evdev,
                goto err;
        }
 
-       /* Reserve an ethdev entry */
-       eth_dev = rte_eth_dev_allocate(octtx_name);
-       if (eth_dev == NULL) {
-               octeontx_log_err("failed to allocate rte_eth_dev");
-               res = -ENOMEM;
-               goto err;
-       }
-
        eth_dev->device = &dev->device;
        eth_dev->intr_handle = NULL;
        eth_dev->data->kdrv = RTE_KDRV_NONE;
        eth_dev->data->numa_node = dev->device.numa_node;
 
-       data = eth_dev->data;
-       data->dev_private = nic;
        data->port_id = eth_dev->data->port_id;
 
        nic->ev_queues = 1;
@@ -1111,12 +1103,7 @@ err:
        if (nic)
                octeontx_port_close(nic);
 
-       if (eth_dev != NULL) {
-               rte_free(eth_dev->data->mac_addrs);
-               rte_free(data);
-               rte_free(nic);
-               rte_eth_dev_release_port(eth_dev);
-       }
+       rte_eth_dev_release_port(eth_dev);
 
        return res;
 }
@@ -1141,16 +1128,22 @@ octeontx_remove(struct rte_vdev_device *dev)
                if (eth_dev == NULL)
                        return -ENODEV;
 
+               if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
+                       rte_eth_dev_release_port(eth_dev);
+                       continue;
+               }
+
                nic = octeontx_pmd_priv(eth_dev);
                rte_event_dev_stop(nic->evdev);
                PMD_INIT_LOG(INFO, "Closing octeontx device %s", octtx_name);
 
-               rte_free(eth_dev->data->mac_addrs);
-               rte_free(eth_dev->data->dev_private);
                rte_eth_dev_release_port(eth_dev);
                rte_event_dev_close(nic->evdev);
        }
 
+       if (rte_eal_process_type() != RTE_PROC_PRIMARY)
+               return 0;
+
        /* Free FC resource */
        octeontx_pko_fc_free();