Re: [RESEND v4 1/6] misc: Add Synopsys DesignWare xData IP driver
From: Krzysztof Wilczyński <hidden>
Date: 2021-02-09 17:27:01
Also in:
linux-pci, lkml
Hi Gustavo, [...]
quoted
The code in question would be (exceprt from the patch): [...] +static int dw_xdata_pcie_probe(struct pci_dev *pdev, + const struct pci_device_id *pid) +{ + const struct dw_xdata_pcie_data *pdata = (void *)pid->driver_data; + struct dw_xdata *dw; [...] + dw->rg_region.vaddr = pcim_iomap_table(pdev)[pdata->rg_bar]; + if (!dw->rg_region.vaddr) + return -ENOMEM; [...] Perhaps something like the following would would? void __iomem * const *iomap_table; iomap_table = pcim_iomap_table(pdev); if (!iomap_table) return -ENOMEM; dw->rg_region.vaddr = iomap_table[pdata->rg_bar]; if (!dw->rg_region.vaddr) return -ENOMEM; With sensible error messages added, of course. What do you think?I think all the improvements are welcome. I will do that. My only doubt is if Bjorn recommends removing the iomap_table[pdata->rg_bar] check, after adding the verification on the pcim_iomap_table, because all other drivers doesn't do that.
Good point. I only found two drivers that do this extra check: https://elixir.bootlin.com/linux/v5.11-rc7/source/drivers/crypto/ccp/sp-pci.c#L203 https://elixir.bootlin.com/linux/v5.11-rc7/source/drivers/net/ethernet/amd/xgbe/xgbe-pci.c#L252 Bjorn, do you think that there is some likelihood that the table might be missing a mapped address for a given BAR? I don't think that is the case, but should it be the case, then perhaps adding a small wrapper that would take a BAR and do all the verification internally might be a good idea. Krzysztof