I hope I send my questions in the right channel, if not please tell me where to send these questions.
I have a few questions about the ethernet driver for MT7621.
I noticed that there is a driver in the Linux kernel tree that differs from the one used in OpenWRT. My guess is that the OpenWRT one supports more of the functionality in the hardware bridge. What are the main differences between the two drivers?
I have a problem with dropped packet with driver in OpenWRT. The packet loss percentage is typically 0.3 %to 0.5% but much larger percentage is observed. It is observed on multiple devices. I notice that the strategy of allocating memory fragments seems to fail (it is the only place where the rx_dropped is increased.) . There are not much traffic going on and still I get the packet loss, the device is connected to a switch and the device is pinged 2 times / second, that's is all. Of Course there are spanning tree updates and other updates broadcasted from from the Cisco switch. I noticed that the OpenWRT driver implements more of the ring buffer management in the driver instead relying on the "standard" ring buffer management that is more commonly used in other Ethernet drivers. The Linux kernel implementation uses napi_alloc_frag instead of page_alloc_frag. From what I understand the napi_alloc_frag function uses ring buffers that are per CPU-Core. The driver in OpenWRT seems to not have ring buffers per CPU-Core, furthermore the driver does not protect the ring buffers access from multiple cores at once. Do you think that this might be problem?