• Jacob Keller's avatar
    i40e: always return VEB stat strings · 9955d494
    Jacob Keller authored
    The ethtool API for obtaining device statistics is not intended to allow
    runtime changes in the number of statistics reported. It may *appear*
    this way, as there is an ability to request the number of stats using
    ethtool_get_set_count(). However, it is expected that this must always
    return the same value for invocations of the same device.
    
    If we don't satisfy this contract, and allow the number of stats to
    change during run time, we could cause invalid memory accesses or report
    the stat strings incorrectly. This is because the API for obtaining
    stats is to (1) get the size, (2) get the strings and finally (3) get
    the stats. Since these are each separate ethtool op commands, it is not
    possible to maintain consistency by holding the RTNL lock over the whole
    operation. This results in the potential for a race condition to occur
    where the size changed between any of the 3 calls.
    
    Avoid this issue by requiring that we always return the same value for
    a given device. We can check any values which remain constant for the
    life of the device, but must not report different sizes depending on
    runtime attributes.
    
    This patch specifically fixes the VEB statistics strings to always be
    reported. Other issues will be fixed in future patches.
    Signed-off-by: default avatarJacob Keller <jacob.e.keller@intel.com>
    Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
    Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
    9955d494
i40e_ethtool.c 142 KB