On Sep 9 22:23, Francois Romieu wrote: > Corinna Vinschen <vinsc...@redhat.com> : > [...] > > diff --git a/drivers/net/ethernet/realtek/r8169.c > > b/drivers/net/ethernet/realtek/r8169.c > > index 24dcbe6..630811a 100644 > > --- a/drivers/net/ethernet/realtek/r8169.c > > +++ b/drivers/net/ethernet/realtek/r8169.c > [...] > > + if (!paddr) > > + return false; > > I guess this is the secret recipe.
Actually, no. I started out stress testing this combined with a printk to show if paddr can be NULL, but this never occurs. ndo_get_stats64 is apparently only called after registering the device, and this occurs after calling dma_alloc_coherent in rtl_init_one. Rather than removing the entire test, I acidentally only removed the printk. Sorry about that. > [...] > > @@ -8447,9 +8411,14 @@ static int rtl_init_one(struct pci_dev *pdev, const > > struct pci_device_id *ent) > > > > tp->rtl_fw = RTL_FIRMWARE_UNKNOWN; > > > > + tp->CntArray = dma_alloc_coherent (&pdev->dev, sizeof(*tp->CntArray), > > + &tp->CntPhysAddr, GFP_KERNEL); > > + if (!tp->CntArray) > > + goto err_out_cnt_4; > > + > > rc is still zero here so rtl_init_one will return success. Thanks for catching! I'm sending a fixed patch in a minute, removing the paddr test and setting rc to -ENOMEM if dma_alloc_coherent fails. Corinna
pgp_SzSXvSkJ2.pgp
Description: PGP signature