On Mon, 21 Sep 2020 12:51:16 +0800 Zenghui Yu <yuzenghui@xxxxxxxxxx> wrote: > Now we regenerate vconfig for all the BARs via vfio_bar_fixup(), every time > any offset of any of them are read. Though BARs aren't re-read regularly, > the regeneration can be avoid if no BARs had been written since they were s/avoid/avoided/ > last read, in which case the vdev->bardirty is false. s/the// > > Let's predicate the vfio_bar_fixup() on the bardirty so that it can return > immediately if !bardirty. Maybe "Let's return immediately in vfio_bar_fixup() if bardirty is false." ? > > Suggested-by: Alex Williamson <alex.williamson@xxxxxxxxxx> > Signed-off-by: Zenghui Yu <yuzenghui@xxxxxxxxxx> > --- > * From v1: > - Per Alex's suggestion, let vfio_bar_fixup() test vdev->bardirty to > avoid doing work if bardirty is false, instead of removing it entirely. > - Rewrite the commit message. > > drivers/vfio/pci/vfio_pci_config.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/drivers/vfio/pci/vfio_pci_config.c b/drivers/vfio/pci/vfio_pci_config.c > index d98843feddce..5e02ba07e8e8 100644 > --- a/drivers/vfio/pci/vfio_pci_config.c > +++ b/drivers/vfio/pci/vfio_pci_config.c > @@ -467,6 +467,9 @@ static void vfio_bar_fixup(struct vfio_pci_device *vdev) > __le32 *vbar; > u64 mask; > > + if (!vdev->bardirty) Finally, bardirty can actually affect something :) > + return; > + > vbar = (__le32 *)&vdev->vconfig[PCI_BASE_ADDRESS_0]; > > for (i = 0; i < PCI_STD_NUM_BARS; i++, vbar++) { Reviewed-by: Cornelia Huck <cohuck@xxxxxxxxxx>