On Wed, 2 Apr 2025, Michał Winiarski wrote: > When the resource representing VF MMIO BAR reservation is created, its > size is always large enough to accommodate the BAR of all SR-IOV Virtual > Functions that can potentially be created (total VFs). If for whatever > reason it's not possible to accommodate all VFs - the resource is not > assigned and no VFs can be created. > > An upcoming change will allow VF BAR size to be modified by drivers at > a later point in time, which means that the check for resource > assignment is no longer sufficient. > > Add an additional check that verifies that VF BAR for all enabled VFs > fits within the underlying reservation resource. > > Signed-off-by: Michał Winiarski <michal.winiarski@xxxxxxxxx> > --- > drivers/pci/iov.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c > index fee99e15a943f..2fafbd6a998f0 100644 > --- a/drivers/pci/iov.c > +++ b/drivers/pci/iov.c > @@ -668,9 +668,12 @@ static int sriov_enable(struct pci_dev *dev, int nr_virtfn) > nres = 0; > for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) { > int idx = pci_resource_num_from_vf_bar(i); > + resource_size_t vf_bar_sz = pci_iov_resource_size(dev, idx); > > bars |= (1 << idx); > res = &dev->resource[idx]; > + if (vf_bar_sz * nr_virtfn > resource_size(res)) > + continue; > if (res->parent) > nres++; > } > Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@xxxxxxxxxxxxxxx> -- i.