diff options
author | Nicolas Morey-Chaisemartin <nmorey@kalray.eu> | 2015-09-02 10:25:38 +0200 |
---|---|---|
committer | Maxim Uvarov <maxim.uvarov@linaro.org> | 2015-09-08 14:07:05 +0300 |
commit | 45259bf4d4b0390d8baad03e942c0f49206643e6 (patch) | |
tree | ea6652dd194312bbae1c6629271e9d9d2f2af05e /platform | |
parent | 33112ca2d97b5ef4a05c23480205ae373039004d (diff) |
linux-generic: pktio: factor state management into packet_io
Actual check/changes of the pktio state is now done by the pktio
global interface.
Each pktio can still implement a start/stop function to do additional
actions.
Signed-off-by: Nicolas Morey-Chaisemartin <nmorey@kalray.eu>
Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
Diffstat (limited to 'platform')
-rw-r--r-- | platform/linux-generic/odp_packet_io.c | 15 | ||||
-rw-r--r-- | platform/linux-generic/pktio/loop.c | 27 | ||||
-rw-r--r-- | platform/linux-generic/pktio/socket.c | 27 | ||||
-rw-r--r-- | platform/linux-generic/pktio/socket_mmap.c | 27 |
4 files changed, 21 insertions, 75 deletions
diff --git a/platform/linux-generic/odp_packet_io.c b/platform/linux-generic/odp_packet_io.c index 4e07766..d724933 100644 --- a/platform/linux-generic/odp_packet_io.c +++ b/platform/linux-generic/odp_packet_io.c @@ -240,6 +240,7 @@ static odp_pktio_t setup_pktio_entry(const char *dev, odp_pool_t pool, ODP_ERR("Unable to init any I/O type.\n"); } else { snprintf(pktio_entry->s.name, IF_NAMESIZE, "%s", dev); + pktio_entry->s.state = STATE_STOP; unlock_entry_classifier(pktio_entry); } @@ -301,6 +302,8 @@ int odp_pktio_start(odp_pktio_t id) lock_entry(entry); if (entry->s.ops->start) res = entry->s.ops->start(entry); + if (!res) + entry->s.state = STATE_START; unlock_entry(entry); return res; @@ -318,6 +321,8 @@ int odp_pktio_stop(odp_pktio_t id) lock_entry(entry); if (entry->s.ops->stop) res = entry->s.ops->stop(entry); + if (!res) + entry->s.state = STATE_STOP; unlock_entry(entry); return res; @@ -365,6 +370,11 @@ int odp_pktio_recv(odp_pktio_t id, odp_packet_t pkt_table[], int len) return -1; lock_entry(pktio_entry); + if (pktio_entry->s.state == STATE_STOP) { + unlock_entry(pktio_entry); + __odp_errno = EPERM; + return -1; + } pkts = pktio_entry->s.ops->recv(pktio_entry, pkt_table, len); unlock_entry(pktio_entry); @@ -386,6 +396,11 @@ int odp_pktio_send(odp_pktio_t id, odp_packet_t pkt_table[], int len) return -1; lock_entry(pktio_entry); + if (pktio_entry->s.state == STATE_STOP) { + unlock_entry(pktio_entry); + __odp_errno = EPERM; + return -1; + } pkts = pktio_entry->s.ops->send(pktio_entry, pkt_table, len); unlock_entry(pktio_entry); diff --git a/platform/linux-generic/pktio/loop.c b/platform/linux-generic/pktio/loop.c index 91c552b..22f0475 100644 --- a/platform/linux-generic/pktio/loop.c +++ b/platform/linux-generic/pktio/loop.c @@ -41,7 +41,6 @@ static int loopback_open(odp_pktio_t id, pktio_entry_t *pktio_entry, if (pktio_entry->s.pkt_loop.loopq == ODP_QUEUE_INVALID) return -1; - pktio_entry->s.state = STATE_STOP; return 0; } @@ -57,11 +56,6 @@ static int loopback_recv(pktio_entry_t *pktio_entry, odp_packet_t pkts[], odp_buffer_hdr_t *hdr_tbl[QUEUE_MULTI_MAX]; queue_entry_t *qentry; - if (pktio_entry->s.state == STATE_STOP) { - __odp_errno = EPERM; - return -1; - } - qentry = queue_to_qentry(pktio_entry->s.pkt_loop.loopq); nbr = queue_deq_multi(qentry, hdr_tbl, len); @@ -80,11 +74,6 @@ static int loopback_send(pktio_entry_t *pktio_entry, odp_packet_t pkt_tbl[], queue_entry_t *qentry; unsigned i; - if (pktio_entry->s.state == STATE_STOP) { - __odp_errno = EPERM; - return -1; - } - for (i = 0; i < len; ++i) hdr_tbl[i] = odp_buf_to_hdr(_odp_packet_to_buffer(pkt_tbl[i])); @@ -116,25 +105,13 @@ static int loopback_promisc_mode_get(pktio_entry_t *pktio_entry) return pktio_entry->s.pkt_loop.promisc ? 1 : 0; } -static int loopback_start(pktio_entry_t *pktio_entry) -{ - pktio_entry->s.state = STATE_START; - return 0; -} - -static int loopback_stop(pktio_entry_t *pktio_entry) -{ - pktio_entry->s.state = STATE_STOP; - return 0; -} - const pktio_if_ops_t loopback_pktio_ops = { .init = NULL, .term = NULL, .open = loopback_open, .close = loopback_close, - .start = loopback_start, - .stop = loopback_stop, + .start = NULL, + .stop = NULL, .recv = loopback_recv, .send = loopback_send, .mtu_get = loopback_mtu_get, diff --git a/platform/linux-generic/pktio/socket.c b/platform/linux-generic/pktio/socket.c index 6fcdb46..7a40cd9 100644 --- a/platform/linux-generic/pktio/socket.c +++ b/platform/linux-generic/pktio/socket.c @@ -234,7 +234,6 @@ static int sock_setup_pkt(pktio_entry_t *pktio_entry, const char *netdev, goto error; } - pktio_entry->s.state = STATE_STOP; return 0; error: @@ -297,11 +296,6 @@ static int sock_mmsg_recv(pktio_entry_t *pktio_entry, int recv_msgs; int i; - if (pktio_entry->s.state == STATE_STOP) { - __odp_errno = EPERM; - return -1; - } - if (odp_unlikely(len > ODP_PACKET_SOCKET_MAX_BURST_RX)) return -1; @@ -383,11 +377,6 @@ static int sock_mmsg_send(pktio_entry_t *pktio_entry, unsigned sent_msgs = 0; unsigned flags; - if (pktio_entry->s.state == STATE_STOP) { - __odp_errno = EPERM; - return -1; - } - if (odp_unlikely(len > ODP_PACKET_SOCKET_MAX_BURST_TX)) return -1; @@ -450,25 +439,13 @@ static int sock_promisc_mode_get(pktio_entry_t *pktio_entry) pktio_entry->s.name); } -static int sock_start(pktio_entry_t *pktio_entry) -{ - pktio_entry->s.state = STATE_START; - return 0; -} - -static int sock_stop(pktio_entry_t *pktio_entry) -{ - pktio_entry->s.state = STATE_STOP; - return 0; -} - const pktio_if_ops_t sock_mmsg_pktio_ops = { .init = NULL, .term = NULL, .open = sock_mmsg_open, .close = sock_close, - .start = sock_start, - .stop = sock_stop, + .start = NULL, + .stop = NULL, .recv = sock_mmsg_recv, .send = sock_mmsg_send, .mtu_get = sock_mtu_get, diff --git a/platform/linux-generic/pktio/socket_mmap.c b/platform/linux-generic/pktio/socket_mmap.c index 3fd2b0f..39b258b 100644 --- a/platform/linux-generic/pktio/socket_mmap.c +++ b/platform/linux-generic/pktio/socket_mmap.c @@ -486,7 +486,6 @@ static int sock_mmap_open(odp_pktio_t id ODP_UNUSED, goto error; } - pktio_entry->s.state = STATE_STOP; return 0; error: @@ -499,11 +498,6 @@ static int sock_mmap_recv(pktio_entry_t *pktio_entry, { pkt_sock_mmap_t *const pkt_sock = &pktio_entry->s.pkt_sock_mmap; - if (pktio_entry->s.state == STATE_STOP) { - __odp_errno = EPERM; - return -1; - } - return pkt_mmap_v2_rx(pkt_sock->rx_ring.sock, &pkt_sock->rx_ring, pkt_table, len, pkt_sock->pool, pkt_sock->if_mac); @@ -514,11 +508,6 @@ static int sock_mmap_send(pktio_entry_t *pktio_entry, { pkt_sock_mmap_t *const pkt_sock = &pktio_entry->s.pkt_sock_mmap; - if (pktio_entry->s.state == STATE_STOP) { - __odp_errno = EPERM; - return -1; - } - return pkt_mmap_v2_tx(pkt_sock->tx_ring.sock, &pkt_sock->tx_ring, pkt_table, len); } @@ -548,25 +537,13 @@ static int sock_mmap_promisc_mode_get(pktio_entry_t *pktio_entry) pktio_entry->s.name); } -static int sock_mmap_start(pktio_entry_t *pktio_entry) -{ - pktio_entry->s.state = STATE_START; - return 0; -} - -static int sock_mmap_stop(pktio_entry_t *pktio_entry) -{ - pktio_entry->s.state = STATE_STOP; - return 0; -} - const pktio_if_ops_t sock_mmap_pktio_ops = { .init = NULL, .term = NULL, .open = sock_mmap_open, .close = sock_mmap_close, - .start = sock_mmap_start, - .stop = sock_mmap_stop, + .start = NULL, + .stop = NULL, .recv = sock_mmap_recv, .send = sock_mmap_send, .mtu_get = sock_mmap_mtu_get, |