diff options
author | Corvin Köhne <CorvinK@beckhoff.com> | 2021-11-22 15:26:03 +0000 |
---|---|---|
committer | Emmanuel Vadot <manu@FreeBSD.org> | 2021-11-22 15:26:03 +0000 |
commit | 2eb2079554f4d54c4283410b4ee1aca549b29616 (patch) | |
tree | 8f668fd6368e13112ce965ef22b093e16bbaba04 | |
parent | 5cf21e48ccf114928da9c6564c7e5dec7d6119c5 (diff) | |
download | src-2eb2079554f4d54c4283410b4ee1aca549b29616.tar.gz src-2eb2079554f4d54c4283410b4ee1aca549b29616.zip |
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
-rw-r--r-- | usr.sbin/bhyve/pci_passthru.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/usr.sbin/bhyve/pci_passthru.c b/usr.sbin/bhyve/pci_passthru.c index 29142749abb4..ed5d880ea8d1 100644 --- a/usr.sbin/bhyve/pci_passthru.c +++ b/usr.sbin/bhyve/pci_passthru.c @@ -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: |