Hello Peter,
Many thanks for your insight!
Changing PCI_EMUL_MEMBASE64
from 0xD000000000 to 0x0440000000 (16Gb guest memory limit)
and PCI_EMUL_MEMLIMIT64
from 0xFD00000000 to 0x07ffffffff (32Gb host memory limit)
still fails.
From guest dmesg:
...
[mem 0xc0000000-0xffffffff] available for PCI devices
...
pci 0000:00:01.0: [10de:1c03] type 00 class 0x030000
pci 0000:00:01.0: reg 0x10: [mem 0xc0000000-0xc0ffffff]
pci 0000:00:01.0: reg 0x14: [mem 0x440000000-0x44fffffff 64bit pref]
pci 0000:00:01.0: reg 0x1c: [mem 0xc2000000-0xc3ffffff 64bit pref]
pci 0000:00:01.0: reg 0x24: [io 0x2000-0x207f]
pci 0000:00:01.0: reg 0x30: [mem 0xd3000000-0xd307ffff pref]
pci 0000:00:01.1: [10de:10f1] type 00 class 0x040300
pci 0000:00:01.1: reg 0x10: [mem 0xc4000000-0xc4003fff]
...
pci 0000:00:01.0: can't claim BAR 1 [mem 0x440000000-0x44fffffff 64bit
pref]: no compatible bridge window
...
pci 0000:00:01.0: BAR 1: no space for [mem size 0x10000000 64bit pref]
pci 0000:00:01.0: BAR 1: trying firmware assignment [mem
0x440000000-0x44fffffff 64bit pref]
pci 0000:00:01.0: BAR 1: assigned [mem 0x440000000-0x44fffffff 64bit pref]
It seems guest requires BAR to be within its addressable space.
Changing PCI_EMUL_MEMBASE64 to 0x00c0000000 (as guest suggests in its
dmesg) didn't work either:
bhyve: failed to initialize BARs for PCI 1/0/0
device emulation initialization error: Cannot allocate memory
From the BHyve sources it becomes evident that when claimed BAR size
is <= 32Mb, it is mandatory allocated as 32-bit BAR.
The only case BAR goes for 64-bit allocation is when its size > 32Mb.
In my case it is 256 Mb and it fails only for this BAR.
I think the 64-bit BAR allocation still has to be fixed in BHyve code.
Anyway, we are getting closer :)
Any ideas are really appreciated.
Have a nice day,
Alex
On 3/12/20 1:31 AM, Peter Grehan wrote:
Hi Alex,
dmesg | grep "no compatible bridge window"
pci 0000:00:01.0: can't claim BAR 1 [mem 0xd000000000-0xd00fffffff
64bit pref]: no compatible bridge window
...> From what I can read from all the info above,
somehow the requested memory space for BAR1 for that device is
0xd000000000-0xd00fffffff which is out of addressable space on the
system.
Yep, that's the issue, and it's a bhyve bug - there is no check to
see if the 64-bit window is within the addressable range of the
processor.
A quick fix is to change the constant for that range in pci_emul.c
#define PCI_EMUL_MEMBASE64 0xD000000000UL #define
PCI_EMUL_MEMLIMIT64 0xFD00000000UL
.. to a value that is within the address bits of the CPU, but also
above guest DRAM.
later,
Peter.
_______________________________________________
freebsd-virtualization@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-virtualization
To unsubscribe, send any mail to
"freebsd-virtualization-unsubscr...@freebsd.org"