pktio_entry already has a 'state' field, why not using that?

On 15/02/16 10:50, Matias Elo wrote:
Free/close open resources in odp_pktio_close().

Reviewed-by: Petri Savolainen <petri.savolai...@nokia.com>
Signed-off-by: Matias Elo <matias....@nokia.com>
---
  platform/linux-generic/include/odp_packet_dpdk.h |  1 +
  platform/linux-generic/pktio/dpdk.c              | 19 ++++++++++++++++++-
  2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/platform/linux-generic/include/odp_packet_dpdk.h 
b/platform/linux-generic/include/odp_packet_dpdk.h
index 9c8f7be..a085582 100644
--- a/platform/linux-generic/include/odp_packet_dpdk.h
+++ b/platform/linux-generic/include/odp_packet_dpdk.h
@@ -54,6 +54,7 @@ typedef struct {
        uint16_t mtu;                     /**< maximum transmission unit */
        /** DPDK packet pool name (pktpool_<ifname>) */
        char pool_name[IF_NAMESIZE + 8];
+       odp_bool_t started;               /**< DPDK device has been started */
        uint8_t port_id;                  /**< DPDK port identifier */
        unsigned min_rx_burst;            /**< minimum RX burst size */
        odp_pktin_hash_proto_t hash;      /**< Packet input hash protocol */
diff --git a/platform/linux-generic/pktio/dpdk.c 
b/platform/linux-generic/pktio/dpdk.c
index 1082c59..c81bb43 100644
--- a/platform/linux-generic/pktio/dpdk.c
+++ b/platform/linux-generic/pktio/dpdk.c
@@ -217,8 +217,23 @@ static int dpdk_setup_port(pktio_entry_t *pktio_entry)
        return 0;
  }

-static int dpdk_close(pktio_entry_t *pktio_entry ODP_UNUSED)
+static int dpdk_close(pktio_entry_t *pktio_entry)
  {
+       pkt_dpdk_t *pkt_dpdk = &pktio_entry->s.pkt_dpdk;
+       unsigned idx;
+       unsigned i, j;
+
+       /* Free cache packets */
+       for (i = 0; i < PKTIO_MAX_QUEUES; i++) {
+               idx = pkt_dpdk->rx_cache[i].s.idx;
+
+               for (j = 0; j < pkt_dpdk->rx_cache[i].s.count; j++)
+                       rte_pktmbuf_free(pkt_dpdk->rx_cache[i].s.pkt[idx++]);
+       }
+
+       if (pkt_dpdk->started)
+               rte_eth_dev_close(pkt_dpdk->port_id);
+
        return 0;
  }

@@ -515,6 +530,8 @@ static int dpdk_start(pktio_entry_t *pktio_entry)
                        ret, port_id);
                return -1;
        }
+       pkt_dpdk->started = 1;
+
        return 0;
  }


_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to