bhyve: keep physical and virtual COMMAND reg in sync

On startup all virtual BARs are registered.
Additionally, the encoding bit in the virtual cmd register is set.
After that, the passthru emulation overwrites the virtual cmd register with
the physical one.
This could lead to a mismatch between registered BARs and the encoding
bits in the cmd register.
Instead of writing the physical to the virtual cmd register,
write the virtual to the physical cmd register to solve this issue.

Reviewed by:	  markj
Differential Revision:	https://reviews.freebsd.org/D32687
Sponsored by:	Beckhoff Automation GmbH & Co. KG
This commit is contained in:
Corvin Köhne 2021-11-22 16:26:03 +01:00 committed by Emmanuel Vadot
parent 5cf21e48cc
commit 2eb2079554

View File

@ -593,8 +593,8 @@ cfginit(struct vmctx *ctx, struct pci_devinst *pi, int bus, int slot, int func)
goto done;
}
pci_set_cfgdata16(pi, PCIR_COMMAND, read_config(&sc->psc_sel,
PCIR_COMMAND, 2));
write_config(&sc->psc_sel, PCIR_COMMAND, 2,
pci_get_cfgdata16(pi, PCIR_COMMAND));
error = 0; /* success */
done: