From: Liu Yi L <yi.l.liu@intel.com> To: qemu-devel@nongnu.org, alex.williamson@redhat.com, peterx@redhat.com Cc: pbonzini@redhat.com, mst@redhat.com, eric.auger@redhat.com, david@gibson.dropbear.id.au, kevin.tian@intel.com, yi.l.liu@intel.com, jun.j.tian@intel.com, yi.y.sun@intel.com, kvm@vger.kernel.org, Jacob Pan <jacob.jun.pan@linux.intel.com>, Yi Sun <yi.y.sun@linux.intel.com> Subject: [RFC v3.1 05/22] hw/pci: add pci_device_setup_iommu Date: Sat, 22 Feb 2020 00:07:06 -0800 [thread overview] Message-ID: <1582358843-51931-6-git-send-email-yi.l.liu@intel.com> (raw) In-Reply-To: <1582358843-51931-1-git-send-email-yi.l.liu@intel.com> HostIOMMUContext was introduced to provide an explicit way for vIOMMU emulators call into pass-through components (e.g. VFIO). vIOMMU needs to get the HostIOMMUContext before using it. This patch adds a new callback in PCIDevice, which would be set by pass-through components, and be used by vIOMMU emulators to get HostIOMMUContext. Cc: Kevin Tian <kevin.tian@intel.com> Cc: Jacob Pan <jacob.jun.pan@linux.intel.com> Cc: Peter Xu <peterx@redhat.com> Cc: Eric Auger <eric.auger@redhat.com> Cc: Yi Sun <yi.y.sun@linux.intel.com> Cc: David Gibson <david@gibson.dropbear.id.au> Cc: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Liu, Yi L <yi.l.liu@intel.com> --- hw/pci/pci.c | 10 ++++++++++ include/hw/pci/pci.h | 6 ++++++ 2 files changed, 16 insertions(+) diff --git a/hw/pci/pci.c b/hw/pci/pci.c index e1ed667..3166cc3 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -2695,6 +2695,16 @@ void pci_setup_iommu(PCIBus *bus, PCIIOMMUFunc fn, void *opaque) bus->iommu_opaque = opaque; } +void pci_device_setup_iommu(PCIDevice *dev, PCIHostIOMMUFunc fn) +{ + dev->host_iommu_fn = fn; +} + +void pci_device_unset_iommu(PCIDevice *dev) +{ + dev->host_iommu_fn = NULL; +} + static void pci_dev_get_w64(PCIBus *b, PCIDevice *dev, void *opaque) { Range *range = opaque; diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h index 2acd832..e44eefb 100644 --- a/include/hw/pci/pci.h +++ b/include/hw/pci/pci.h @@ -8,6 +8,7 @@ #include "hw/isa/isa.h" #include "hw/pci/pcie.h" +#include "hw/iommu/host_iommu_context.h" extern bool pci_available; @@ -248,6 +249,7 @@ typedef void (*MSIVectorReleaseNotifier)(PCIDevice *dev, unsigned int vector); typedef void (*MSIVectorPollNotifier)(PCIDevice *dev, unsigned int vector_start, unsigned int vector_end); +typedef HostIOMMUContext *(*PCIHostIOMMUFunc)(PCIDevice *); enum PCIReqIDType { PCI_REQ_ID_INVALID = 0, @@ -356,6 +358,8 @@ struct PCIDevice { /* ID of standby device in net_failover pair */ char *failover_pair_id; + /* Callback to get host iommu context */ + PCIHostIOMMUFunc host_iommu_fn; }; void pci_register_bar(PCIDevice *pci_dev, int region_num, @@ -488,6 +492,8 @@ typedef AddressSpace *(*PCIIOMMUFunc)(PCIBus *, void *, int); AddressSpace *pci_device_iommu_address_space(PCIDevice *dev); void pci_setup_iommu(PCIBus *bus, PCIIOMMUFunc fn, void *opaque); +void pci_device_setup_iommu(PCIDevice *dev, PCIHostIOMMUFunc fn); +void pci_device_unset_iommu(PCIDevice *dev); static inline void pci_set_byte(uint8_t *config, uint8_t val) -- 2.7.4
WARNING: multiple messages have this Message-ID (diff)
From: Liu Yi L <yi.l.liu@intel.com> To: qemu-devel@nongnu.org, alex.williamson@redhat.com, peterx@redhat.com Cc: kevin.tian@intel.com, yi.l.liu@intel.com, Yi Sun <yi.y.sun@linux.intel.com>, kvm@vger.kernel.org, mst@redhat.com, jun.j.tian@intel.com, eric.auger@redhat.com, yi.y.sun@intel.com, Jacob Pan <jacob.jun.pan@linux.intel.com>, pbonzini@redhat.com, david@gibson.dropbear.id.au Subject: [RFC v3.1 05/22] hw/pci: add pci_device_setup_iommu Date: Sat, 22 Feb 2020 00:07:06 -0800 [thread overview] Message-ID: <1582358843-51931-6-git-send-email-yi.l.liu@intel.com> (raw) In-Reply-To: <1582358843-51931-1-git-send-email-yi.l.liu@intel.com> HostIOMMUContext was introduced to provide an explicit way for vIOMMU emulators call into pass-through components (e.g. VFIO). vIOMMU needs to get the HostIOMMUContext before using it. This patch adds a new callback in PCIDevice, which would be set by pass-through components, and be used by vIOMMU emulators to get HostIOMMUContext. Cc: Kevin Tian <kevin.tian@intel.com> Cc: Jacob Pan <jacob.jun.pan@linux.intel.com> Cc: Peter Xu <peterx@redhat.com> Cc: Eric Auger <eric.auger@redhat.com> Cc: Yi Sun <yi.y.sun@linux.intel.com> Cc: David Gibson <david@gibson.dropbear.id.au> Cc: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Liu, Yi L <yi.l.liu@intel.com> --- hw/pci/pci.c | 10 ++++++++++ include/hw/pci/pci.h | 6 ++++++ 2 files changed, 16 insertions(+) diff --git a/hw/pci/pci.c b/hw/pci/pci.c index e1ed667..3166cc3 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -2695,6 +2695,16 @@ void pci_setup_iommu(PCIBus *bus, PCIIOMMUFunc fn, void *opaque) bus->iommu_opaque = opaque; } +void pci_device_setup_iommu(PCIDevice *dev, PCIHostIOMMUFunc fn) +{ + dev->host_iommu_fn = fn; +} + +void pci_device_unset_iommu(PCIDevice *dev) +{ + dev->host_iommu_fn = NULL; +} + static void pci_dev_get_w64(PCIBus *b, PCIDevice *dev, void *opaque) { Range *range = opaque; diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h index 2acd832..e44eefb 100644 --- a/include/hw/pci/pci.h +++ b/include/hw/pci/pci.h @@ -8,6 +8,7 @@ #include "hw/isa/isa.h" #include "hw/pci/pcie.h" +#include "hw/iommu/host_iommu_context.h" extern bool pci_available; @@ -248,6 +249,7 @@ typedef void (*MSIVectorReleaseNotifier)(PCIDevice *dev, unsigned int vector); typedef void (*MSIVectorPollNotifier)(PCIDevice *dev, unsigned int vector_start, unsigned int vector_end); +typedef HostIOMMUContext *(*PCIHostIOMMUFunc)(PCIDevice *); enum PCIReqIDType { PCI_REQ_ID_INVALID = 0, @@ -356,6 +358,8 @@ struct PCIDevice { /* ID of standby device in net_failover pair */ char *failover_pair_id; + /* Callback to get host iommu context */ + PCIHostIOMMUFunc host_iommu_fn; }; void pci_register_bar(PCIDevice *pci_dev, int region_num, @@ -488,6 +492,8 @@ typedef AddressSpace *(*PCIIOMMUFunc)(PCIBus *, void *, int); AddressSpace *pci_device_iommu_address_space(PCIDevice *dev); void pci_setup_iommu(PCIBus *bus, PCIIOMMUFunc fn, void *opaque); +void pci_device_setup_iommu(PCIDevice *dev, PCIHostIOMMUFunc fn); +void pci_device_unset_iommu(PCIDevice *dev); static inline void pci_set_byte(uint8_t *config, uint8_t val) -- 2.7.4
next prev parent reply other threads:[~2020-02-22 8:02 UTC|newest] Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-02-22 8:07 [RFC v3.1 00/22] intel_iommu: expose Shared Virtual Addressing to VMs Liu Yi L 2020-02-22 8:07 ` Liu Yi L 2020-02-22 8:07 ` [RFC v3.1 01/22] scripts/update-linux-headers: Import iommu.h Liu Yi L 2020-02-22 8:07 ` Liu Yi L 2020-02-22 8:07 ` [RFC v3.1 02/22] header file update VFIO/IOMMU vSVA APIs Liu Yi L 2020-02-22 8:07 ` Liu Yi L 2020-02-22 8:07 ` [RFC v3.1 03/22] vfio: check VFIO_TYPE1_NESTING_IOMMU support Liu Yi L 2020-02-22 8:07 ` Liu Yi L 2020-02-22 8:07 ` [RFC v3.1 04/22] hw/iommu: introduce HostIOMMUContext Liu Yi L 2020-02-22 8:07 ` Liu Yi L 2020-02-22 8:07 ` Liu Yi L [this message] 2020-02-22 8:07 ` [RFC v3.1 05/22] hw/pci: add pci_device_setup_iommu Liu Yi L 2020-02-22 8:07 ` [RFC v3.1 06/22] vfio/pci: init HostIOMMUContext per-container Liu Yi L 2020-02-22 8:07 ` Liu Yi L 2020-02-22 8:07 ` [RFC v3.1 07/22] vfio: get nesting iommu cap info from Kernel Liu Yi L 2020-02-22 8:07 ` Liu Yi L 2020-02-22 8:07 ` [RFC v3.1 08/22] vfio/common: add pasid_alloc/free support Liu Yi L 2020-02-22 8:07 ` Liu Yi L 2020-02-22 8:07 ` [RFC v3.1 09/22] hw/pci: add pci_device_host_iommu_context() Liu Yi L 2020-02-22 8:07 ` Liu Yi L 2020-02-22 8:07 ` [RFC v3.1 10/22] intel_iommu: add virtual command capability support Liu Yi L 2020-02-22 8:07 ` Liu Yi L 2020-02-22 8:07 ` [RFC v3.1 11/22] intel_iommu: process pasid cache invalidation Liu Yi L 2020-02-22 8:07 ` Liu Yi L 2020-02-22 8:07 ` [RFC v3.1 12/22] intel_iommu: add PASID cache management infrastructure Liu Yi L 2020-02-22 8:07 ` Liu Yi L 2020-02-22 8:07 ` [RFC v3.1 13/22] vfio: add bind stage-1 page table support Liu Yi L 2020-02-22 8:07 ` Liu Yi L 2020-02-22 8:07 ` [RFC v3.1 14/22] intel_iommu: bind/unbind guest page table to host Liu Yi L 2020-02-22 8:07 ` Liu Yi L 2020-02-22 8:07 ` [RFC v3.1 15/22] intel_iommu: replay guest pasid bindings " Liu Yi L 2020-02-22 8:07 ` Liu Yi L 2020-02-22 8:07 ` [RFC v3.1 16/22] intel_iommu: replay pasid binds after context cache invalidation Liu Yi L 2020-02-22 8:07 ` Liu Yi L 2020-02-22 8:07 ` [RFC v3.1 17/22] intel_iommu: do not pass down pasid bind for PASID #0 Liu Yi L 2020-02-22 8:07 ` Liu Yi L 2020-02-22 8:07 ` [RFC v3.1 18/22] vfio/common: add support for flush iommu stage-1 cache Liu Yi L 2020-02-22 8:07 ` Liu Yi L 2020-02-22 8:07 ` [RFC v3.1 19/22] intel_iommu: process PASID-based iotlb invalidation Liu Yi L 2020-02-22 8:07 ` Liu Yi L 2020-02-22 8:07 ` [RFC v3.1 20/22] intel_iommu: propagate PASID-based iotlb invalidation to host Liu Yi L 2020-02-22 8:07 ` Liu Yi L 2020-02-22 8:07 ` [RFC v3.1 21/22] intel_iommu: process PASID-based Device-TLB invalidation Liu Yi L 2020-02-22 8:07 ` Liu Yi L 2020-02-22 8:07 ` [RFC v3.1 22/22] intel_iommu: modify x-scalable-mode to be string option Liu Yi L 2020-02-22 8:07 ` Liu Yi L 2020-02-22 8:21 ` [RFC v3.1 00/22] intel_iommu: expose Shared Virtual Addressing to VMs no-reply 2020-02-22 8:21 ` no-reply
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=1582358843-51931-6-git-send-email-yi.l.liu@intel.com \ --to=yi.l.liu@intel.com \ --cc=alex.williamson@redhat.com \ --cc=david@gibson.dropbear.id.au \ --cc=eric.auger@redhat.com \ --cc=jacob.jun.pan@linux.intel.com \ --cc=jun.j.tian@intel.com \ --cc=kevin.tian@intel.com \ --cc=kvm@vger.kernel.org \ --cc=mst@redhat.com \ --cc=pbonzini@redhat.com \ --cc=peterx@redhat.com \ --cc=qemu-devel@nongnu.org \ --cc=yi.y.sun@intel.com \ --cc=yi.y.sun@linux.intel.com \ /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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.