luigirizzo / netmap

Automatically exported from code.google.com/p/netmap
BSD 2-Clause "Simplified" License
1.86k stars 537 forks source link

pkt-gen txseq issues with ixl #936

Open jcaplan opened 1 year ago

jcaplan commented 1 year ago

After setting hw.ixl.enable_head_writeback=0, I still see an issue with pkt-gen -f txseq where all packets are dropped. It looks like that the hw pointers are showing all slots are available but the user pointers are showing the ring is full. So poll is returning ready over and over again but then there are no available slots and I get stuck in this loop where the user pointers are never updated.

@@ -2117,6 +2118,7 @@ txseq_body(void *data)
                                break;
                        D("poll error on queue %d: %s", targ->me,
                                rv ? strerror(errno) : "timeout");
+                       continue
                        // goto quit;
                }
                if (pfd.revents & POLLERR) {
@@ -2129,6 +2131,11 @@ txseq_body(void *data)
                /* If no room poll() again. */
                space = nm_ring_space(ring);
                if (!space) {
+                       if (ioctl(pfd.fd, NIOCTXSYNC, NULL) < 0) {
+                               D("ioctl error on queue %d: %s", targ->me,
+                                       strerror(errno));
+                               goto quit;
+                       }
                        continue;
                }

similarly for sender_body.