[Skiboot] [PATCH 16/33] pci: When restoring bus numbers after a reset, also restore device cache

Michael Neuling mikey at neuling.org
Wed Jul 6 17:24:11 AEST 2016


On Sat, 2016-06-25 at 08:47 +1000, Benjamin Herrenschmidt wrote:
> PCIe devices cache the bus number on the first config write, make sure
> we restore them when at the same time

Is this a fix that needs to go into some stable builds?

> Signed-off-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>
>
> ---
>  core/pci.c | 8 +++++++-
>  1 file changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/core/pci.c b/core/pci.c
> index 9b65a49..7ba5169 100644
> --- a/core/pci.c
> +++ b/core/pci.c
> @@ -1605,8 +1605,14 @@ static int __pci_restore_bridge_buses(struct phb *phb,
>  				      struct pci_device *pd,
>  				      void *data __unused)
>  {
> -	if (!pd->is_bridge)
> +	if (!pd->is_bridge) {
> +		uint32_t vdid;
> +
> +		/* Make all devices below a bridge "re-capture" the bdfn */
> +		if (pci_cfg_read32(phb, pd->bdfn, 0, &vdid) == 0)
> +			pci_cfg_write32(phb, pd->bdfn, 0, vdid);

Do we have a lock held here to ensure there is no race?

>  		return 0;
> +	}
>  
>  	pci_cfg_write8(phb, pd->bdfn, PCI_CFG_PRIMARY_BUS,
>  		       pd->primary_bus);


More information about the Skiboot mailing list