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:
Коммит
4cf34c0cf6
|
@ -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) >>
|
||||
ENA_ETH_IO_RX_CDESC_BASE_L4_PROTO_IDX_SHIFT;
|
||||
ena_rx_ctx->l3_csum_err =
|
||||
(cdesc->status & ENA_ETH_IO_RX_CDESC_BASE_L3_CSUM_ERR_MASK) >>
|
||||
ENA_ETH_IO_RX_CDESC_BASE_L3_CSUM_ERR_SHIFT;
|
||||
!!((cdesc->status & ENA_ETH_IO_RX_CDESC_BASE_L3_CSUM_ERR_MASK) >>
|
||||
ENA_ETH_IO_RX_CDESC_BASE_L3_CSUM_ERR_SHIFT);
|
||||
ena_rx_ctx->l4_csum_err =
|
||||
(cdesc->status & ENA_ETH_IO_RX_CDESC_BASE_L4_CSUM_ERR_MASK) >>
|
||||
ENA_ETH_IO_RX_CDESC_BASE_L4_CSUM_ERR_SHIFT;
|
||||
!!((cdesc->status & ENA_ETH_IO_RX_CDESC_BASE_L4_CSUM_ERR_MASK) >>
|
||||
ENA_ETH_IO_RX_CDESC_BASE_L4_CSUM_ERR_SHIFT);
|
||||
ena_rx_ctx->hash = cdesc->hash;
|
||||
ena_rx_ctx->frag =
|
||||
(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)
|
||||
return rc;
|
||||
|
||||
ena_init_napi(adapter);
|
||||
|
||||
ena_change_mtu(adapter->netdev, adapter->netdev->mtu);
|
||||
|
||||
ena_refill_all_rx_bufs(adapter);
|
||||
|
@ -1730,6 +1728,13 @@ static int ena_up(struct ena_adapter *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);
|
||||
if (rc)
|
||||
goto err_req_irq;
|
||||
|
@ -2619,7 +2624,11 @@ err_disable_msix:
|
|||
ena_free_mgmnt_irq(adapter);
|
||||
ena_disable_msix(adapter);
|
||||
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_mmio_reg_read_request_destroy(ena_dev);
|
||||
ena_com_dev_reset(ena_dev, ENA_REGS_RESET_DRIVER_INVALID_STATE);
|
||||
err:
|
||||
clear_bit(ENA_FLAG_DEVICE_RUNNING, &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)
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче