Hi, I'm still unable to reproduce the problem. Have you tried reloading the netmap kernel module and driver?
I rebased the particular two patches to the HEAD and this is the output from the pktio validation test: $ sudo ODP_PKTIO_IF0=em49 ODP_PKTIO_IF1=em50 ./test/validation/pktio/pktio_main odp_pool.c:102:odp_pool_init_global(): Pool init global odp_pool.c:103:odp_pool_init_global(): pool_entry_s size 320 odp_pool.c:104:odp_pool_init_global(): pool_entry_t size 320 odp_pool.c:105:odp_pool_init_global(): odp_buffer_hdr_t size 160 odp_pool.c:106:odp_pool_init_global(): odp_queue.c:109:odp_queue_init_global():Queue init ... odp_queue.c:131:odp_queue_init_global():done odp_queue.c:132:odp_queue_init_global():Queue init global odp_queue.c:134:odp_queue_init_global(): struct queue_entry_s size 256 odp_queue.c:136:odp_queue_init_global(): queue_entry_t size 256 odp_queue.c:137:odp_queue_init_global(): odp_schedule.c:122:odp_schedule_init_global():Schedule init ... odp_schedule.c:187:odp_schedule_init_global():done ODP API version: 1.3.0 ODP implementation version: linux-generic 1.3.0-0 (v1.3.0) Oct 21 2015 09:14:07 'https://git.linaro.org/lng/odp.git' (v1.3.0.0-46-ge4a5493-dirty) CUnit - A unit testing framework for C - Version 2.1-3 http://cunit.sourceforge.net/ Using paired interfaces: em49 em50 Suite: Packet I/O Unsegmented Test: pktio_test_open ...080.753804 nm_open [839] NIOCREGIF failed: No such device or address nothere 080.753826 nm_open [839] NIOCREGIF failed: No such device or address nothere pktio/netmap.c:145:netmap_open():nm_open(netmap:nothere) failed pktio/socket.c:107:mac_addr_get_fd():ioctl(SIOCGIFHWADDR): No such device: "nothere". pktio/socket.c:237:sock_setup_pkt():ioctl(SIOCGIFINDEX): No such device: "nothere". odp_packet_io.c:240:setup_pktio_entry():Unable to init any I/O type. passed Test: pktio_test_lookup ...passed Test: pktio_test_inq ...passed Test: pktio_test_poll_queue ...passed Test: pktio_test_poll_multi ...passed Test: pktio_test_sched_queue ...passed Test: pktio_test_sched_multi ...passed Test: pktio_test_jumbo ...FAILED 1. pktio.c:384 - CU_FAIL("failed to receive transmitted packet") 2. pktio.c:450 - i == num_pkts Test: pktio_test_mtu ... 1500 passed Test: pktio_test_promisc ...passed Test: pktio_test_mac ...testing mac for em49 5C:B9:1:89:88:8 passed Test: pktio_test_inq_remdef ...passed Test: pktio_test_start_stop ...FAILED 1. pktio.c:775 - pkts == allocUsing paired interfaces: em49 em50 Suite: Packet I/O Segmented Test: pktio_test_poll_queue ...passed Test: pktio_test_poll_multi ...passed Test: pktio_test_sched_queue ...passed Test: pktio_test_sched_multi ...passed Test: pktio_test_jumbo ...FAILED 1. pktio.c:384 - CU_FAIL("failed to receive transmitted packet") 2. pktio.c:450 - i == num_pkts Run Summary: Type Total Ran Passed Failed Inactive suites 2 2 n/a 0 0 tests 18 18 15 3 0 asserts 296 296 291 5 n/a Elapsed time = 8.793 seconds -Matias > -----Original Message----- > From: EXT Stuart Haslam [mailto:stuart.has...@linaro.org] > Sent: Tuesday, October 20, 2015 7:37 PM > To: Elo, Matias (Nokia - FI/Espoo) <matias....@nokia.com> > Cc: lng-odp@lists.linaro.org > Subject: Re: [lng-odp] [PATCH 2/2] linux-generic: netmap: use separate rx and > tx > descriptors > > On Tue, Oct 20, 2015 at 02:20:05PM +0000, Elo, Matias (Nokia - FI/Espoo) > wrote: > > > -----Original Message----- > > > From: EXT Stuart Haslam [mailto:stuart.has...@linaro.org] > > > Sent: Tuesday, October 20, 2015 3:29 PM > > > To: Elo, Matias (Nokia - FI/Espoo) <matias....@nokia.com> > > > Cc: lng-odp@lists.linaro.org > > > Subject: Re: [lng-odp] [PATCH 2/2] linux-generic: netmap: use separate rx > > > and > tx > > > descriptors > > > > > > On Fri, Oct 16, 2015 at 03:45:50PM +0300, Matias Elo wrote: > > > > Using separate file descriptors enables using rx and tx > > > > functions simultaneously from different threads. > > > > > > > > Previously netmap tx queues were flushed only after no free > > > > slots were left which caused long delays on slow packet > > > > rates. Now queues are flushed after each packet > > > > burst. > > > > > > This isn't working for me. Same setup as earlier and I get similar > > > results. I've tried adding a NIOCTXSYNC on send and a NIOCRXSYNC on recv > > > but it didn't seem to help. I'll look further to figure out if it's the > > > rx or tx side that's not working. > > > > > > > If you use e.g. ethtool, is the link between your nic ports detected? > > Yes, the link state check in odp_pktio_open() is detecting the link too. > > > I'm wondering if the problem is related to directly connecting two netmap > > ports > on the same host. > > > > Possibly, although the same setup works fine on HEAD just with > NETMAP_NO_TX_POLL removed - not suggesting this as a fix, but it > seems to indicate my setup is alright. > > > -Matias > > > > > -- > > > Stuart. > > > > > > > Signed-off-by: Matias Elo <matias....@nokia.com> > > > > --- > > > > platform/linux-generic/include/odp_packet_netmap.h | 3 ++- > > > > platform/linux-generic/pktio/netmap.c | 29 > > > > ++++++++++++++-------- > > > > 2 files changed, 21 insertions(+), 11 deletions(-) > > > > > > > > diff --git a/platform/linux-generic/include/odp_packet_netmap.h > > > b/platform/linux-generic/include/odp_packet_netmap.h > > > > index 23aea5b..0577dfe 100644 > > > > --- a/platform/linux-generic/include/odp_packet_netmap.h > > > > +++ b/platform/linux-generic/include/odp_packet_netmap.h > > > > @@ -15,7 +15,8 @@ > > > > typedef struct { > > > > odp_pool_t pool; /**< pool to alloc packets from > > > > */ > > > > size_t max_frame_len; /**< buf_size - sizeof(pkt_hdr) > > > > */ > > > > - struct nm_desc *desc; /**< netmap meta-data for the > > > > device */ > > > > + struct nm_desc *rx_desc; /**< netmap meta-data for the > > > > device */ > > > > + struct nm_desc *tx_desc; /**< netmap meta-data for the > > > > device */ > > > > uint32_t if_flags; /**< interface flags */ > > > > int sockfd; /**< control socket */ > > > > unsigned char if_mac[ETH_ALEN]; /**< eth mac address */ > > > > diff --git a/platform/linux-generic/pktio/netmap.c b/platform/linux- > > > generic/pktio/netmap.c > > > > index 0c9ad35..9ad6a22 100644 > > > > --- a/platform/linux-generic/pktio/netmap.c > > > > +++ b/platform/linux-generic/pktio/netmap.c > > > > @@ -89,10 +89,13 @@ static int netmap_close(pktio_entry_t *pktio_entry) > > > > { > > > > pkt_netmap_t *pkt_nm = &pktio_entry->s.pkt_nm; > > > > > > > > - if (pkt_nm->desc != NULL) { > > > > - nm_close(pkt_nm->desc); > > > > + if (pkt_nm->rx_desc != NULL) { > > > > + nm_close(pkt_nm->rx_desc); > > > > mmap_desc.mem = NULL; > > > > } > > > > + if (pkt_nm->tx_desc != NULL) > > > > + nm_close(pkt_nm->tx_desc); > > > > + > > > > if (pkt_nm->sockfd != -1 && close(pkt_nm->sockfd) != 0) { > > > > __odp_errno = errno; > > > > ODP_ERR("close(sockfd): %s\n", strerror(errno)); > > > > @@ -131,18 +134,21 @@ static int netmap_open(odp_pktio_t id > > > ODP_UNUSED, pktio_entry_t *pktio_entry, > > > > snprintf(ifname, sizeof(ifname), "netmap:%s", netdev); > > > > > > > > if (mmap_desc.mem == NULL) > > > > - pkt_nm->desc = nm_open(ifname, NULL, > > > NETMAP_NO_TX_POLL, NULL); > > > > + pkt_nm->rx_desc = nm_open(ifname, NULL, > > > NETMAP_NO_TX_POLL, > > > > + NULL); > > > > else > > > > - pkt_nm->desc = nm_open(ifname, NULL, NETMAP_NO_TX_POLL > > > | > > > > - NM_OPEN_NO_MMAP, &mmap_desc); > > > > - if (pkt_nm->desc == NULL) { > > > > + pkt_nm->rx_desc = nm_open(ifname, NULL, > > > NETMAP_NO_TX_POLL | > > > > + NM_OPEN_NO_MMAP, &mmap_desc); > > > > + pkt_nm->tx_desc = nm_open(ifname, NULL, NM_OPEN_NO_MMAP, > > > &mmap_desc); > > > > + > > > > + if (pkt_nm->rx_desc == NULL || pkt_nm->tx_desc == NULL) { > > > > ODP_ERR("nm_open(%s) failed\n", ifname); > > > > goto error; > > > > } > > > > > > > > if (mmap_desc.mem == NULL) { > > > > - mmap_desc.mem = pkt_nm->desc->mem; > > > > - mmap_desc.memsize = pkt_nm->desc->memsize; > > > > + mmap_desc.mem = pkt_nm->rx_desc->mem; > > > > + mmap_desc.memsize = pkt_nm->rx_desc->memsize; > > > > } > > > > > > > > sockfd = socket(AF_INET, SOCK_DGRAM, 0); > > > > @@ -215,7 +221,7 @@ static int netmap_recv(pktio_entry_t *pktio_entry, > > > odp_packet_t pkt_table[], > > > > unsigned num) > > > > { > > > > struct dispatch_args args; > > > > - struct nm_desc *nm_desc = pktio_entry->s.pkt_nm.desc; > > > > + struct nm_desc *nm_desc = pktio_entry->s.pkt_nm.rx_desc; > > > > struct pollfd polld; > > > > > > > > polld.fd = nm_desc->fd; > > > > @@ -236,8 +242,8 @@ static int netmap_recv(pktio_entry_t *pktio_entry, > > > odp_packet_t pkt_table[], > > > > static int netmap_send(pktio_entry_t *pktio_entry, odp_packet_t > pkt_table[], > > > > unsigned num) > > > > { > > > > - struct nm_desc *nm_desc = pktio_entry->s.pkt_nm.desc; > > > > struct pollfd polld; > > > > + struct nm_desc *nm_desc = pktio_entry->s.pkt_nm.tx_desc; > > > > unsigned i, nb_tx; > > > > uint8_t *frame; > > > > uint32_t frame_len; > > > > @@ -259,6 +265,9 @@ static int netmap_send(pktio_entry_t *pktio_entry, > > > odp_packet_t pkt_table[], > > > > break; > > > > } > > > > } > > > > + /* Send pending packets */ > > > > + poll(&polld, 1, 0); > > > > + > > > > for (i = 0; i < nb_tx; i++) > > > > odp_packet_free(pkt_table[i]); > > > > > > > > -- > > > > 1.9.1 _______________________________________________ lng-odp mailing list lng-odp@lists.linaro.org https://lists.linaro.org/mailman/listinfo/lng-odp