lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:	Thu,  8 Aug 2013 15:26:09 +0800
From:	Gavin Shan <shangw@...ux.vnet.ibm.com>
To:	netdev@...r.kernel.org
Cc:	nsujir@...adcom.com, davem@...emloft.net,
	Gavin Shan <shangw@...ux.vnet.ibm.com>
Subject: [PATCH] net/tg3: Support shutdown on PCI device

Before we tries to load new kernel with "kexec", we cound't bring
the tg3 NICs down manually because dhcp daemon keeps them up. So
there're still lots of traffic (DMA operations) on the tg3 card
from the old kernel while running the new kernel. It leads to
unnecessary EEH errors on Power platform because the network traffic
(from old kernel) breaks what we have in the IOMMU, which is built
by the new kernel.

	ifconfig eth0 down
	kexec -l vmlinux -c "root=/dev/sda5 debug" && kexec -f -e

The patch adds the shutdown interface for the PCI device to make
things more robust. The PCI device can be put to silent state before
loading the new kernel and to avoid unnecessary EEH errors.

Reported-by: Benjamin Herrenschmidt <benh@...nel.crashing.org>
Signed-off-by: Gavin Shan <shangw@...ux.vnet.ibm.com>
---
 drivers/net/ethernet/broadcom/tg3.c |   12 ++++++++++++
 1 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
index ddebc7a..dc6178b 100644
--- a/drivers/net/ethernet/broadcom/tg3.c
+++ b/drivers/net/ethernet/broadcom/tg3.c
@@ -17663,6 +17663,17 @@ static void tg3_remove_one(struct pci_dev *pdev)
 	}
 }
 
+static void tg3_shutdown_one(struct pci_dev *pdev)
+{
+	struct net_device *dev = pci_get_drvdata(pdev);
+
+	if (!dev)
+		return;
+
+	netif_device_detach(dev);
+	tg3_remove_one(pdev);
+}
+
 #ifdef CONFIG_PM_SLEEP
 static int tg3_suspend(struct device *device)
 {
@@ -17909,6 +17920,7 @@ static struct pci_driver tg3_driver = {
 	.id_table	= tg3_pci_tbl,
 	.probe		= tg3_init_one,
 	.remove		= tg3_remove_one,
+	.shutdown	= tg3_shutdown_one,
 	.err_handler	= &tg3_err_handler,
 	.driver.pm	= &tg3_pm_ops,
 };
-- 
1.7.5.4

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ