• Vignesh Raghavendra's avatar
    net: ti: am65-cpsw-nuss: Fix crash when changing number of TX queues · ce8eb4c7
    Vignesh Raghavendra authored
    When changing number of TX queues using ethtool:
    
    	# ethtool -L eth0 tx 1
    	[  135.301047] Unable to handle kernel paging request at virtual address 00000000af5d0000
    	[...]
    	[  135.525128] Call trace:
    	[  135.525142]  dma_release_from_dev_coherent+0x2c/0xb0
    	[  135.525148]  dma_free_attrs+0x54/0xe0
    	[  135.525156]  k3_cppi_desc_pool_destroy+0x50/0xa0
    	[  135.525164]  am65_cpsw_nuss_remove_tx_chns+0x88/0xdc
    	[  135.525171]  am65_cpsw_set_channels+0x3c/0x70
    	[...]
    
    This is because k3_cppi_desc_pool_destroy() which is called after
    k3_udma_glue_release_tx_chn() in am65_cpsw_nuss_remove_tx_chns()
    references struct device that is unregistered at the end of
    k3_udma_glue_release_tx_chn()
    
    Therefore the right order is to call k3_cppi_desc_pool_destroy() and
    destroy desc pool before calling k3_udma_glue_release_tx_chn().
    Fix this throughout the driver.
    
    Fixes: 93a76530 ("net: ethernet: ti: introduce am65x/j721e gigabit eth subsystem driver")
    Signed-off-by: default avatarVignesh Raghavendra <vigneshr@ti.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    ce8eb4c7
am65-cpsw-nuss.c 74.4 KB