From: Peter Xu <peterx@redhat.com>
To: "Liu, Yi L" <yi.l.liu@linux.intel.com>
Cc: qemu-devel@nongnu.org, mst@redhat.com,
david@gibson.dropbear.id.au, pbonzini@redhat.com,
alex.williamson@redhat.com, eric.auger.pro@gmail.com,
yi.l.liu@intel.com, kevin.tian@intel.com, jasowang@redhat.com
Subject: Re: [Qemu-devel] [PATCH v3 07/12] vfio/pci: register sva notifier
Date: Tue, 6 Mar 2018 14:44:36 +0800 [thread overview]
Message-ID: <20180306064436.GD3615@xz-mi> (raw)
In-Reply-To: <1519900415-30314-8-git-send-email-yi.l.liu@linux.intel.com>
On Thu, Mar 01, 2018 at 06:33:30PM +0800, Liu, Yi L wrote:
> This patch shows how sva notifier is registered. And provided
> an example by registering notify func for tlb flush propagation.
>
> Signed-off-by: Liu, Yi L <yi.l.liu@linux.intel.com>
> ---
> hw/vfio/pci.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++--
> 1 file changed, 53 insertions(+), 2 deletions(-)
>
> diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
> index a60a4d7..b7297cc 100644
> --- a/hw/vfio/pci.c
> +++ b/hw/vfio/pci.c
> @@ -2775,6 +2775,26 @@ static void vfio_unregister_req_notifier(VFIOPCIDevice *vdev)
> vdev->req_enabled = false;
> }
>
> +static VFIOContainer *vfio_get_container_from_busdev(PCIBus *bus,
> + int32_t devfn)
> +{
> + VFIOGroup *group;
> + VFIOPCIDevice *vdev_iter;
> + VFIODevice *vbasedev_iter;
> + PCIDevice *pdev_iter;
> +
> + QLIST_FOREACH(group, &vfio_group_list, next) {
> + QLIST_FOREACH(vbasedev_iter, &group->device_list, next) {
> + vdev_iter = container_of(vbasedev_iter, VFIOPCIDevice, vbasedev);
> + pdev_iter = &vdev_iter->pdev;
> + if (pci_get_bus(pdev_iter) == bus && pdev_iter->devfn == devfn) {
> + return group->container;
> + }
> + }
> + }
> + return NULL;
> +}
> +
> static void vfio_pci_device_sva_bind_pasid_table(PCIBus *bus,
> int32_t devfn, uint64_t pasidt_addr, uint32_t size)
> {
> @@ -2783,11 +2803,42 @@ static void vfio_pci_device_sva_bind_pasid_table(PCIBus *bus,
> So far, Intel VT-d and AMD IOMMU requires it. */
> }
>
> +static void vfio_iommu_sva_tlb_invalidate_notify(IOMMUSVANotifier *n,
> + IOMMUSVAEventData *event_data)
> +{
> +/* Sample code, would be detailed in coming virt-SVA patchset.
> + VFIOGuestIOMMUSVAContext *gsva_ctx;
> + IOMMUSVAContext *sva_ctx;
> + VFIOContainer *container;
> +
> + gsva_ctx = container_of(n, VFIOGuestIOMMUSVAContext, n);
> + container = gsva_ctx->container;
> +
> + TODO: forward to host through VFIO IOCTL
IMHO if the series is not ready for merging, we can still mark it as
RFC and declare that so people won't need to go into details of the
patches.
> +*/
> +}
> +
> static void vfio_pci_device_sva_register_notifier(PCIBus *bus,
> int32_t devfn, IOMMUSVAContext *sva_ctx)
> {
> - /* Register notifier for TLB invalidation propagation
> - */
> + VFIOContainer *container = vfio_get_container_from_busdev(bus, devfn);
> +
> + if (container != NULL) {
> + VFIOGuestIOMMUSVAContext *gsva_ctx;
> + gsva_ctx = g_malloc0(sizeof(*gsva_ctx));
> + gsva_ctx->sva_ctx = sva_ctx;
> + gsva_ctx->container = container;
> + QLIST_INSERT_HEAD(&container->gsva_ctx_list,
> + gsva_ctx,
> + gsva_ctx_next);
> + /* Register vfio_iommu_sva_tlb_invalidate_notify with event flag
> + IOMMU_SVA_EVENT_TLB_INV */
> + iommu_sva_notifier_register(sva_ctx,
> + &gsva_ctx->n,
> + vfio_iommu_sva_tlb_invalidate_notify,
> + IOMMU_SVA_EVENT_TLB_INV);
I would squash this patch into previous one since basically this is
only part of the implementation to provide vfio-speicific register
hook.
But a more important question is... why this?
IMHO the notifier registration can be general for PCI. Why vfio needs
to provide it's own register callback? Would it be enough if it only
provides its own notify callback?
Thanks,
> + return;
> + }
> }
>
> static void vfio_pci_device_sva_unregister_notifier(PCIBus *bus,
> --
> 1.9.1
>
--
Peter Xu
next prev parent reply other threads:[~2018-03-06 6:44 UTC|newest]
Thread overview: 65+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-01 10:33 [Qemu-devel] [PATCH v3 00/12] Introduce new iommu notifier framework for virt-SVA Liu, Yi L
2018-03-01 10:33 ` [Qemu-devel] [PATCH v3 01/12] memory: rename existing iommu notifier to be iommu mr notifier Liu, Yi L
2018-03-02 15:01 ` Paolo Bonzini
2018-03-05 10:09 ` Liu, Yi L
2018-03-01 10:33 ` [Qemu-devel] [PATCH v3 02/12] vfio: rename GuestIOMMU to be GuestIOMMUMR Liu, Yi L
2018-03-01 10:33 ` [Qemu-devel] [PATCH v3 03/12] hw/core: introduce IOMMUSVAContext for virt-SVA Liu, Yi L
2018-03-02 15:13 ` Paolo Bonzini
2018-03-05 8:10 ` Liu, Yi L
2018-03-06 8:51 ` Liu, Yi L
2018-03-01 10:33 ` [Qemu-devel] [PATCH v3 04/12] vfio/pci: add notify framework based on IOMMUSVAContext Liu, Yi L
2018-03-05 7:45 ` Peter Xu
2018-03-05 8:05 ` Liu, Yi L
2018-03-01 10:33 ` [Qemu-devel] [PATCH v3 05/12] hw/pci: introduce PCISVAOps to PCIDevice Liu, Yi L
2018-03-02 15:10 ` Paolo Bonzini
2018-03-05 8:11 ` Liu, Yi L
2018-03-06 10:33 ` Liu, Yi L
2018-04-12 2:36 ` David Gibson
2018-04-12 11:06 ` Liu, Yi L
2018-03-01 10:33 ` [Qemu-devel] [PATCH v3 06/12] vfio/pci: provide vfio_pci_sva_ops instance Liu, Yi L
2018-03-01 10:33 ` [Qemu-devel] [PATCH v3 07/12] vfio/pci: register sva notifier Liu, Yi L
2018-03-06 6:44 ` Peter Xu [this message]
2018-03-06 8:00 ` Liu, Yi L
2018-03-06 12:09 ` Peter Xu
2018-03-08 11:22 ` Liu, Yi L
2018-03-09 7:05 ` Peter Xu
2018-03-09 10:25 ` Liu, Yi L
2018-03-01 10:33 ` [Qemu-devel] [PATCH v3 08/12] hw/pci: introduce pci_device_notify_iommu() Liu, Yi L
2018-03-02 15:12 ` Paolo Bonzini
2018-03-05 8:42 ` Liu, Yi L
2018-03-06 10:18 ` Paolo Bonzini
2018-03-06 11:03 ` Liu, Yi L
2018-03-06 11:22 ` Paolo Bonzini
2018-03-06 11:27 ` Liu, Yi L
2018-03-02 16:06 ` Paolo Bonzini
2018-03-05 8:43 ` Liu, Yi L
2018-03-05 10:43 ` Peter Xu
2018-03-06 10:19 ` Paolo Bonzini
2018-03-06 10:47 ` Peter Xu
2018-03-06 11:06 ` Liu, Yi L
2018-03-05 8:27 ` Peter Xu
2018-03-05 8:46 ` Liu, Yi L
2018-03-01 10:33 ` [Qemu-devel] [PATCH v3 09/12] intel_iommu: record assigned devices in a list Liu, Yi L
2018-03-02 15:08 ` Paolo Bonzini
2018-03-05 9:39 ` Liu, Yi L
2018-03-01 10:33 ` [Qemu-devel] [PATCH v3 10/12] intel_iommu: bind guest pasid table to host Liu, Yi L
2018-03-01 10:33 ` [Qemu-devel] [PATCH v3 11/12] intel_iommu: add framework for PASID AddressSpace management Liu, Yi L
2018-03-02 14:52 ` Paolo Bonzini
2018-03-05 9:12 ` Liu, Yi L
2018-03-02 15:00 ` Paolo Bonzini
2018-03-05 9:11 ` Liu, Yi L
2018-03-06 10:26 ` Paolo Bonzini
2018-03-08 10:42 ` Liu, Yi L
2018-03-01 10:33 ` [Qemu-devel] [PATCH v3 12/12] intel_iommu: bind device to PASID tagged AddressSpace Liu, Yi L
2018-03-02 14:51 ` Paolo Bonzini
2018-03-05 9:56 ` Liu, Yi L
2018-03-06 11:43 ` Peter Xu
2018-03-08 9:39 ` Liu, Yi L
2018-03-09 7:59 ` Peter Xu
2018-03-09 8:09 ` Tian, Kevin
2018-03-09 11:05 ` Liu, Yi L
2018-03-06 6:55 ` [Qemu-devel] [PATCH v3 00/12] Introduce new iommu notifier framework for virt-SVA Peter Xu
2018-03-06 7:45 ` Liu, Yi L
2018-03-07 5:38 ` Peter Xu
2018-03-08 9:10 ` Liu, Yi L
-- strict thread matches above, loose matches on Subject: below --
2018-03-01 10:31 Liu, Yi L
2018-03-01 10:31 ` [Qemu-devel] [PATCH v3 07/12] vfio/pci: register sva notifier Liu, Yi L
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=20180306064436.GD3615@xz-mi \
--to=peterx@redhat.com \
--cc=alex.williamson@redhat.com \
--cc=david@gibson.dropbear.id.au \
--cc=eric.auger.pro@gmail.com \
--cc=jasowang@redhat.com \
--cc=kevin.tian@intel.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=yi.l.liu@intel.com \
--cc=yi.l.liu@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: 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;
as well as URLs for NNTP newsgroup(s).