diff options
| author | timothee.cocault@gmail.com <timothee.cocault@gmail.com> | 2023-04-10 17:27:48 +0200 |
|---|---|---|
| committer | Jason Wang <jasowang@redhat.com> | 2023-05-23 15:20:15 +0800 |
| commit | 8d689f6aae8be096b4a1859be07c1b083865f755 (patch) | |
| tree | b1eee1ce80c71d1883ab43680684dcb03d674f30 /hw/net/e1000x_common.c | |
| parent | 886c0453cbf10eebd42a9ccf89c3e46eb389c357 (diff) | |
| download | focaccia-qemu-8d689f6aae8be096b4a1859be07c1b083865f755.tar.gz focaccia-qemu-8d689f6aae8be096b4a1859be07c1b083865f755.zip | |
e1000e: Fix tx/rx counters
The bytes and packets counter registers are cleared on read. Copying the "total counter" registers to the "good counter" registers has side effects. If the "total" register is never read by the OS, it only gets incremented. This leads to exponential growth of the "good" register. This commit increments the counters individually to avoid this. Signed-off-by: Timothée Cocault <timothee.cocault@gmail.com> Signed-off-by: Jason Wang <jasowang@redhat.com>
Diffstat (limited to 'hw/net/e1000x_common.c')
| -rw-r--r-- | hw/net/e1000x_common.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/hw/net/e1000x_common.c b/hw/net/e1000x_common.c index b844af590a..4c8e7dcf70 100644 --- a/hw/net/e1000x_common.c +++ b/hw/net/e1000x_common.c @@ -220,15 +220,14 @@ e1000x_update_rx_total_stats(uint32_t *mac, e1000x_increase_size_stats(mac, PRCregs, data_fcs_size); e1000x_inc_reg_if_not_full(mac, TPR); - mac[GPRC] = mac[TPR]; + e1000x_inc_reg_if_not_full(mac, GPRC); /* TOR - Total Octets Received: * This register includes bytes received in a packet from the <Destination * Address> field through the <CRC> field, inclusively. * Always include FCS length (4) in size. */ e1000x_grow_8reg_if_not_full(mac, TORL, data_size + 4); - mac[GORCL] = mac[TORL]; - mac[GORCH] = mac[TORH]; + e1000x_grow_8reg_if_not_full(mac, GORCL, data_size + 4); } void |