Hi Manish,
On Thu, 13 Aug 2026 18:36:19 +0530, Manish Honap wrote:
> +/*
> + * Cold-plug path: the CFMWS windows are placed at machine init done, so the
> + * binding can only be validated from this notifier. The VM has not run yet,
> so
> + * a configuration error is fatal to startup. A hotplugged device is
> validated
> + * in realize instead (see vfio_cxl_setup), where the failure fails
> device_add
> + * without taking down the running VM.
At this point in the series that isn't true yet: the
DEVICE(vdev)->hotplugged branch only arrives in patch 7, while this
patch registers the notifier unconditionally.
qemu_add_machine_init_done_notifier() invokes the notifier immediately
once the machine has reached PHASE_MACHINE_READY (hw/core/machine.c),
so between patches 6 and 7 a device_add with a bad CFMWS config lands
in vfio_cxl_bind_fmws() and exit(1)s the running VM. Move the hotplug
branch from patch 7 into this patch; then every point of the series
matches the comment.
> + for (slot = 0; slot < PCI_SLOT_MAX; slot++) {
> + for (fn = 0; fn < PCI_FUNC_MAX; fn++) {
> + if (ep_bus->devices[PCI_DEVFN(slot, fn)]) {
> + nendpoints++;
> + break;
This counts occupied slots, not functions: the inner loop breaks on
the first function of a slot, so two vfio-cxl functions cold-plugged
at slot 0 each pass with nendpoints == 1, bind the same single-target
window, and map at the same base with equal priority -- the aliasing
this check exists to reject. Count devfns instead.
Many thanks,
Junjie