diff options
author | Zoltan Kiss <zoltan.kiss@linaro.org> | 2015-12-09 18:24:08 +0000 |
---|---|---|
committer | Zoltan Kiss <zoltan.kiss@linaro.org> | 2015-12-09 18:24:08 +0000 |
commit | 05f880c9f71e617bdf8fe91b9caa8c08d8918f39 (patch) | |
tree | 1c7c00d3442767329c86d5f3c97a6084f52fab6d /platform/linux-dpdk | |
parent | b0c8cca3ddfe1c63d6e450580955764f7fc122ac (diff) |
linux-dpdk: pktio: check for pktio_start when started and pktio_stop when stopped
DPDK checks that too but it doesn't return an error, so we should maintain the
status too.
Signed-off-by: Zoltan Kiss <zoltan.kiss@linaro.org>
Diffstat (limited to 'platform/linux-dpdk')
-rw-r--r-- | platform/linux-dpdk/include/odp_packet_io_internal.h | 4 | ||||
-rw-r--r-- | platform/linux-dpdk/odp_packet_io.c | 8 |
2 files changed, 12 insertions, 0 deletions
diff --git a/platform/linux-dpdk/include/odp_packet_io_internal.h b/platform/linux-dpdk/include/odp_packet_io_internal.h index dffc556d0..2d8aae1d7 100644 --- a/platform/linux-dpdk/include/odp_packet_io_internal.h +++ b/platform/linux-dpdk/include/odp_packet_io_internal.h @@ -50,6 +50,10 @@ struct pktio_entry { odp_queue_t loopq; /**< loopback queue for "loop" device */ odp_pktio_type_t type; /**< pktio type */ pkt_dpdk_t pkt_dpdk; /**< using DPDK API for IO */ + enum { + STATE_START = 0, + STATE_STOP + } state; classifier_t cls; /**< classifier linked with this pktio*/ char name[IFNAMSIZ]; /**< name of pktio provided to pktio_open() */ diff --git a/platform/linux-dpdk/odp_packet_io.c b/platform/linux-dpdk/odp_packet_io.c index 4fc717d6b..6625fd9d8 100644 --- a/platform/linux-dpdk/odp_packet_io.c +++ b/platform/linux-dpdk/odp_packet_io.c @@ -236,6 +236,7 @@ odp_pktio_t odp_pktio_open(const char *dev, odp_pool_t pool, pktio_entry->s.handle = id; odp_ticketlock_init(&pktio_entry->s.rxl); odp_ticketlock_init(&pktio_entry->s.txl); + pktio_entry->s.state = STATE_STOP; unlock_entry(pktio_entry); /*unlock_entry_classifier(pktio_entry);*/ @@ -953,6 +954,10 @@ int odp_pktio_start(odp_pktio_t id) return -1; } + if (pktio_entry->s.state == STATE_START) + return -1; + pktio_entry->s.state = STATE_START; + ret = rte_eth_dev_start(pktio_entry->s.pkt_dpdk.portid); if (ret < 0) { ODP_ERR("rte_eth_dev_start:err=%d, port=%u\n", @@ -970,6 +975,9 @@ int odp_pktio_stop(odp_pktio_t id) ODP_ERR("No pktio found!\n"); return -1; } + if (pktio_entry->s.state == STATE_STOP) + return -1; + pktio_entry->s.state = STATE_STOP; rte_eth_dev_stop(pktio_entry->s.pkt_dpdk.portid); return 0; } |