diff options
| author | Dmitry Torokhov <[email protected]> | 2023-08-30 16:06:38 -0700 | 
|---|---|---|
| committer | Dmitry Torokhov <[email protected]> | 2023-08-30 16:06:38 -0700 | 
| commit | 1ac731c529cd4d6adbce134754b51ff7d822b145 (patch) | |
| tree | 143ab3f35ca5f3b69f583c84e6964b17139c2ec1 /drivers/net/ethernet/intel/igbvf/netdev.c | |
| parent | 07b4c950f27bef0362dc6ad7ee713aab61d58149 (diff) | |
| parent | 54116d442e001e1b6bd482122043b1870998a1f3 (diff) | |
Merge branch 'next' into for-linus
Prepare input updates for 6.6 merge window.
Diffstat (limited to 'drivers/net/ethernet/intel/igbvf/netdev.c')
| -rw-r--r-- | drivers/net/ethernet/intel/igbvf/netdev.c | 37 | 
1 files changed, 35 insertions, 2 deletions
diff --git a/drivers/net/ethernet/intel/igbvf/netdev.c b/drivers/net/ethernet/intel/igbvf/netdev.c index 3a32809510fc..7ff2752dd763 100644 --- a/drivers/net/ethernet/intel/igbvf/netdev.c +++ b/drivers/net/ethernet/intel/igbvf/netdev.c @@ -1074,7 +1074,7 @@ static int igbvf_request_msix(struct igbvf_adapter *adapter)  			  igbvf_intr_msix_rx, 0, adapter->rx_ring->name,  			  netdev);  	if (err) -		goto out; +		goto free_irq_tx;  	adapter->rx_ring->itr_register = E1000_EITR(vector);  	adapter->rx_ring->itr_val = adapter->current_itr; @@ -1083,10 +1083,14 @@ static int igbvf_request_msix(struct igbvf_adapter *adapter)  	err = request_irq(adapter->msix_entries[vector].vector,  			  igbvf_msix_other, 0, netdev->name, netdev);  	if (err) -		goto out; +		goto free_irq_rx;  	igbvf_configure_msix(adapter);  	return 0; +free_irq_rx: +	free_irq(adapter->msix_entries[--vector].vector, netdev); +free_irq_tx: +	free_irq(adapter->msix_entries[--vector].vector, netdev);  out:  	return err;  } @@ -2589,6 +2593,33 @@ static void igbvf_io_resume(struct pci_dev *pdev)  	netif_device_attach(netdev);  } +/** + * igbvf_io_prepare - prepare device driver for PCI reset + * @pdev: PCI device information struct + */ +static void igbvf_io_prepare(struct pci_dev *pdev) +{ +	struct net_device *netdev = pci_get_drvdata(pdev); +	struct igbvf_adapter *adapter = netdev_priv(netdev); + +	while (test_and_set_bit(__IGBVF_RESETTING, &adapter->state)) +		usleep_range(1000, 2000); +	igbvf_down(adapter); +} + +/** + * igbvf_io_reset_done - PCI reset done, device driver reset can begin + * @pdev: PCI device information struct + */ +static void igbvf_io_reset_done(struct pci_dev *pdev) +{ +	struct net_device *netdev = pci_get_drvdata(pdev); +	struct igbvf_adapter *adapter = netdev_priv(netdev); + +	igbvf_up(adapter); +	clear_bit(__IGBVF_RESETTING, &adapter->state); +} +  static void igbvf_print_device_info(struct igbvf_adapter *adapter)  {  	struct e1000_hw *hw = &adapter->hw; @@ -2916,6 +2947,8 @@ static const struct pci_error_handlers igbvf_err_handler = {  	.error_detected = igbvf_io_error_detected,  	.slot_reset = igbvf_io_slot_reset,  	.resume = igbvf_io_resume, +	.reset_prepare = igbvf_io_prepare, +	.reset_done = igbvf_io_reset_done,  };  static const struct pci_device_id igbvf_pci_tbl[] = {  |