[+cc Khalid new email addr] On Mon, Jan 28, 2013 at 4:40 PM, Bjorn Helgaas <bhelgaas@xxxxxxxxxx> wrote: > On Fri, Jan 18, 2013 at 4:42 AM, Konstantin Khlebnikov > <khlebnikov@xxxxxxxxxx> wrote: >> comment in commit b566a22c23327f18ce941ffad0ca907e50a53d41 >> ("PCI: disable Bus Master on PCI device shutdown") says: >> >> | Disable Bus Master bit on the device in pci_device_shutdown() to ensure PCI >> | devices do not continue to DMA data after shutdown. This can cause memory >> | corruption in case of a kexec where the current kernel shuts down and >> | transfers control to a new kernel while a PCI device continues to DMA to >> | memory that does not belong to it any more in the new kernel. >> >> Seems like pci_clear_master() must be used here instead of pci_disable_device(), >> because it disables Bus Muster unconditionally and doesn't changes enable_cnt. >> >> Signed-off-by: Konstantin Khlebnikov <khlebnikov@xxxxxxxxxx> >> Cc: linux-pci@xxxxxxxxxxxxxxx >> Cc: Bjorn Helgaas <bhelgaas@xxxxxxxxxx> >> Cc: Khalid Aziz <khalid.aziz@xxxxxx> >> --- >> drivers/pci/pci-driver.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c >> index 030dbf0..853d605 100644 >> --- a/drivers/pci/pci-driver.c >> +++ b/drivers/pci/pci-driver.c >> @@ -392,7 +392,7 @@ static void pci_device_shutdown(struct device *dev) >> * Turn off Bus Master bit on the device to tell it to not >> * continue to do DMA >> */ >> - pci_disable_device(pci_dev); >> + pci_clear_master(pci_dev); > > We currently only call pci_enable_device() and pci_disable_device() > from drivers, and I think that's a nice division that's worth keeping. > It keeps the core's mitts off device operation and helps preserve the > enable_cnt integrity. So I like this change from that perspective. > > Any objections to this, Khalid? > >> } >> >> #ifdef CONFIG_PM >> -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html