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;
}
After setting
hw.ixl.enable_head_writeback=0
, I still see an issue withpkt-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.similarly for
sender_body
.