mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	powerpc/powernv: Override pcibios_default_alignment() to force PCI devices to be page aligned
Override pcibios_default_alignment() to set default alignment to PAGE_SIZE for all PCI devices on PowerNV platform. Thus sub-page BARs would not share a page and could be mapped into guest when VFIO passthrough them. Signed-off-by: Yongji Xie <elohimes@gmail.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
This commit is contained in:
		
							parent
							
								
									0a701aa637
								
							
						
					
					
						commit
						3827463769
					
				
					 3 changed files with 17 additions and 0 deletions
				
			
		| 
						 | 
					@ -173,6 +173,8 @@ struct machdep_calls {
 | 
				
			||||||
	/* Called after scan and before resource survey */
 | 
						/* Called after scan and before resource survey */
 | 
				
			||||||
	void (*pcibios_fixup_phb)(struct pci_controller *hose);
 | 
						void (*pcibios_fixup_phb)(struct pci_controller *hose);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						resource_size_t (*pcibios_default_alignment)(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_PCI_IOV
 | 
					#ifdef CONFIG_PCI_IOV
 | 
				
			||||||
	void (*pcibios_fixup_sriov)(struct pci_dev *pdev);
 | 
						void (*pcibios_fixup_sriov)(struct pci_dev *pdev);
 | 
				
			||||||
	resource_size_t (*pcibios_iov_resource_alignment)(struct pci_dev *, int resno);
 | 
						resource_size_t (*pcibios_iov_resource_alignment)(struct pci_dev *, int resno);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -233,6 +233,14 @@ void pcibios_reset_secondary_bus(struct pci_dev *dev)
 | 
				
			||||||
	pci_reset_secondary_bus(dev);
 | 
						pci_reset_secondary_bus(dev);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					resource_size_t pcibios_default_alignment(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if (ppc_md.pcibios_default_alignment)
 | 
				
			||||||
 | 
							return ppc_md.pcibios_default_alignment();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_PCI_IOV
 | 
					#ifdef CONFIG_PCI_IOV
 | 
				
			||||||
resource_size_t pcibios_iov_resource_alignment(struct pci_dev *pdev, int resno)
 | 
					resource_size_t pcibios_iov_resource_alignment(struct pci_dev *pdev, int resno)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3287,6 +3287,11 @@ static void pnv_pci_setup_bridge(struct pci_bus *bus, unsigned long type)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static resource_size_t pnv_pci_default_alignment(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return PAGE_SIZE;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_PCI_IOV
 | 
					#ifdef CONFIG_PCI_IOV
 | 
				
			||||||
static resource_size_t pnv_pci_iov_resource_alignment(struct pci_dev *pdev,
 | 
					static resource_size_t pnv_pci_iov_resource_alignment(struct pci_dev *pdev,
 | 
				
			||||||
						      int resno)
 | 
											      int resno)
 | 
				
			||||||
| 
						 | 
					@ -3820,6 +3825,8 @@ static void __init pnv_pci_init_ioda_phb(struct device_node *np,
 | 
				
			||||||
		hose->controller_ops = pnv_pci_ioda_controller_ops;
 | 
							hose->controller_ops = pnv_pci_ioda_controller_ops;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ppc_md.pcibios_default_alignment = pnv_pci_default_alignment;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_PCI_IOV
 | 
					#ifdef CONFIG_PCI_IOV
 | 
				
			||||||
	ppc_md.pcibios_fixup_sriov = pnv_pci_ioda_fixup_iov_resources;
 | 
						ppc_md.pcibios_fixup_sriov = pnv_pci_ioda_fixup_iov_resources;
 | 
				
			||||||
	ppc_md.pcibios_iov_resource_alignment = pnv_pci_iov_resource_alignment;
 | 
						ppc_md.pcibios_iov_resource_alignment = pnv_pci_iov_resource_alignment;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue