mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-05 20:33:49 -04:00
net: bcmasp: Handle RX buffer allocation failure
The buffer_pg variable needs to hold an order-5 allocation (32 x
PAGE_SIZE) which, under memory pressure may fail to be allocated. Deal
with that error condition properly to avoid doing a NULL pointer
de-reference in the subsequent call to dma_map_page().
In addition, the err_reclaim_tx error label in bcmasp_netif_init() needs
to ensure that the TX NAPI object is properly deleted, otherwise
unregister_netdev() will spin forever attempting to test and clear
the NAPI_STATE_HASHED bit.
Fixes: 490cb41200 ("net: bcmasp: Add support for ASP2.0 Ethernet controller")
Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com>
Reviewed-by: Justin Chen <justin.chen@broadcom.com>
Link: https://lore.kernel.org/r/20240213173339.3438713-1-florian.fainelli@broadcom.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
committed by
Paolo Abeni
parent
d74b23d0c2
commit
e5b2e810da
@@ -684,6 +684,8 @@ static int bcmasp_init_rx(struct bcmasp_intf *intf)
|
||||
|
||||
intf->rx_buf_order = get_order(RING_BUFFER_SIZE);
|
||||
buffer_pg = alloc_pages(GFP_KERNEL, intf->rx_buf_order);
|
||||
if (!buffer_pg)
|
||||
return -ENOMEM;
|
||||
|
||||
dma = dma_map_page(kdev, buffer_pg, 0, RING_BUFFER_SIZE,
|
||||
DMA_FROM_DEVICE);
|
||||
@@ -1092,6 +1094,7 @@ static int bcmasp_netif_init(struct net_device *dev, bool phy_connect)
|
||||
return 0;
|
||||
|
||||
err_reclaim_tx:
|
||||
netif_napi_del(&intf->tx_napi);
|
||||
bcmasp_reclaim_free_all_tx(intf);
|
||||
err_phy_disconnect:
|
||||
if (phydev)
|
||||
|
||||
Reference in New Issue
Block a user