All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Liu, Yi L" <yi.l.liu@linux.intel.com>
To: Auger Eric <eric.auger@redhat.com>
Cc: qemu-devel@nongnu.org, mst@redhat.com,
	david@gibson.dropbear.id.au, pbonzini@redhat.com,
	alex.williamson@redhat.com, tianyu.lan@intel.com,
	kevin.tian@intel.com, yi.l.liu@intel.com, jasowang@redhat.com,
	peterx@redhat.com
Subject: Re: [Qemu-devel] [RESEND PATCH 5/6] vfio/pci: add notify framework based on IOMMUObject
Date: Tue, 14 Nov 2017 22:24:07 +0800	[thread overview]
Message-ID: <20171114142407.GC3895@sky-dev> (raw)
In-Reply-To: <7b16c99e-faad-9369-c165-c0dde588021b@redhat.com>

Hi Eric,

On Tue, Nov 14, 2017 at 11:23:03AM +0100, Auger Eric wrote:
> Hi Yi L,
> 
> On 03/11/2017 13:01, Liu, Yi L wrote:
> > This patch introduce a notify framework for IOMMUObject.iommu_notifiers.
> > Introduce VFIOGuestIOMMUObject is to link VFIO Container and the new
> > IOMMUObject notififiers.
> notifiers
> > 
> > VFIOGuestIOMMUObject instance is allocated when device is assigned and
> > meanwhile vIOMMU is exposed to guest.
> > 
> > If there is IOMMUObject behind the device AddressSpace(a.ka vIOMMU exposed).
> > The VFIOGuestIOMMUObject instance would be allocated and inserted to the
> > VFIOContainer.giommu_object_list.
> > 
> > Signed-off-by: Liu, Yi L <yi.l.liu@linux.intel.com>
> > ---
> >  hw/vfio/pci.c                 | 39 ++++++++++++++++++++++++++++++++++++++-
> >  include/hw/vfio/vfio-common.h |  8 ++++++++
> >  2 files changed, 46 insertions(+), 1 deletion(-)
> > 
> > diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
> > index c977ee3..5b77c7e 100644
> > --- a/hw/vfio/pci.c
> > +++ b/hw/vfio/pci.c
> > @@ -2642,6 +2642,8 @@ static void vfio_realize(PCIDevice *pdev, Error **errp)
> >      VFIOPCIDevice *vdev = DO_UPCAST(VFIOPCIDevice, pdev, pdev);
> >      VFIODevice *vbasedev_iter;
> >      VFIOGroup *group;
> > +    AddressSpace *as;
> > +    IOMMUObject *iommu;
> >      char *tmp, group_path[PATH_MAX], *group_name;
> >      Error *err = NULL;
> >      ssize_t len;
> > @@ -2694,7 +2696,8 @@ static void vfio_realize(PCIDevice *pdev, Error **errp)
> >  
> >      trace_vfio_realize(vdev->vbasedev.name, groupid);
> >  
> > -    group = vfio_get_group(groupid, pci_device_iommu_address_space(pdev), errp);
> > +    as = pci_device_iommu_address_space(pdev);
> > +    group = vfio_get_group(groupid, as, errp);
> >      if (!group) {
> >          goto error;
> >      }
> > @@ -2877,6 +2880,17 @@ static void vfio_realize(PCIDevice *pdev, Error **errp)
> >      vfio_register_req_notifier(vdev);
> >      vfio_setup_resetfn_quirk(vdev);
> >  
> > +    iommu = address_space_iommu_get(as);
> > +    if (iommu != NULL) {
> > +        VFIOGuestIOMMUObject *giommu;
> nit: void line needed

accepted.

> > +        giommu = g_malloc0(sizeof(*giommu));
> > +        giommu->iommu = iommu;
> > +        giommu->container = group->container;
> > +        QLIST_INSERT_HEAD(&group->container->giommu_object_list,
> There is no QLIST_INIT anywhere for container's giommu_object_list?

yes, need to add. thx for the catching.

Thanks,
Yi L

> 
> Thanks
> 
> Eric
> > +                          giommu,
> > +                          giommu_next);
> > +    }
> > +
> >      return;
> >  
> >  out_teardown:
> > @@ -2907,6 +2921,28 @@ static void vfio_instance_finalize(Object *obj)
> >      vfio_put_group(group);
> >  }
> >  
> > +static void vfio_release_iommu_object(PCIDevice *pdev)
> > +{
> > +    VFIOPCIDevice *vdev = DO_UPCAST(VFIOPCIDevice, pdev, pdev);
> > +    AddressSpace *as;
> > +    IOMMUObject *iommu;
> > +
> > +    as = pci_device_iommu_address_space(pdev);
> > +    iommu = address_space_iommu_get(as);
> > +    if (iommu != NULL) {
> > +        VFIOGuestIOMMUObject *giommu, *tmp;
> > +        VFIOGroup *group;
> > +        group = vdev->vbasedev.group;
> > +
> > +        QLIST_FOREACH_SAFE(giommu,
> > +                           &group->container->giommu_object_list,
> > +                           giommu_next, tmp) {
> > +            QLIST_REMOVE(giommu, giommu_next);
> > +            g_free(giommu);
> > +        }
> > +    }
> > +    return;
> > +}
> >  static void vfio_exitfn(PCIDevice *pdev)
> >  {
> >      VFIOPCIDevice *vdev = DO_UPCAST(VFIOPCIDevice, pdev, pdev);
> > @@ -2915,6 +2951,7 @@ static void vfio_exitfn(PCIDevice *pdev)
> >      vfio_unregister_err_notifier(vdev);
> >      pci_device_set_intx_routing_notifier(&vdev->pdev, NULL);
> >      vfio_disable_interrupts(vdev);
> > +    vfio_release_iommu_object(pdev);
> >      if (vdev->intx.mmap_timer) {
> >          timer_free(vdev->intx.mmap_timer);
> >      }
> > diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h
> > index 702a085..e4963cc 100644
> > --- a/include/hw/vfio/vfio-common.h
> > +++ b/include/hw/vfio/vfio-common.h
> > @@ -88,6 +88,7 @@ typedef struct VFIOContainer {
> >       * future
> >       */
> >      QLIST_HEAD(, VFIOGuestIOMMUMR) giommu_mr_list;
> > +    QLIST_HEAD(, VFIOGuestIOMMUObject) giommu_object_list;
> >      QLIST_HEAD(, VFIOHostDMAWindow) hostwin_list;
> >      QLIST_HEAD(, VFIOGroup) group_list;
> >      QLIST_ENTRY(VFIOContainer) next;
> > @@ -101,6 +102,13 @@ typedef struct VFIOGuestIOMMUMR {
> >      QLIST_ENTRY(VFIOGuestIOMMUMR) giommu_next;
> >  } VFIOGuestIOMMUMR;
> >  
> > +typedef struct VFIOGuestIOMMUObject {
> > +    VFIOContainer *container;
> > +    IOMMUObject *iommu;
> > +    IOMMUNotifier n;
> > +    QLIST_ENTRY(VFIOGuestIOMMUObject) giommu_next;
> > +} VFIOGuestIOMMUObject;
> > +
> >  typedef struct VFIOHostDMAWindow {
> >      hwaddr min_iova;
> >      hwaddr max_iova;
> > 

  reply	other threads:[~2017-11-14 14:40 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-03 12:01 [Qemu-devel] [RESEND PATCH 0/6] Introduce new iommu notifier framework Liu, Yi L
2017-11-03 12:01 ` [Qemu-devel] [RESEND PATCH 1/6] memory: rename existing iommu notifier to be iommu mr notifier Liu, Yi L
2017-11-03 12:01 ` [Qemu-devel] [RESEND PATCH 2/6] memory: introduce AddressSpaceOps and IOMMUObject Liu, Yi L
2017-11-13  5:56   ` David Gibson
2017-11-13  8:28     ` Peter Xu
2017-11-14  0:59       ` David Gibson
2017-11-14  3:31         ` Peter Xu
2017-12-18  5:41           ` David Gibson
2017-11-16  8:57         ` Liu, Yi L
2017-12-18  6:14           ` David Gibson
2017-12-18  9:17             ` Liu, Yi L
2017-12-18 11:22               ` David Gibson
2017-12-20  6:32                 ` Liu, Yi L
2017-12-20 11:01                   ` David Gibson
2017-12-22  6:47                     ` Liu, Yi L
2017-11-13  9:58     ` Liu, Yi L
2017-11-14  8:53       ` Auger Eric
2017-11-14 13:59         ` Liu, Yi L
2017-11-14 21:52           ` Auger Eric
2017-11-15  2:36             ` Liu, Yi L
2017-11-15  7:16             ` Peter Xu
2017-12-18 11:35               ` David Gibson
2017-12-20  6:47                 ` Liu, Yi L
2017-12-20 11:18                   ` David Gibson
2017-12-21  8:40                     ` Liu, Yi L
2018-01-03  0:28                       ` David Gibson
2018-01-04  9:40                         ` Liu, Yi L
2018-01-12 10:25                     ` Liu, Yi L
2018-01-16  6:04                       ` David Gibson
2017-12-18  6:30         ` David Gibson
2017-11-14 10:21   ` Auger Eric
2017-11-14 14:20     ` Liu, Yi L
2017-12-18 11:38     ` David Gibson
2017-11-03 12:01 ` [Qemu-devel] [RESEND PATCH 3/6] intel_iommu: provide AddressSpaceOps.iommu_get instance Liu, Yi L
2017-11-03 12:01 ` [Qemu-devel] [RESEND PATCH 4/6] vfio: rename GuestIOMMU to be GuestIOMMUMR Liu, Yi L
2017-11-03 12:01 ` [Qemu-devel] [RESEND PATCH 5/6] vfio/pci: add notify framework based on IOMMUObject Liu, Yi L
2017-11-14 10:23   ` Auger Eric
2017-11-14 14:24     ` Liu, Yi L [this message]
2017-11-03 12:01 ` [Qemu-devel] [RESEND PATCH 6/6] vfio/pci: register vfio_iommu_bind_pasidtbl_notify 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=20171114142407.GC3895@sky-dev \
    --to=yi.l.liu@linux.intel.com \
    --cc=alex.williamson@redhat.com \
    --cc=david@gibson.dropbear.id.au \
    --cc=eric.auger@redhat.com \
    --cc=jasowang@redhat.com \
    --cc=kevin.tian@intel.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peterx@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=tianyu.lan@intel.com \
    --cc=yi.l.liu@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 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.