Dropped vs. missed packets in the ixgbe driver
Jack Vogel
jfvogel at gmail.com
Sat Sep 5 18:10:42 UTC 2009
Sigh, yes, you're right, I will get this corrected after the holiday
weekend.
Thanks,
Jack
On Sat, Sep 5, 2009 at 10:45 AM, Dmitrij Tejblum <tejblum at yandex-team.ru>wrote:
> Jack,
>
> The code you committed does not look right with respect to missed packets
> counting:
>
>
> for (int i = 0; i < 8; i++) {
> /* missed_rx tallies misses for the gprc workaround */
> missed_rx += IXGBE_READ_REG(hw, IXGBE_MPC(i));
> adapter->stats.mpc[i] += missed_rx;
> /* Running comprehensive total for stats display */
> total_missed_rx += adapter->stats.mpc[i];
> if (hw->mac.type == ixgbe_mac_82598EB)
> adapter->stats.rnbc[i] +=
> IXGBE_READ_REG(hw, IXGBE_RNBC(i));
> }
>
> You see, the value of the MPC(0) register also added to mpc[1], mpc[2], ...
> mpc[7], and thus gets added to total_missed_rx 8 times. The MPC(1) register
> gets added to total_missed_rx 7 times, and so on.
>
>
> I would suggest something like this:
>
> for (int i = 0; i < 8; i++) {
> u32 mp;
> mp = IXGBE_READ_REG(hw, IXGBE_MPC(i));
> /* missed_rx tallies misses for the gprc workaround */
> missed_rx += mp;
> adapter->stats.mpc[i] += mp;
> /* Running comprehensive total for stats display */
> total_missed_rx += adapter->stats.mpc[i];
> if (hw->mac.type == ixgbe_mac_82598EB)
> adapter->stats.rnbc[i] +=
> IXGBE_READ_REG(hw, IXGBE_RNBC(i));
> }
>
> Also, there was PR kern/127834 on this issue, that should be closed as the
> issue fixed.
>
>
>
>
> --
> Dima
>
More information about the freebsd-net
mailing list