Commit 30a1e6d0 authored by Shannon Nelson's avatar Shannon Nelson Committed by David S. Miller

ionic: keep ionic dev on lif init fail

If the basic ionic interface works but the lif creation fails,
don't fail the probe.  This will allow us to use the driver to
help inspect the hw/fw/pci interface for debugging purposes.
Signed-off-by: default avatarShannon Nelson <snelson@pensando.io>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent c8e98343
...@@ -37,6 +37,9 @@ int ionic_bus_alloc_irq_vectors(struct ionic *ionic, unsigned int nintrs) ...@@ -37,6 +37,9 @@ int ionic_bus_alloc_irq_vectors(struct ionic *ionic, unsigned int nintrs)
void ionic_bus_free_irq_vectors(struct ionic *ionic) void ionic_bus_free_irq_vectors(struct ionic *ionic)
{ {
if (!ionic->nintrs)
return;
pci_free_irq_vectors(ionic->pdev); pci_free_irq_vectors(ionic->pdev);
} }
...@@ -346,6 +349,11 @@ static int ionic_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -346,6 +349,11 @@ static int ionic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
ionic_reset(ionic); ionic_reset(ionic);
err_out_teardown: err_out_teardown:
ionic_dev_teardown(ionic); ionic_dev_teardown(ionic);
/* Don't fail the probe for these errors, keep
* the hw interface around for inspection
*/
return 0;
err_out_unmap_bars: err_out_unmap_bars:
ionic_unmap_bars(ionic); ionic_unmap_bars(ionic);
pci_release_regions(pdev); pci_release_regions(pdev);
...@@ -369,11 +377,14 @@ static void ionic_remove(struct pci_dev *pdev) ...@@ -369,11 +377,14 @@ static void ionic_remove(struct pci_dev *pdev)
if (!ionic) if (!ionic)
return; return;
if (ionic->master_lif) {
ionic_devlink_unregister(ionic); ionic_devlink_unregister(ionic);
ionic_lifs_unregister(ionic); ionic_lifs_unregister(ionic);
ionic_lifs_deinit(ionic); ionic_lifs_deinit(ionic);
ionic_lifs_free(ionic); ionic_lifs_free(ionic);
ionic_bus_free_irq_vectors(ionic); ionic_bus_free_irq_vectors(ionic);
}
ionic_port_reset(ionic); ionic_port_reset(ionic);
ionic_reset(ionic); ionic_reset(ionic);
ionic_dev_teardown(ionic); ionic_dev_teardown(ionic);
......
...@@ -2408,6 +2408,9 @@ void ionic_lifs_unregister(struct ionic *ionic) ...@@ -2408,6 +2408,9 @@ void ionic_lifs_unregister(struct ionic *ionic)
* current model, so don't bother searching the * current model, so don't bother searching the
* ionic->lif for candidates to unregister * ionic->lif for candidates to unregister
*/ */
if (!ionic->master_lif)
return;
cancel_work_sync(&ionic->master_lif->deferred.work); cancel_work_sync(&ionic->master_lif->deferred.work);
cancel_work_sync(&ionic->master_lif->tx_timeout_work); cancel_work_sync(&ionic->master_lif->tx_timeout_work);
if (ionic->master_lif->netdev->reg_state == NETREG_REGISTERED) if (ionic->master_lif->netdev->reg_state == NETREG_REGISTERED)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment