From 1a9879d82fcaf6900eec6aeae95314366bda9dda Mon Sep 17 00:00:00 2001 From: Sathya Perla Date: Wed, 17 Feb 2010 01:35:37 +0000 Subject: [PATCH] --- yaml --- r: 184288 b: refs/heads/master c: 82456b031e3c3b5bf95a7e49bd9b68b146446e76 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/net/benet/be_main.c | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 39e7528e9ab9..601a86eb8fc9 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 89420424fce28769c338909393518087befe8b37 +refs/heads/master: 82456b031e3c3b5bf95a7e49bd9b68b146446e76 diff --git a/trunk/drivers/net/benet/be_main.c b/trunk/drivers/net/benet/be_main.c index 2c3deadd2d83..68e7848ac0b0 100644 --- a/trunk/drivers/net/benet/be_main.c +++ b/trunk/drivers/net/benet/be_main.c @@ -2449,6 +2449,26 @@ static int be_resume(struct pci_dev *pdev) return 0; } +/* + * An FLR will stop BE from DMAing any data. + */ +static void be_shutdown(struct pci_dev *pdev) +{ + struct be_adapter *adapter = pci_get_drvdata(pdev); + struct net_device *netdev = adapter->netdev; + + netif_device_detach(netdev); + + be_cmd_reset_function(adapter); + + if (adapter->wol) + be_setup_wol(adapter, true); + + pci_disable_device(pdev); + + return; +} + static pci_ers_result_t be_eeh_err_detected(struct pci_dev *pdev, pci_channel_state_t state) { @@ -2544,6 +2564,7 @@ static struct pci_driver be_driver = { .remove = be_remove, .suspend = be_suspend, .resume = be_resume, + .shutdown = be_shutdown, .err_handler = &be_eeh_handlers };