On 11/4/22 4:43 PM, Christophe JAILLET wrote: > Le 04/11/2022 à 08:27, Liu Peibao a écrit : >> +#ifdef CONFIG_OF >> + /* Don't access devices in masklist */ >> + if (pci_is_root_bus(bus)) { >> + struct list_head *list; >> + struct mask_entry *entry; >> + >> + list_for_each(list, &priv->masklist) { >> + entry = list_entry(list, struct mask_entry, entry); > > Hi, > > list_for_each_entry() is slighly less verbose. > OK, I will update the patch with list_for_each_entry(). >> + if (devfn == entry->devfn) >> + return NULL; >> + } >> + } >> +#endif >> + >> /* CFG0 can only access standard space */ >> if (where < PCI_CFG_SPACE_SIZE && priv->cfg0_base) >> return cfg0_map(priv, bus, devfn, where); >> @@ -206,6 +230,36 @@ static void __iomem *pci_loongson_map_bus(struct pci_bus *bus, >> } >> #ifdef CONFIG_OF >> +static int setup_masklist(struct loongson_pci *priv) >> +{ >> + struct device *dev = &priv->pdev->dev; >> + struct device_node *dn, *parent = dev->of_node; >> + struct mask_entry *entry; >> + int devfn; >> + >> + INIT_LIST_HEAD(&priv->masklist); >> + >> + for_each_child_of_node(parent, dn) { >> + /* >> + * if device is not available, add this to masklist >> + * to avoid scanning it. >> + */ >> + if (!of_device_is_available(dn)) { >> + devfn = of_pci_get_devfn(dn); >> + if (devfn < 0) >> + continue; >> + >> + entry = devm_kzalloc(dev, sizeof(entry), GFP_KERNEL); > > sizeof(*entry)? > That really is a bug, thanks! BR, Peibao >> + if (!entry) >> + return -ENOMEM; >> +