> -----Original Message----- > From: EXT Zoltan Kiss [mailto:[email protected]] > Sent: Wednesday, February 24, 2016 9:10 PM > To: Elo, Matias (Nokia - FI/Espoo) <[email protected]>; lng- > [email protected] > Subject: Re: [lng-odp] [API-NEXT PATCH v4 13/13] linux-generic: dpdk: close > resources in odp_pktio_close() > > > > On 24/02/16 07:36, Elo, Matias (Nokia - FI/Espoo) wrote: > >> -----Original Message----- > >> From: EXT Zoltan Kiss [mailto:[email protected]] > >> Sent: Friday, February 19, 2016 6:15 PM > >> To: Elo, Matias (Nokia - FI/Espoo) <[email protected]>; lng- > >> [email protected] > >> Subject: Re: [lng-odp] [API-NEXT PATCH v4 13/13] linux-generic: dpdk: close > >> resources in odp_pktio_close() > >> > >> pktio_entry already has a 'state' field, why not using that? > >> > > > > Sorry for the slow reply. The state field in pktio_entry is modified > > outside dpdk > pktio code, so it cannot be used to track if rte_eth_dev_start() has been > actually > called. If rte_eth_dev_start() has not been called, rte_eth_dev_close() cannot > be used in dpdk_close(). > > "state" is set to STATE_START only if rte_eth_dev_start() succeeded (and > everything else), and the stop function will call rte_eth_dev_close() > only if "state" is STATE_START. I think it's good enough for tracking >
It is not the stop() function, which is calling rte_eth_dev_close(). It is close(). And because close() can be called only on a stopped interface the "state" variable cannot be used to check if the interface has been started. -Matias > > > > -Matias > > > >> On 15/02/16 10:50, Matias Elo wrote: > >>> Free/close open resources in odp_pktio_close(). > >>> > >>> Reviewed-by: Petri Savolainen <[email protected]> > >>> Signed-off-by: Matias Elo <[email protected]> > >>> --- > >>> 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 [email protected] https://lists.linaro.org/mailman/listinfo/lng-odp
