mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-24 07:31:41 +00:00
Merge branch 'ena-fixes'
Arthur Kiyanovski says: ==================== minor bug fixes for ENA Ethernet driver Arthur Kiyanovski (4): net: ena: fix warning in rmmod caused by double iounmap net: ena: fix rare bug when failed restart/resume is followed by driver removal net: ena: fix NULL dereference due to untimely napi initialization net: ena: fix auto casting to boolean ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
4cf34c0cf6
2 changed files with 16 additions and 14 deletions
|
@ -245,11 +245,11 @@ static inline void ena_com_rx_set_flags(struct ena_com_rx_ctx *ena_rx_ctx,
|
||||||
(cdesc->status & ENA_ETH_IO_RX_CDESC_BASE_L4_PROTO_IDX_MASK) >>
|
(cdesc->status & ENA_ETH_IO_RX_CDESC_BASE_L4_PROTO_IDX_MASK) >>
|
||||||
ENA_ETH_IO_RX_CDESC_BASE_L4_PROTO_IDX_SHIFT;
|
ENA_ETH_IO_RX_CDESC_BASE_L4_PROTO_IDX_SHIFT;
|
||||||
ena_rx_ctx->l3_csum_err =
|
ena_rx_ctx->l3_csum_err =
|
||||||
(cdesc->status & ENA_ETH_IO_RX_CDESC_BASE_L3_CSUM_ERR_MASK) >>
|
!!((cdesc->status & ENA_ETH_IO_RX_CDESC_BASE_L3_CSUM_ERR_MASK) >>
|
||||||
ENA_ETH_IO_RX_CDESC_BASE_L3_CSUM_ERR_SHIFT;
|
ENA_ETH_IO_RX_CDESC_BASE_L3_CSUM_ERR_SHIFT);
|
||||||
ena_rx_ctx->l4_csum_err =
|
ena_rx_ctx->l4_csum_err =
|
||||||
(cdesc->status & ENA_ETH_IO_RX_CDESC_BASE_L4_CSUM_ERR_MASK) >>
|
!!((cdesc->status & ENA_ETH_IO_RX_CDESC_BASE_L4_CSUM_ERR_MASK) >>
|
||||||
ENA_ETH_IO_RX_CDESC_BASE_L4_CSUM_ERR_SHIFT;
|
ENA_ETH_IO_RX_CDESC_BASE_L4_CSUM_ERR_SHIFT);
|
||||||
ena_rx_ctx->hash = cdesc->hash;
|
ena_rx_ctx->hash = cdesc->hash;
|
||||||
ena_rx_ctx->frag =
|
ena_rx_ctx->frag =
|
||||||
(cdesc->status & ENA_ETH_IO_RX_CDESC_BASE_IPV4_FRAG_MASK) >>
|
(cdesc->status & ENA_ETH_IO_RX_CDESC_BASE_IPV4_FRAG_MASK) >>
|
||||||
|
|
|
@ -1575,8 +1575,6 @@ static int ena_up_complete(struct ena_adapter *adapter)
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
ena_init_napi(adapter);
|
|
||||||
|
|
||||||
ena_change_mtu(adapter->netdev, adapter->netdev->mtu);
|
ena_change_mtu(adapter->netdev, adapter->netdev->mtu);
|
||||||
|
|
||||||
ena_refill_all_rx_bufs(adapter);
|
ena_refill_all_rx_bufs(adapter);
|
||||||
|
@ -1730,6 +1728,13 @@ static int ena_up(struct ena_adapter *adapter)
|
||||||
|
|
||||||
ena_setup_io_intr(adapter);
|
ena_setup_io_intr(adapter);
|
||||||
|
|
||||||
|
/* napi poll functions should be initialized before running
|
||||||
|
* request_irq(), to handle a rare condition where there is a pending
|
||||||
|
* interrupt, causing the ISR to fire immediately while the poll
|
||||||
|
* function wasn't set yet, causing a null dereference
|
||||||
|
*/
|
||||||
|
ena_init_napi(adapter);
|
||||||
|
|
||||||
rc = ena_request_io_irq(adapter);
|
rc = ena_request_io_irq(adapter);
|
||||||
if (rc)
|
if (rc)
|
||||||
goto err_req_irq;
|
goto err_req_irq;
|
||||||
|
@ -2619,7 +2624,11 @@ err_disable_msix:
|
||||||
ena_free_mgmnt_irq(adapter);
|
ena_free_mgmnt_irq(adapter);
|
||||||
ena_disable_msix(adapter);
|
ena_disable_msix(adapter);
|
||||||
err_device_destroy:
|
err_device_destroy:
|
||||||
|
ena_com_abort_admin_commands(ena_dev);
|
||||||
|
ena_com_wait_for_abort_completion(ena_dev);
|
||||||
ena_com_admin_destroy(ena_dev);
|
ena_com_admin_destroy(ena_dev);
|
||||||
|
ena_com_mmio_reg_read_request_destroy(ena_dev);
|
||||||
|
ena_com_dev_reset(ena_dev, ENA_REGS_RESET_DRIVER_INVALID_STATE);
|
||||||
err:
|
err:
|
||||||
clear_bit(ENA_FLAG_DEVICE_RUNNING, &adapter->flags);
|
clear_bit(ENA_FLAG_DEVICE_RUNNING, &adapter->flags);
|
||||||
clear_bit(ENA_FLAG_ONGOING_RESET, &adapter->flags);
|
clear_bit(ENA_FLAG_ONGOING_RESET, &adapter->flags);
|
||||||
|
@ -3099,15 +3108,8 @@ err_rss_init:
|
||||||
|
|
||||||
static void ena_release_bars(struct ena_com_dev *ena_dev, struct pci_dev *pdev)
|
static void ena_release_bars(struct ena_com_dev *ena_dev, struct pci_dev *pdev)
|
||||||
{
|
{
|
||||||
int release_bars;
|
int release_bars = pci_select_bars(pdev, IORESOURCE_MEM) & ENA_BAR_MASK;
|
||||||
|
|
||||||
if (ena_dev->mem_bar)
|
|
||||||
devm_iounmap(&pdev->dev, ena_dev->mem_bar);
|
|
||||||
|
|
||||||
if (ena_dev->reg_bar)
|
|
||||||
devm_iounmap(&pdev->dev, ena_dev->reg_bar);
|
|
||||||
|
|
||||||
release_bars = pci_select_bars(pdev, IORESOURCE_MEM) & ENA_BAR_MASK;
|
|
||||||
pci_release_selected_regions(pdev, release_bars);
|
pci_release_selected_regions(pdev, release_bars);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue