All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Gibson <david@gibson.dropbear.id.au>
To: Laurent Vivier <lvivier@redhat.com>
Cc: thuth@redhat.com, aik@ozlabs.ru, mdroth@linux.vnet.ibm.com,
	qemu-devel@nongnu.org, alex.williamson@redhat.com,
	qemu-ppc@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 3/4] spapr_iommu: Provide a function to switch a TCE table to allowing VFIO
Date: Thu, 1 Oct 2015 10:43:05 +1000	[thread overview]
Message-ID: <20151001004305.GH23574@voom> (raw)
In-Reply-To: <560BAC75.5060209@redhat.com>

[-- Attachment #1: Type: text/plain, Size: 3562 bytes --]

On Wed, Sep 30, 2015 at 11:33:41AM +0200, Laurent Vivier wrote:
> 
> 
> On 30/09/2015 05:48, David Gibson wrote:
> > Because of the way non-VFIO guest IOMMU operations are KVM accelerated, not
> > all TCE tables (guest IOMMU contexts) can support VFIO devices.  Currently,
> > this is decided at creation time.
> > 
> > To support hotplug of VFIO devices, we need to allow a TCE table which
> > previously didn't allow VFIO devices to be switched so that it can.  This
> > patch adds an spapr_tce_set_need_vfio() function to do this, by
> > reallocating the table in userspace if necessary.
> > 
> > Currently this doesn't allow the KVM acceleration to be re-enabled if all
> > the VFIO devices are removed.  That's an optimization for another time.
> > 
> > Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
> > ---
> >  hw/ppc/spapr_iommu.c   | 32 ++++++++++++++++++++++++++++++++
> >  include/hw/ppc/spapr.h |  2 ++
> >  2 files changed, 34 insertions(+)
> > 
> > diff --git a/hw/ppc/spapr_iommu.c b/hw/ppc/spapr_iommu.c
> > index 5166cde..8d60f8b 100644
> > --- a/hw/ppc/spapr_iommu.c
> > +++ b/hw/ppc/spapr_iommu.c
> > @@ -168,6 +168,38 @@ static int spapr_tce_table_realize(DeviceState *dev)
> >      return 0;
> >  }
> >  
> > +void spapr_tce_set_need_vfio(sPAPRTCETable *tcet, bool need_vfio)
> > +{
> > +    size_t table_size = tcet->nb_table * sizeof(uint64_t);
> > +    void *newtable;
> > +
> > +    if (need_vfio == tcet->need_vfio) {
> > +        /* Nothing to do */
> > +        return;
> > +    }
> > +
> > +    if (!need_vfio) {
> > +        /* FIXME: We don't support transition back to KVM accelerated
> > +         * TCEs yet */
> 
> Report some warnings ?

I don't see much value in it.  At present nothing calls this function
with need_vfio == false anyway.  Switching back is harmless, just not
optimal.

> 
> > +        return;
> > +    }
> > +
> > +    tcet->need_vfio = true;
> > +
> > +    if (tcet->fd < 0) {
> > +        /* Table is already in userspace, nothing to be do */
> > +        return;
> > +    }
> > +
> > +    newtable = g_malloc0(table_size);
> > +    memcpy(newtable, tcet->table, table_size);
> > +
> > +    kvmppc_remove_spapr_tce(tcet->table, tcet->fd, tcet->nb_table);
> > +
> > +    tcet->fd = -1;
> > +    tcet->table = newtable;
> > +}
> > +
> >  sPAPRTCETable *spapr_tce_new_table(DeviceState *owner, uint32_t liobn,
> >                                     uint64_t bus_offset,
> >                                     uint32_t page_shift,
> > diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
> > index 27d65d5..5baa906 100644
> > --- a/include/hw/ppc/spapr.h
> > +++ b/include/hw/ppc/spapr.h
> > @@ -589,6 +589,8 @@ sPAPRTCETable *spapr_tce_new_table(DeviceState *owner, uint32_t liobn,
> >                                     uint32_t page_shift,
> >                                     uint32_t nb_table,
> >                                     bool need_vfio);
> > +void spapr_tce_set_need_vfio(sPAPRTCETable *tcet, bool need_vfio);
> > +
> >  MemoryRegion *spapr_tce_get_iommu(sPAPRTCETable *tcet);
> >  int spapr_dma_dt(void *fdt, int node_off, const char *propname,
> >                   uint32_t liobn, uint64_t window, uint32_t size);
> > 
> 
> Reviewed-by: Laurent Vivier <lvivier@redhat.com>
> 

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]

  reply	other threads:[~2015-10-01  1:40 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-30  3:48 [Qemu-devel] [PATCH 0/4] Allow VFIO devices on spapr-pci-host-bridge David Gibson
2015-09-30  3:48 ` [Qemu-devel] [PATCH 1/4] spapr_pci: Allow PCI host bridge DMA window to be configured David Gibson
2015-09-30 12:30   ` Laurent Vivier
2015-09-30  3:48 ` [Qemu-devel] [PATCH 2/4] spapr_iommu: Rename vfio_accel parameter David Gibson
2015-09-30  9:16   ` Laurent Vivier
2015-09-30  3:48 ` [Qemu-devel] [PATCH 3/4] spapr_iommu: Provide a function to switch a TCE table to allowing VFIO David Gibson
2015-09-30  9:33   ` Laurent Vivier
2015-10-01  0:43     ` David Gibson [this message]
2015-09-30 10:07   ` Thomas Huth
2015-10-01  0:45     ` David Gibson
2015-09-30  3:48 ` [Qemu-devel] [PATCH 4/4] spapr_pci: Allow VFIO devices to work on the normal PCI host bridge David Gibson
2015-09-30  9:35   ` Laurent Vivier
2015-09-30 10:09   ` Thomas Huth

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=20151001004305.GH23574@voom \
    --to=david@gibson.dropbear.id.au \
    --cc=aik@ozlabs.ru \
    --cc=alex.williamson@redhat.com \
    --cc=lvivier@redhat.com \
    --cc=mdroth@linux.vnet.ibm.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    --cc=thuth@redhat.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.