diff options
author | Igor Russkikh <igor.russkikh@aquantia.com> | 2018-03-20 14:40:36 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-03-22 12:02:49 -0400 |
commit | 90869ddfefebb1a79bd7bebfa4f28baa9f8c82cd (patch) | |
tree | 7b864135af0c715e44c3eccbe269e8b001755a92 /drivers/net/ethernet/aquantia/atlantic/aq_nic.c | |
parent | net: aquantia: Allow live mac address changes (diff) | |
download | linux-dev-90869ddfefebb1a79bd7bebfa4f28baa9f8c82cd.tar.xz linux-dev-90869ddfefebb1a79bd7bebfa4f28baa9f8c82cd.zip |
net: aquantia: Implement pci shutdown callback
We should close link and all NIC operations during shutdown.
On some systems graceful reboot never closes NIC interface on its own,
but only indicates pci device shutdown. Without explicit handler, NIC
rx rings continued to transfer DMA data into prepared buffers while CPU
rebooted already. That caused memory corruptions on soft reboot.
Signed-off-by: Igor Russkikh <igor.russkikh@aquantia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/aquantia/atlantic/aq_nic.c')
-rw-r--r-- | drivers/net/ethernet/aquantia/atlantic/aq_nic.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c index 34120d5b7c03..c96a92118b8b 100644 --- a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c +++ b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c @@ -939,3 +939,23 @@ err_exit: out: return err; } + +void aq_nic_shutdown(struct aq_nic_s *self) +{ + int err = 0; + + if (!self->ndev) + return; + + rtnl_lock(); + + netif_device_detach(self->ndev); + + err = aq_nic_stop(self); + if (err < 0) + goto err_exit; + aq_nic_deinit(self); + +err_exit: + rtnl_unlock(); +}
\ No newline at end of file |