Skip to content
  • Mauro Carvalho Chehab's avatar
    i7core_edac: Avoid PCI refcount to reach zero on successive load/reload · a3e15416
    Mauro Carvalho Chehab authored
    
    
    That's a nasty bug that took me a lot of time to track, and whose
    solution took just one line to solve. The best fragrances and the worse
    poisons are shipped on the smalest bottles.
    
    The drivers/pci/quick.c implements the pci_get_device function. The normal
    behavior is that you call it, the function returns you a pdev pointer
    and increment pdev->kobj.kref.refcount of the pci device. However,
    if you want to keep searching an object, you need to pass the previous
    pdev function to the search.
    
    When you use a not null pointer to pdev "from" field, pci_get_device
    will decrement pdev->kobj.kref.refcount, assuming that the driver won't
    be using the previous pdev.
    
    The solution is simple: we just need to call pci_dev_get() manually,
    for the pdev's that the driver will actually use.
    
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
    a3e15416