Nicolas Droux wrote: > [Bcc'ed driver-discuss at opensolaris.org and > networking-discuss at opensolaris.org] > > I am pleased to announce the availability of the first revision of the > "Crossbow APIs for Device Drivers" document, available at the following > location:
I recently ported a 10GbE driver to Crossbow. My driver currently has a single ring-group, and a configurable number of rings. The NIC hashes received traffic to the rings in hardware. I'm having a strange issue which I do not see in the non-crossbow version of the driver. When I run TCP benchmarks, I'm seeing what seems like packet loss. Specifically, netstat shows tcpInUnorderBytes and tcpInDupBytes increasing at a rapid rate, and bandwidth is terrible (~1Gb/s for crossbow, 7Gb/s non-crossbow on the same box with the same OS revision). The first thing I suspected was that packets were getting dropped due to my having the wrong generation number, but a dtrace probe doesn't show any drops there. Now I'm wondering if perhaps the interupt handler is in the middle of a call to mac_rx_ring() when interrupts are disabled. Am I supposed to ensure that my interrupt handler is not calling mac_rx_ring() before my rx_ring_intr_disable() routine returns? Or does the mac layer serialize this? Thanks, Drew
