aboutsummaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
authorNicolas Morey-Chaisemartin <nmorey@kalray.eu>2015-09-02 10:25:38 +0200
committerMaxim Uvarov <maxim.uvarov@linaro.org>2015-09-08 14:07:05 +0300
commit45259bf4d4b0390d8baad03e942c0f49206643e6 (patch)
treeea6652dd194312bbae1c6629271e9d9d2f2af05e /platform
parent33112ca2d97b5ef4a05c23480205ae373039004d (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.c15
-rw-r--r--platform/linux-generic/pktio/loop.c27
-rw-r--r--platform/linux-generic/pktio/socket.c27
-rw-r--r--platform/linux-generic/pktio/socket_mmap.c27
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,