--- Comment #17 from Wei Hu <[hidden email]> ---
It turns out the address between 0xf8000000 and 0xf87fffff on HyperV doesn't
work for MMIO or FreeBSD has bug to incorrectly assign device MMIO address to
this range. When manually assign the em0 MMIO address to and above 0xf8800000,
the passthrough NIC works fine.
On same Gen 2 Linux VM, the device was assigned MMIO address above this range.
On Gen 1 FreeBSD VM, the same card was assigned to an address above 4G. So both
of these works fine.
The workaround I am using is intercepting the memory allocation request,
changing the starting address to 0xf8800000 whenever find a request fall into
this problem range. This works fine on customer's site. However still need to
root cause the issue when this only happens on FreeBSD Gen 2 VMs, not other
Linux Gen 2 VMs.