aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorvin Köhne <CorvinK@beckhoff.com>2021-11-22 15:26:03 +0000
committerEmmanuel Vadot <manu@FreeBSD.org>2021-11-22 15:26:03 +0000
commit2eb2079554f4d54c4283410b4ee1aca549b29616 (patch)
tree8f668fd6368e13112ce965ef22b093e16bbaba04
parent5cf21e48ccf114928da9c6564c7e5dec7d6119c5 (diff)
downloadsrc-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.c4
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: