hyperv/pcib: enable PCIe pass-through (a.k.a. Discrete Device Assignment)
The feature enables us to pass through physical PCIe devices to FreeBSD VM running on Hyper-V (Windows Server 2016) to get near-native performance with low CPU utilization. The patch implements a PCI bridge driver to support the feature: 1) The pcib driver talks to the host to discover device(s) and presents the device(s) to FreeBSD's pci driver via PCI configuration space (note: to access the configuration space, we don't use the standard I/O port 0xCF8/CFC method; instead, we use an MMIO-based method supplied by Hyper-V, which is very similar to the 0xCF8/CFC method). 2) The pcib driver allocates resources for the device(s) and initialize the related BARs, when the device driver's attach method is invoked; 3) The pcib driver talks to the host to create MSI/MSI-X interrupt remapping between the guest and the host; 4) The pcib driver supports device hot add/remove. Reviewed by: sephe Approved by: sephe (mentor) MFC after: 1 week Sponsored by: Microsoft Differential Revision: https://reviews.freebsd.org/D8332
This commit is contained in:
parent
522c192d38
commit
871c968b3a
@ -292,6 +292,7 @@ dev/hwpmc/hwpmc_uncore.c optional hwpmc
|
||||
dev/hwpmc/hwpmc_piv.c optional hwpmc
|
||||
dev/hwpmc/hwpmc_tsc.c optional hwpmc
|
||||
dev/hwpmc/hwpmc_x86.c optional hwpmc
|
||||
dev/hyperv/pcib/pcib.c optional hyperv
|
||||
dev/hyperv/netvsc/hn_nvs.c optional hyperv
|
||||
dev/hyperv/netvsc/hn_rndis.c optional hyperv
|
||||
dev/hyperv/netvsc/if_hn.c optional hyperv
|
||||
|
@ -249,6 +249,7 @@ dev/hwpmc/hwpmc_piv.c optional hwpmc
|
||||
dev/hwpmc/hwpmc_ppro.c optional hwpmc
|
||||
dev/hwpmc/hwpmc_tsc.c optional hwpmc
|
||||
dev/hwpmc/hwpmc_x86.c optional hwpmc
|
||||
dev/hyperv/pcib/pcib.c optional hyperv
|
||||
dev/hyperv/netvsc/hn_nvs.c optional hyperv
|
||||
dev/hyperv/netvsc/hn_rndis.c optional hyperv
|
||||
dev/hyperv/netvsc/if_hn.c optional hyperv
|
||||
|
1790
sys/dev/hyperv/pcib/pcib.c
Normal file
1790
sys/dev/hyperv/pcib/pcib.c
Normal file
File diff suppressed because it is too large
Load Diff
12
sys/modules/hyperv/pcib/Makefile
Normal file
12
sys/modules/hyperv/pcib/Makefile
Normal file
@ -0,0 +1,12 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.PATH: ${.CURDIR}/../../../dev/hyperv/pcib \
|
||||
${.CURDIR}/../../../dev/hyperv/vmbus
|
||||
|
||||
KMOD= vmbus_pcib
|
||||
SRCS= pcib.c
|
||||
SRCS+= bus_if.h device_if.h vmbus_if.h
|
||||
|
||||
CFLAGS+= -I${.CURDIR}/../../../dev/hyperv/pcib
|
||||
|
||||
.include <bsd.kmod.mk>
|
Loading…
x
Reference in New Issue
Block a user