From: Hariprasad Shenai <haripra...@chelsio.com> Date: Wed, 22 Jun 2016 09:39:29 +0530
> The issue comes when there are multiple threads attempting to use the > mailbox facility at the same time. The issue is the for the Virtual > Function Driver, the only way to get the Virtual Interface statistics > is to issue mailbox commands to ask the firmware for the VI Stats. > And, because the VI Stats command can only retrieve a smallish number of > stats per mailbox command, we have to issue three mailbox commands in quick > succession. When ethtool or netstat command to get interface stats and > interface up/down is run in a loop for every 0.1 sec, we observed > mailbox collisions. And out of the two commands one would fail with > the present code, since we don't queue the second command. > > To overcome the above issue, added a queue to access the mailbox. > Whenever a mailbox command is issued add it to the queue. If its at the > head issue the mailbox command, else wait for the existing command to > complete. Usually command takes less than a milli-second to complete. > Also timeout from the loop, if the command under execution takes > long time to run. > > In reality, the number of mailbox access collisions is going to be very > rare since no one runs such abusive script. > > Signed-off-by: Hariprasad Shenai <haripra...@chelsio.com> Applied.