Skip to contentSkip to conversation

net: dlink: fix multicast stats being counted incorrectly

PATCH Superseded Yeounsu Moon 2 participants 4 messages Aug 22, 2025 – Aug 23, 2025

Subsystems (2)

v2 of 3 Superseded Latest is v3 →

lore
Share & tools
lore
#0 lore raw

PATCH v2 1/1 net: dlink: fix multicast stats being counted incorrectly

McstFramesRcvdOk counts the number of received multicast packets, and it reports the value correctly.

However, reading McstFramesRcvdOk clears the register to zero. As a result, the driver was reporting only the packets since the last read, instead of the accumulated total.

Fix this by updating the multicast statistics accumulatively instaed of instantaneously.

Fixes 3401299a1b9e747cbf7de2cc0c8f6376c3cbe565 ("de6*/dl2k/sundance: Move the D-Link drivers")

Tested-on: D-Link DGE-550T Rev-A3

---
Changelog:
v1: https://lore.kernel.org/netdev/[email protected]/
v2:
- Change subject net-next to net.
- Add Fixes: tag.

---
 drivers/net/ethernet/dlink/dl2k.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/ethernet/dlink/dl2k.c +1 -1
index cc60ee454bf9..6bbf6e5584e5 100644
@@ -1099,7 +1099,7 @@ get_stats (struct net_device *dev)
 	dev->stats.rx_bytes += dr32(OctetRcvOk);
 	dev->stats.tx_bytes += dr32(OctetXmtOk);
 
-	dev->stats.multicast = dr32(McstFramesRcvdOk);
+	dev->stats.multicast += dr32(McstFramesRcvdOk);
 	dev->stats.collisions += dr32(SingleColFrames)
 			     +  dr32(MultiColFrames);
 
Signature · 1 line
2.50.1
#1 lore raw
Quoted 11 lines · Yeounsu Moon

McstFramesRcvdOk counts the number of received multicast packets, and it reports the value correctly.

However, reading McstFramesRcvdOk clears the register to zero. As a result, the driver was reporting only the packets since the last read, instead of the accumulated total.

Fix this by updating the multicast statistics accumulatively instaed of instantaneously.

Fixes 3401299a1b9e747cbf7de2cc0c8f6376c3cbe565 ("de6*/dl2k/sundance: Move the D-Link drivers")

The hash for fixes tends to be shorter than that.

Fixes 3401299a1b9e ("de6*/dl2k/sundance: Move the D-Link drivers")

If you add this to your .git/config

[pretty]

        fixes = Fixes: %h (\"%s\")

You can do

git log --pretty=fixes 3401299a1b9e747cbf7de2cc0c8f6376c3cbe565

Fixes 3401299a1b9e ("de6*/dl2k/sundance: Move the D-Link drivers")

This problem actually goes back further:

git blame 3401299a1b9e~1 drivers/net/dl2k.c

shows it was broken in the first commit in git.

So the correct Fixes: tag is:

Fixes 1da177e4c3f4 ("Linux-2.6.12-rc2")

Andrew

---
pw-bot: cr

#2 lore raw
Quoted 6 lines · Andrew Lunn

The hash for fixes tends to be shorter than that.

Fixes 3401299a1b9e ("de6*/dl2k/sundance: Move the D-Link drivers")

If you add this to your .git/config

Quoted 8 lines

[pretty]

        fixes = Fixes: %h (\"%s\")

You can do

git log --pretty=fixes 3401299a1b9e747cbf7de2cc0c8f6376c3cbe565

Fixes 3401299a1b9e ("de6*/dl2k/sundance: Move the D-Link drivers")

Thanks for pointing that out.

Quoted 10 lines

This problem actually goes back further:

git blame 3401299a1b9e~1 drivers/net/dl2k.c

shows it was broken in the first commit in git.

So the correct Fixes: tag is:

Fixes 1da177e4c3f4 ("Linux-2.6.12-rc2")

Regarding the Fixes: tag, I have one question. You suggested 1da177e4c3f4 ("Linux-2.6.12-rc2"), which is indeed the first commit in the current git history. However, the actual code change seems to go back further, and I found it in the history.git repository.

In such cases, should the Fixes: tag refer to the first commit in the mailine git tree, or to the actual commit in history.git where the bug originated?

#3 lore raw
Quoted 8 lines

Regarding the Fixes: tag, I have one question. You suggested 1da177e4c3f4 ("Linux-2.6.12-rc2"), which is indeed the first commit in the current git history. However, the actual code change seems to go back further, and I found it in the history.git repository.

In such cases, should the Fixes: tag refer to the first commit in the mailine git tree, or to the actual commit in history.git where the bug originated?

Nobody except historians care about history.git. In practice, nobody cares about 2.6 either. https://www.kernel.org/ shows that v5.4 is the oldest supported kernel. But Linux-2.6.12-rc2 is a convenient reference point, so that is what is used when it has always been broken in the git era.

Andrew