Re: [PATCH v2 1/1] PCI: loongson: skip scanning unavailable child device
From: Liu Peibao
Date: Fri Nov 04 2022 - 06:43:41 EST
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;
>> +