Message ID | 20200921045116.258-2-yuzenghui@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | None | expand |
On Mon, 21 Sep 2020 12:51:16 +0800 Zenghui Yu <yuzenghui@huawei.com> 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@redhat.com> > Signed-off-by: Zenghui Yu <yuzenghui@huawei.com> > --- > * 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@redhat.com>
Hi Cornelia, On 2020/9/21 18:21, Cornelia Huck wrote: > On Mon, 21 Sep 2020 12:51:16 +0800 > Zenghui Yu <yuzenghui@huawei.com> 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." ? Yes. >> >> Suggested-by: Alex Williamson <alex.williamson@redhat.com> >> Signed-off-by: Zenghui Yu <yuzenghui@huawei.com> >> --- >> * 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@redhat.com> Thanks for you review! I think Alex can help fix the commit message when applying? Otherwise I can send a v3. Thanks, Zenghui
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) + return; + vbar = (__le32 *)&vdev->vconfig[PCI_BASE_ADDRESS_0]; for (i = 0; i < PCI_STD_NUM_BARS; i++, vbar++) {
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 last read, in which case the vdev->bardirty is false. Let's predicate the vfio_bar_fixup() on the bardirty so that it can return immediately if !bardirty. Suggested-by: Alex Williamson <alex.williamson@redhat.com> Signed-off-by: Zenghui Yu <yuzenghui@huawei.com> --- * 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(+)