Thread (13 messages) 13 messages, 3 authors, 26d ago

Re: [PATCH V0 3/3] x86/hyperv: Implement root VM IOMMU kernel only driver

flat view

From: Easwar Hariharan <hidden>
Date: 2026-09-24 16:30:27
Also in: linux-arch, linux-iommu, lkml

On 9/22/2026 14:42, Mukesh R wrote:
On 9/22/26 10:49, Easwar Hariharan wrote:
quoted
On 9/21/2026 15:50, Mukesh R wrote:
quoted
Add a new file to implement a kernel only virtual IOMMU that works
with Microsoft Hyper-V hypervisor on privileged VMs aka root VMs. The
hypervisor claims the IOMMU upon boot, and this driver communicates with
it for creating and deleting paging domains, attaching of devices, mapping
and unmapping of pages, etc. During boot, hypervisor automatically creates
identity and blocked domains, so there is no need to do hypercalls to
create them.  This is a kernel only driver and only supported on baremetal
root (and not L1VH root) without any guest passthru support. Support
for guest device passthru will be added incrementally.

Signed-off-by: Mukesh R <redacted>
---
  arch/x86/kernel/pci-dma.c            |   2 +
  drivers/iommu/Kconfig                |   1 +
  drivers/iommu/hyperv/Kconfig         |  15 +
  drivers/iommu/hyperv/Makefile        |   1 +
  drivers/iommu/hyperv/hv-iommu-root.c | 645 +++++++++++++++++++++++++++
  include/asm-generic/mshyperv.h       |   3 +
  include/linux/hyperv.h               |   6 +
  7 files changed, 673 insertions(+)
  create mode 100644 drivers/iommu/hyperv/Kconfig
  create mode 100644 drivers/iommu/hyperv/hv-iommu-root.c
<snip>
quoted
quoted
diff --git a/drivers/iommu/hyperv/hv-iommu-root.c b/drivers/iommu/hyperv/hv-iommu-root.c
new file mode 100644
index 000000000000..a5268e0e52cc
--- /dev/null
+++ b/drivers/iommu/hyperv/hv-iommu-root.c
@@ -0,0 +1,645 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Hyper-V root vIOMMU driver.
+ * Copyright (C) 2026, Microsoft, Inc.
+ */
<snip>
quoted
quoted
+
+/*
+ * Currently, hypervisor does not provide list of devices it is using
+ * dynamically. So use this to allow users to manually specify devices that
+ * should be skipped. (eg. hypervisor debugger using some network device).
+ */
Maybe a flag, say OwnedByHyp = 1 returned for the root equivalent of the guest driver's
GetLogicalDeviceProperty hypercall can solve this.
"hypervisor does not provide list of devices it is using dynamically"
Sorry, can you be more verbose? When I read this response yesterday, I thought by dynamically, you
meant at runtime, but on thinking this through, the current scheme doesn't help with that either.
You have to pass the kernel command-line parameter at boot because the IOMMU driver is built-in, and
so if a debugger is attached to the hypervisor "at runtime", your current scheme, just like my suggestion
for a flag returned by GetPhysicalDeviceProperty above, requires a reboot of the root partition.
<snip>
quoted
quoted
  #endif /* _HYPERV_H */
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help