Page MenuHomeFreeBSD

D27138.diff
No OneTemporary

D27138.diff

Index: usr.sbin/bhyve/pci_passthru.c
===================================================================
--- usr.sbin/bhyve/pci_passthru.c
+++ usr.sbin/bhyve/pci_passthru.c
@@ -909,15 +909,26 @@
if (baridx == pci_msix_table_bar(pi)) {
msix_table_write(ctx, vcpu, sc, offset, size, value);
- } else {
- assert(pi->pi_bar[baridx].type == PCIBAR_IO);
+ return;
+ }
+
+ switch (pi->pi_bar[baridx].type) {
+ case PCIBAR_IO:
bzero(&pio, sizeof(struct iodev_pio_req));
pio.access = IODEV_PIO_WRITE;
pio.port = sc->psc_bar[baridx].addr + offset;
pio.width = size;
pio.val = value;
-
(void)ioctl(iofd, IODEV_PIO, &pio);
+ break;
+ case PCIBAR_MEM32:
+ case PCIBAR_MEM64:
+ case PCIBAR_MEMHI64:
+ write_mem(ctx, vcpu, pi->pi_bar[baridx].addr + offset, value,
+ size);
+ break;
+ default:
+ assert(0);
}
}
@@ -930,20 +941,29 @@
uint64_t val;
sc = pi->pi_arg;
+ val = -1;
if (baridx == pci_msix_table_bar(pi)) {
val = msix_table_read(sc, offset, size);
- } else {
- assert(pi->pi_bar[baridx].type == PCIBAR_IO);
+ return (val);
+ }
+
+ switch (pi->pi_bar[baridx].type) {
+ case PCIBAR_IO:
bzero(&pio, sizeof(struct iodev_pio_req));
pio.access = IODEV_PIO_READ;
pio.port = sc->psc_bar[baridx].addr + offset;
pio.width = size;
pio.val = 0;
-
(void)ioctl(iofd, IODEV_PIO, &pio);
-
val = pio.val;
+ break;
+ case PCIBAR_MEM32:
+ case PCIBAR_MEM64:
+ case PCIBAR_MEMHI64:
+ read_mem(ctx, vcpu, pi->pi_bar[baridx].addr + offset, &val,
+ size);
+ break;
}
return (val);

File Metadata

Mime Type
text/plain
Expires
Wed, Jul 22, 8:24 AM (52 m, 25 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
35355379
Default Alt Text
D27138.diff (1 KB)

Event Timeline