Re: [PATCH v5 7/9] vfio/pci: Clean up BAR zap and revocation

From: Matt Evans

Date: Thu Aug 13 2026 - 12:01:51 EST


Hola Alex,

On 12/08/2026 21:06, Alex Williamson wrote:
On Tue, 11 Aug 2026 16:58:43 +0100
Matt Evans <matt@xxxxxxxxxx> wrote:

Hi Alex,

[snip]
Isn't the init-time 'event horizon' for writing the bitfield the
vfio_register_group_dev() in vfio_pci_core_register_device(), after
which synchronisation is needed?

The hisi_acc_vfio_pci driver's .probe calls
vfio_pci_core_register_device() and _after that_ sets
zap_bars_on_revoke, and that's now in the "needs synchronisation to
write the bitfield" phase.

(Re-reading my comment in vfio_pci_core_register_device() I'd noted
this, "Drivers can opt out after registration". Has to be done after by
definition as the default's set in vfio_pci_core_register_device().)

The concern is just blatting neighbours in the bitfield, not the window
of time before the flag's set. The flag's an opt-out of a safe but (for
this driver) unnecessary zap, so having it unset for a short time is OK.

I still think this really should be a standalone bool, not a bit in the
bitfield. It has to be set after registration and having to take a lock
to do that has downsides.

You're right on the ordering, the device is live after
vfio_pci_core_register_device(). However, I think that's evidence that
vfio-pci-core is setting the default polarity, inferred from the mmap
op, in the wrong place. It should happen in init, not register_device.

The same mmap op pointer is available in vfio_pci_core_init_dev(), which

Ahaa, they're passed into vfio_alloc_device()!

is used by all vfio-pci variant drivers in their init callback. The
proposed vfio_pci_core_register_device() change just needs to be lifted
into vfio_pci_core_init_dev(). hisi_acc is then modified to fix the
flag after vfio_pci_core_init_dev(), something like below.

I think that's better than anticipating it being dynamic when we don't
have a use case that requires it. Thanks,

Yes, that works nicely. Done. As ever, thanks for the suggestion.


Matt


PS: Series v6 has several improvements/review fixes ready, but I'm holding off posting it. It'd depend on resolving the awful deadlock I posted about on patch [4/9].





Alex

--- a/drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.c
+++ b/drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.c
@@ -1564,6 +1564,7 @@ static int hisi_acc_vfio_pci_migrn_init_dev(struct vfio_device *core_vdev)
struct hisi_acc_vf_core_device *hisi_acc_vdev = hisi_acc_get_vf_dev(core_vdev);
struct pci_dev *pdev = to_pci_dev(core_vdev->dev);
struct hisi_qm *pf_qm = hisi_acc_get_pf_qm(pdev);
+ int ret;
hisi_acc_vdev->vf_id = pci_iov_vf_id(pdev) + 1;
hisi_acc_vdev->pf_qm = pf_qm;
@@ -1575,7 +1576,9 @@ static int hisi_acc_vfio_pci_migrn_init_dev(struct vfio_device *core_vdev)
core_vdev->migration_flags = VFIO_MIGRATION_STOP_COPY | VFIO_MIGRATION_PRE_COPY;
core_vdev->mig_ops = &hisi_acc_vfio_pci_migrn_state_ops;
- return vfio_pci_core_init_dev(core_vdev);
+ ret = vfio_pci_core_init_dev(core_vdev);
+ hisi_acc_vdev->core_device.zap_bars_on_revoke = false;
+ return ret;
}
static const struct vfio_device_ops hisi_acc_vfio_pci_migrn_ops = {