Hi,
I have a Sun Oracle Netra T5220. I'm running Solaris 11.3 as the
control domain. I want my OpenBSD to be an IO domain, i.e., a domain
that has direct access to IO: in my case, the four RJ45 network
interfaces on the back of the server (plus an NVMe card). In T5220,
the four interfaces connect to two Intel 82571EB chips, which in turn
connect to a single PCIe bus.
So in Solaris I first enable IO virtualization for the PCIe bus:
root@solaris:~# ldm set-io iov=on pci
And then assign these two chips to my IO domain:
root@solaris:~# ldm add-io MB/NET0 router
root@solaris:~# ldm add-io MB/NET2 router
Everything looks good:
root@solaris:~# ldm list-io
NAME TYPE BUS DOMAIN STATUS
---- ---- --- ------ ------
pci BUS pci primary IOV
niu NIU niu primary
MB/RISER0/PCIE0 PCIE pci router OCC
MB/RISER1/PCIE1 PCIE pci primary EMP
MB/RISER2/PCIE2 PCIE pci primary EMP
MB/PCI_MEZZ/PCIE5 PCIE pci primary EMP
MB/NET0 PCIE pci router OCC
MB/NET2 PCIE pci router OCC
MB/SASHBA PCIE pci primary OCC
However, OpenBSD is unable to initialize the interfaces:
em0 at pci4 dev 0 function 0 "Intel 82571EB" rev 0x06: couldn't map
interrupt
em1 at pci4 dev 0 function 1 "Intel 82571EB" rev 0x06: couldn't map
interrupt
em2 at pci5 dev 0 function 0 "Intel 82571EB" rev 0x06: couldn't map
interrupt
em3 at pci5 dev 0 function 1 "Intel 82571EB" rev 0x06: couldn't map
interrupt
I think the OpenBSD em driver is to blame (and not the
virtualization), because I also assigned an NVMe card to the very same
OpenBSD system and it works great.
Before I ran OpenBSD 7.5 as the control domain without the IO
virtualization enabled, and the interfaces worked fine. I found a
similar issue described here, where they ran OpenBSD as a guest
system:
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=205445
There the conclusion was:
> The OpenBSD em/iwm drivers may either not use MSI, or require legacy
> interrupts to be valid before using MSI.
I don't know what to do with this. I would appreciate it someone
could give me some clue.
Thanks & best,
Irek