• Vladimir Oltean's avatar
    net: enetc: teardown CBDR during PF/VF unbind · c54f042d
    Vladimir Oltean authored
    Michael reports that after the blamed patch, unbinding a VF would cause
    these transactions to remain pending, and trigger some warnings with the
    DMA API debug:
    
    $ echo 1 > /sys/bus/pci/devices/0000\:00\:00.0/sriov_numvfs
    pci 0000:00:01.0: [1957:ef00] type 00 class 0x020001
    fsl_enetc_vf 0000:00:01.0: Adding to iommu group 19
    fsl_enetc_vf 0000:00:01.0: enabling device (0000 -> 0002)
    fsl_enetc_vf 0000:00:01.0 eno0vf0: renamed from eth0
    
    $ echo 0 > /sys/bus/pci/devices/0000\:00\:00.0/sriov_numvfs
    DMA-API: pci 0000:00:01.0: device driver has pending DMA allocations while released from device [count=1]
    One of leaked entries details: [size=2048 bytes] [mapped with DMA_BIDIRECTIONAL] [mapped as coherent]
    WARNING: CPU: 0 PID: 2547 at kernel/dma/debug.c:853 dma_debug_device_change+0x174/0x1c8
    (...)
    Call trace:
     dma_debug_device_change+0x174/0x1c8
     blocking_notifier_call_chain+0x74/0xa8
     device_release_driver_internal+0x18c/0x1f0
     device_release_driver+0x20/0x30
     pci_stop_bus_device+0x8c/0xe8
     pci_stop_and_remove_bus_device+0x20/0x38
     pci_iov_remove_virtfn+0xb8/0x128
     sriov_disable+0x3c/0x110
     pci_disable_sriov+0x24/0x30
     enetc_sriov_configure+0x4c/0x108
     sriov_numvfs_store+0x11c/0x198
    (...)
    DMA-API: Mapped at:
     dma_entry_alloc+0xa4/0x130
     debug_dma_alloc_coherent+0xbc/0x138
     dma_alloc_attrs+0xa4/0x108
     enetc_setup_cbdr+0x4c/0x1d0
     enetc_vf_probe+0x11c/0x250
    pci 0000:00:01.0: Removing from iommu group 19
    
    This happens because stupid me moved enetc_teardown_cbdr outside of
    enetc_free_si_resources, but did not bother to keep calling
    enetc_teardown_cbdr from all the places where enetc_free_si_resources
    was called. In particular, now it is no longer called from the main
    unbind function, just from the probe error path.
    
    Fixes: 4b47c0b8 ("net: enetc: don't initialize unused ports from a separate code path")
    Reported-by: default avatarMichael Walle <michael@walle.cc>
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Tested-by: default avatarMichael Walle <michael@walle.cc>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    c54f042d
enetc_pf.c 30.6 KB