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
_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"

Reply via email to