From: Mukesh R <mrathor@linux.microsoft.com>
To: linux-kernel@vger.kernel.org, linux-hyperv@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, iommu@lists.linux.dev,
linux-pci@vger.kernel.org, linux-arch@vger.kernel.org
Cc: kys@microsoft.com, haiyangz@microsoft.com, wei.liu@kernel.org,
decui@microsoft.com, longli@microsoft.com,
catalin.marinas@arm.com, will@kernel.org, tglx@linutronix.de,
mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com,
hpa@zytor.com, joro@8bytes.org, lpieralisi@kernel.org,
kwilczynski@kernel.org, mani@kernel.org, robh@kernel.org,
bhelgaas@google.com, arnd@arndb.de,
nunodasneves@linux.microsoft.com, mhklinux@outlook.com,
romank@linux.microsoft.com
Subject: [PATCH v0 10/15] PCI: hv: Build device id for a VMBus device
Date: Mon, 19 Jan 2026 22:42:25 -0800 [thread overview]
Message-ID: <20260120064230.3602565-11-mrathor@linux.microsoft.com> (raw)
In-Reply-To: <20260120064230.3602565-1-mrathor@linux.microsoft.com>
From: Mukesh Rathor <mrathor@linux.microsoft.com>
On Hyper-V, most hypercalls related to PCI passthru to map/unmap regions,
interrupts, etc need a device id as a parameter. This device id refers
to that specific device during the lifetime of passthru.
An L1VH VM only contains VMBus based devices. A device id for a VMBus
device is slightly different in that it uses the hv_pcibus_device info
for building it to make sure it matches exactly what the hypervisor
expects. This VMBus based device id is needed when attaching devices in
an L1VH based guest VM. Before building it, a check is done to make sure
the device is a valid VMBus device.
Signed-off-by: Mukesh Rathor <mrathor@linux.microsoft.com>
---
arch/x86/include/asm/mshyperv.h | 2 ++
drivers/pci/controller/pci-hyperv.c | 29 +++++++++++++++++++++++++++++
2 files changed, 31 insertions(+)
diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h
index eef4c3a5ba28..0d7fdfb25e76 100644
--- a/arch/x86/include/asm/mshyperv.h
+++ b/arch/x86/include/asm/mshyperv.h
@@ -188,6 +188,8 @@ bool hv_vcpu_is_preempted(int vcpu);
static inline void hv_apic_init(void) {}
#endif
+u64 hv_pci_vmbus_device_id(struct pci_dev *pdev);
+
struct irq_domain *hv_create_pci_msi_domain(void);
int hv_map_msi_interrupt(struct irq_data *data,
diff --git a/drivers/pci/controller/pci-hyperv.c b/drivers/pci/controller/pci-hyperv.c
index 8bc6a38c9b5a..40f0b06bb966 100644
--- a/drivers/pci/controller/pci-hyperv.c
+++ b/drivers/pci/controller/pci-hyperv.c
@@ -579,6 +579,8 @@ static void hv_pci_onchannelcallback(void *context);
#define DELIVERY_MODE APIC_DELIVERY_MODE_FIXED
#define HV_MSI_CHIP_FLAGS MSI_CHIP_FLAG_SET_ACK
+static bool hv_vmbus_pci_device(struct pci_bus *pbus);
+
static int hv_pci_irqchip_init(void)
{
return 0;
@@ -598,6 +600,26 @@ static unsigned int hv_msi_get_int_vector(struct irq_data *data)
#define hv_msi_prepare pci_msi_prepare
+u64 hv_pci_vmbus_device_id(struct pci_dev *pdev)
+{
+ u64 u64val;
+ struct hv_pcibus_device *hbus;
+ struct pci_bus *pbus = pdev->bus;
+
+ if (!hv_vmbus_pci_device(pbus))
+ return 0;
+
+ hbus = container_of(pbus->sysdata, struct hv_pcibus_device, sysdata);
+ u64val = (hbus->hdev->dev_instance.b[5] << 24) |
+ (hbus->hdev->dev_instance.b[4] << 16) |
+ (hbus->hdev->dev_instance.b[7] << 8) |
+ (hbus->hdev->dev_instance.b[6] & 0xf8) |
+ PCI_FUNC(pdev->devfn);
+
+ return u64val;
+}
+EXPORT_SYMBOL_GPL(hv_pci_vmbus_device_id);
+
/**
* hv_irq_retarget_interrupt() - "Unmask" the IRQ by setting its current
* affinity.
@@ -1404,6 +1426,13 @@ static struct pci_ops hv_pcifront_ops = {
.write = hv_pcifront_write_config,
};
+#ifdef CONFIG_X86
+static bool hv_vmbus_pci_device(struct pci_bus *pbus)
+{
+ return pbus->ops == &hv_pcifront_ops;
+}
+#endif /* CONFIG_X86 */
+
/*
* Paravirtual backchannel
*
--
2.51.2.vfs.0.1
next prev parent reply other threads:[~2026-01-20 6:43 UTC|newest]
Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-20 6:42 [PATCH v0 00/15] PCI passthru on Hyper-V (Part I) Mukesh R
2026-01-20 6:42 ` [PATCH v0 01/15] iommu/hyperv: rename hyperv-iommu.c to hyperv-irq.c Mukesh R
2026-01-20 19:08 ` kernel test robot
2026-01-20 21:09 ` kernel test robot
2026-02-05 18:48 ` Anirudh Rayabharam
2026-01-20 6:42 ` [PATCH v0 02/15] x86/hyperv: cosmetic changes in irqdomain.c for readability Mukesh R
2026-02-05 18:47 ` Anirudh Rayabharam
2026-01-20 6:42 ` [PATCH v0 03/15] x86/hyperv: add insufficient memory support in irqdomain.c Mukesh R
2026-01-21 0:53 ` kernel test robot
2026-01-20 6:42 ` [PATCH v0 04/15] mshv: Provide a way to get partition id if running in a VMM process Mukesh R
2026-01-23 18:23 ` Nuno Das Neves
2026-01-20 6:42 ` [PATCH v0 05/15] mshv: Declarations and definitions for VFIO-MSHV bridge device Mukesh R
2026-01-23 18:25 ` Nuno Das Neves
2026-01-24 0:36 ` Mukesh R
2026-01-20 6:42 ` [PATCH v0 06/15] mshv: Implement mshv bridge device for VFIO Mukesh R
2026-01-20 16:09 ` Stanislav Kinsburskii
2026-01-23 18:32 ` Nuno Das Neves
2026-01-24 0:37 ` Mukesh R
2026-01-20 6:42 ` [PATCH v0 07/15] mshv: Add ioctl support for MSHV-VFIO bridge device Mukesh R
2026-01-20 16:13 ` Stanislav Kinsburskii
2026-01-20 6:42 ` [PATCH v0 08/15] PCI: hv: rename hv_compose_msi_msg to hv_vmbus_compose_msi_msg Mukesh R
2026-01-28 14:03 ` Manivannan Sadhasivam
2026-01-20 6:42 ` [PATCH v0 09/15] mshv: Import data structs around device domains and irq remapping Mukesh R
2026-01-20 22:17 ` Stanislav Kinsburskii
2026-01-24 0:38 ` Mukesh R
2026-01-20 6:42 ` Mukesh R [this message]
2026-01-20 22:22 ` [PATCH v0 10/15] PCI: hv: Build device id for a VMBus device Stanislav Kinsburskii
2026-01-24 0:42 ` Mukesh R
2026-01-26 20:50 ` Stanislav Kinsburskii
2026-01-28 14:36 ` Manivannan Sadhasivam
2026-01-20 6:42 ` [PATCH v0 11/15] x86/hyperv: Build logical device ids for PCI passthru hcalls Mukesh R
2026-01-20 22:27 ` Stanislav Kinsburskii
2026-01-24 0:44 ` Mukesh R
2026-01-20 6:42 ` [PATCH v0 12/15] x86/hyperv: Implement hyperv virtual iommu Mukesh R
2026-01-21 0:12 ` Stanislav Kinsburskii
2026-01-24 1:26 ` Mukesh R
2026-01-26 15:57 ` Stanislav Kinsburskii
2026-01-27 3:02 ` Mukesh R
2026-01-27 18:46 ` Stanislav Kinsburskii
2026-01-30 22:51 ` Mukesh R
2026-02-02 16:20 ` Stanislav Kinsburskii
2026-01-22 5:18 ` Jacob Pan
2026-01-24 2:01 ` Mukesh R
2026-01-27 19:21 ` Jacob Pan
2026-01-27 22:31 ` Jacob Pan
2026-01-30 22:10 ` Mukesh R
2026-01-30 23:44 ` Mukesh R
2026-01-20 6:42 ` [PATCH v0 13/15] x86/hyperv: Basic interrupt support for direct attached devices Mukesh R
2026-01-21 0:47 ` Stanislav Kinsburskii
2026-01-24 2:08 ` Mukesh R
2026-01-20 6:42 ` [PATCH v0 14/15] mshv: Remove mapping of mmio space during map user ioctl Mukesh R
2026-01-21 1:41 ` Stanislav Kinsburskii
2026-01-23 18:34 ` Nuno Das Neves
2026-01-24 2:12 ` Mukesh R
2026-01-20 6:42 ` [PATCH v0 15/15] mshv: Populate mmio mappings for PCI passthru Mukesh R
2026-01-20 19:52 ` kernel test robot
2026-01-21 1:53 ` Stanislav Kinsburskii
2026-01-24 2:19 ` Mukesh R
2026-01-26 18:15 ` Stanislav Kinsburskii
2026-01-27 3:07 ` Mukesh R
2026-01-27 18:57 ` Stanislav Kinsburskii
2026-01-30 22:17 ` Mukesh R
2026-02-02 16:30 ` Stanislav Kinsburskii
2026-02-04 22:52 ` Mukesh R
2026-02-05 16:28 ` Stanislav Kinsburskii
2026-02-05 17:57 ` Mukesh R
2026-02-05 18:31 ` Stanislav Kinsburskii
2026-01-20 21:50 ` [PATCH v0 00/15] PCI passthru on Hyper-V (Part I) Jacob Pan
2026-01-24 2:27 ` Mukesh R
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260120064230.3602565-11-mrathor@linux.microsoft.com \
--to=mrathor@linux.microsoft.com \
--cc=arnd@arndb.de \
--cc=bhelgaas@google.com \
--cc=bp@alien8.de \
--cc=catalin.marinas@arm.com \
--cc=dave.hansen@linux.intel.com \
--cc=decui@microsoft.com \
--cc=haiyangz@microsoft.com \
--cc=hpa@zytor.com \
--cc=iommu@lists.linux.dev \
--cc=joro@8bytes.org \
--cc=kwilczynski@kernel.org \
--cc=kys@microsoft.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-hyperv@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=longli@microsoft.com \
--cc=lpieralisi@kernel.org \
--cc=mani@kernel.org \
--cc=mhklinux@outlook.com \
--cc=mingo@redhat.com \
--cc=nunodasneves@linux.microsoft.com \
--cc=robh@kernel.org \
--cc=romank@linux.microsoft.com \
--cc=tglx@linutronix.de \
--cc=wei.liu@kernel.org \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox