Skip to content
Permalink
Browse files

r8169: fix memory corruption on retrieval of hardware statistics.

Hardware statistics retrieval hurts in tight invocation loops.

Avoid extraneous write and enforce strict ordering of writes targeted to
the tally counters dump area address registers.

Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
Tested-by: Oliver Freyermuth <o.freyermuth@googlemail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Francois Romieu authored and davem330 committed Jan 26, 2018
1 parent f15ca72 commit a78e93661c5fd30b9e1dee464b2f62f966883ef7
Showing with 2 additions and 7 deletions.
  1. +2 −7 drivers/net/ethernet/realtek/r8169.c
@@ -2244,19 +2244,14 @@ static bool rtl8169_do_counters(struct net_device *dev, u32 counter_cmd)
void __iomem *ioaddr = tp->mmio_addr;
dma_addr_t paddr = tp->counters_phys_addr;
u32 cmd;
bool ret;

RTL_W32(CounterAddrHigh, (u64)paddr >> 32);
RTL_R32(CounterAddrHigh);
cmd = (u64)paddr & DMA_BIT_MASK(32);
RTL_W32(CounterAddrLow, cmd);
RTL_W32(CounterAddrLow, cmd | counter_cmd);

ret = rtl_udelay_loop_wait_low(tp, &rtl_counters_cond, 10, 1000);

RTL_W32(CounterAddrLow, 0);
RTL_W32(CounterAddrHigh, 0);

return ret;
return rtl_udelay_loop_wait_low(tp, &rtl_counters_cond, 10, 1000);
}

static bool rtl8169_reset_counters(struct net_device *dev)

0 comments on commit a78e936

Please sign in to comment.
You can’t perform that action at this time.