forked from mirrors/linux
		
	PCI: disable Bus Master on PCI device shutdown
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. I have tested this code on two laptops, two workstations and a 16-socket server. kexec worked correctly on all of them. Signed-off-by: Khalid Aziz <khalid.aziz@hp.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
This commit is contained in:
		
							parent
							
								
									df558de16c
								
							
						
					
					
						commit
						b566a22c23
					
				
					 1 changed files with 6 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -420,6 +420,12 @@ static void pci_device_shutdown(struct device *dev)
 | 
			
		|||
	pci_msi_shutdown(pci_dev);
 | 
			
		||||
	pci_msix_shutdown(pci_dev);
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * Turn off Bus Master bit on the device to tell it to not
 | 
			
		||||
	 * continue to do DMA
 | 
			
		||||
	 */
 | 
			
		||||
	pci_disable_device(pci_dev);
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * Devices may be enabled to wake up by runtime PM, but they need not
 | 
			
		||||
	 * be supposed to wake up the system from its "power off" state (e.g.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue