• Hariprasad Shenai's avatar
    cxgb4vf: Synchronize access to mailbox · b38066da
    Hariprasad Shenai authored
    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: default avatarHariprasad Shenai <hariprasad@chelsio.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    b38066da
cxgb4vf_main.c 86.1 KB