Skip to content

Commit 907b5d6

Browse files
author
Iouri Tarassov
committed
drivers: hv: dxgkrnl: Driver initialization and creation of dxgadapter
- Add support for a Hyper-V based vGPU implementation that exposes the DirectX API to Linux userspace. - Handle driver loading, registration for the PCI and VM bus device notifications - Add headers for user mode interfaces, internal driver objects and VM bus communication interface - Handle initialization of VM bus channels and creation of the dxgadapter object - Removed dxg_copy_from_user and dxg_copy_to_user - Connect the dxgkrnl module to the drivers/hv/ makefile and Kconfig. - Create a MAINTAINERS entry PCI driver registration A PCI device is created for each virtual GPU (vGPU) device, projected by the host. The device vendor is PCI_VENDOR_ID_MICROSOFT and device id is PCI_DEVICE_ID_VIRTUAL_RENDER. dxg_pci_probe_device handles arrival of such devices and it creates dxgadapter objects. The PCI config space of the vGPU device has luid of the corresponding per GPU VM bus channel. This is how the adapters are linked to VM bus channels. dxgadapter initialization A dxgadapter object represents a virtual GPU, projected to the VM by the host. This object can start functioning only when the global VM bus channel and the corresponding per vGPU VM bus channel are initialized in the guest. Notifications about arrival of vGPU PCI device and VM bus channels can happen in any order. Therefore, the initial dxgadapter object state is DXGADAPTER_STATE_WAITING_VMBUS. A list of VM bus channels and a list of dxgadapter objects are created. When dxgkrnl is notified about a VM bus channel arrival, if tries to start all adapters, which are not started yet. VM bus interface version is exchanged by reading/writing the PCI config space of the vGPU device. Signed-off-by: Iouri Tarassov <iourit@linux.microsoft.com>
1 parent 2c85ebc commit 907b5d6

18 files changed

Lines changed: 8308 additions & 0 deletions

File tree

MAINTAINERS

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8190,6 +8190,12 @@ F: Documentation/devicetree/bindings/mtd/ti,am654-hbmc.txt
81908190
F: drivers/mtd/hyperbus/
81918191
F: include/linux/mtd/hyperbus.h
81928192

8193+
Hyper-V vGPU DRIVER
8194+
M: Iouri Tarassov <iourit@microsoft.com>
8195+
L: linux-hyperv@vger.kernel.org
8196+
S: Supported
8197+
F: drivers/hv/dxgkrnl/
8198+
81938199
HYPERVISOR VIRTUAL CONSOLE DRIVER
81948200
L: linuxppc-dev@lists.ozlabs.org
81958201
S: Odd Fixes

drivers/hv/Kconfig

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,6 @@ config HYPERV_BALLOON
2626
help
2727
Select this option to enable Hyper-V Balloon driver.
2828

29+
source "drivers/hv/dxgkrnl/Kconfig"
30+
2931
endmenu

drivers/hv/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
obj-$(CONFIG_HYPERV) += hv_vmbus.o
33
obj-$(CONFIG_HYPERV_UTILS) += hv_utils.o
44
obj-$(CONFIG_HYPERV_BALLOON) += hv_balloon.o
5+
obj-$(CONFIG_DXGKRNL) += dxgkrnl/
56

67
CFLAGS_hv_trace.o = -I$(src)
78
CFLAGS_hv_balloon.o = -I$(src)

drivers/hv/dxgkrnl/Kconfig

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#
2+
# dxgkrnl configuration
3+
#
4+
5+
config DXGKRNL
6+
tristate "Microsoft Paravirtualized GPU support"
7+
depends on HYPERV
8+
depends on 64BIT || COMPILE_TEST
9+
help
10+
This driver supports paravirtualized virtual compute devices, exposed
11+
by Microsoft Hyper-V when Linux is running inside of a virtual machine
12+
hosted by Windows. The virtual machines needs to be configured to use
13+
host compute adapters. The driver name is dxgkrnl.
14+
15+
An example of such virtual machine is a Windows Subsystem for
16+
Linux container. When such container is instantiated, the Windows host
17+
assigns compatible host GPU adapters to the container. The corresponding
18+
virtual GPU devices appear on the PCI bus in the container. These
19+
devices are enumerated and accessed by this driver.
20+
21+
Communications with the driver are done by using the Microsoft libdxcore
22+
library, which translates the D3DKMT interface
23+
<https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/d3dkmthk/>
24+
to the driver IOCTLs. The virtual GPU devices are paravirtualized,
25+
which means that access to the hardware is done in the host. The driver
26+
communicates with the host using Hyper-V VM bus communication channels.

drivers/hv/dxgkrnl/Makefile

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# SPDX-License-Identifier: GPL-2.0
2+
# Makefile for the Linux video drivers.
3+
4+
obj-$(CONFIG_DXGKRNL) += dxgkrnl.o
5+
dxgkrnl-y := dxgmodule.o hmgr.o misc.o dxgadapter.o ioctl.o dxgvmbus.o dxgprocess.o

0 commit comments

Comments
 (0)